diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml index b8dcb4a4a..3815c983c 100644 --- a/.github/.OwlBot.lock.yaml +++ b/.github/.OwlBot.lock.yaml @@ -13,4 +13,4 @@ # limitations under the License. docker: image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest - digest: sha256:993a058718e84a82fda04c3177e58f0a43281a996c7c395e0a56ccc4d6d210d7 + digest: sha256:7a40313731a7cb1454eef6b33d3446ebb121836738dc3ab3d2d3ded5268c35b6 diff --git a/.kokoro/requirements.txt b/.kokoro/requirements.txt index 385f2d4d6..d15994bac 100644 --- a/.kokoro/requirements.txt +++ b/.kokoro/requirements.txt @@ -325,31 +325,30 @@ platformdirs==2.5.2 \ --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 # via virtualenv -protobuf==3.20.1 \ - --hash=sha256:06059eb6953ff01e56a25cd02cca1a9649a75a7e65397b5b9b4e929ed71d10cf \ - --hash=sha256:097c5d8a9808302fb0da7e20edf0b8d4703274d140fd25c5edabddcde43e081f \ - --hash=sha256:284f86a6207c897542d7e956eb243a36bb8f9564c1742b253462386e96c6b78f \ - --hash=sha256:32ca378605b41fd180dfe4e14d3226386d8d1b002ab31c969c366549e66a2bb7 \ - --hash=sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996 \ - --hash=sha256:62f1b5c4cd6c5402b4e2d63804ba49a327e0c386c99b1675c8a0fefda23b2067 \ - --hash=sha256:69ccfdf3657ba59569c64295b7d51325f91af586f8d5793b734260dfe2e94e2c \ - --hash=sha256:6f50601512a3d23625d8a85b1638d914a0970f17920ff39cec63aaef80a93fb7 \ - --hash=sha256:7403941f6d0992d40161aa8bb23e12575637008a5a02283a930addc0508982f9 \ - --hash=sha256:755f3aee41354ae395e104d62119cb223339a8f3276a0cd009ffabfcdd46bb0c \ - --hash=sha256:77053d28427a29987ca9caf7b72ccafee011257561259faba8dd308fda9a8739 \ - --hash=sha256:7e371f10abe57cee5021797126c93479f59fccc9693dafd6bd5633ab67808a91 \ - --hash=sha256:9016d01c91e8e625141d24ec1b20fed584703e527d28512aa8c8707f105a683c \ - --hash=sha256:9be73ad47579abc26c12024239d3540e6b765182a91dbc88e23658ab71767153 \ - --hash=sha256:adc31566d027f45efe3f44eeb5b1f329da43891634d61c75a5944e9be6dd42c9 \ - --hash=sha256:adfc6cf69c7f8c50fd24c793964eef18f0ac321315439d94945820612849c388 \ - --hash=sha256:af0ebadc74e281a517141daad9d0f2c5d93ab78e9d455113719a45a49da9db4e \ - --hash=sha256:cb29edb9eab15742d791e1025dd7b6a8f6fcb53802ad2f6e3adcb102051063ab \ - --hash=sha256:cd68be2559e2a3b84f517fb029ee611546f7812b1fdd0aa2ecc9bc6ec0e4fdde \ - --hash=sha256:cdee09140e1cd184ba9324ec1df410e7147242b94b5f8b0c64fc89e38a8ba531 \ - --hash=sha256:db977c4ca738dd9ce508557d4fce0f5aebd105e158c725beec86feb1f6bc20d8 \ - --hash=sha256:dd5789b2948ca702c17027c84c2accb552fc30f4622a98ab5c51fcfe8c50d3e7 \ - --hash=sha256:e250a42f15bf9d5b09fe1b293bdba2801cd520a9f5ea2d7fb7536d4441811d20 \ - --hash=sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3 +protobuf==3.20.2 \ + --hash=sha256:03d76b7bd42ac4a6e109742a4edf81ffe26ffd87c5993126d894fe48a120396a \ + --hash=sha256:09e25909c4297d71d97612f04f41cea8fa8510096864f2835ad2f3b3df5a5559 \ + --hash=sha256:18e34a10ae10d458b027d7638a599c964b030c1739ebd035a1dfc0e22baa3bfe \ + --hash=sha256:291fb4307094bf5ccc29f424b42268640e00d5240bf0d9b86bf3079f7576474d \ + --hash=sha256:2c0b040d0b5d5d207936ca2d02f00f765906622c07d3fa19c23a16a8ca71873f \ + --hash=sha256:384164994727f274cc34b8abd41a9e7e0562801361ee77437099ff6dfedd024b \ + --hash=sha256:3cb608e5a0eb61b8e00fe641d9f0282cd0eedb603be372f91f163cbfbca0ded0 \ + --hash=sha256:5d9402bf27d11e37801d1743eada54372f986a372ec9679673bfcc5c60441151 \ + --hash=sha256:712dca319eee507a1e7df3591e639a2b112a2f4a62d40fe7832a16fd19151750 \ + --hash=sha256:7a5037af4e76c975b88c3becdf53922b5ffa3f2cddf657574a4920a3b33b80f3 \ + --hash=sha256:8228e56a865c27163d5d1d1771d94b98194aa6917bcfb6ce139cbfa8e3c27334 \ + --hash=sha256:84a1544252a933ef07bb0b5ef13afe7c36232a774affa673fc3636f7cee1db6c \ + --hash=sha256:84fe5953b18a383fd4495d375fe16e1e55e0a3afe7b4f7b4d01a3a0649fcda9d \ + --hash=sha256:9c673c8bfdf52f903081816b9e0e612186684f4eb4c17eeb729133022d6032e3 \ + --hash=sha256:9f876a69ca55aed879b43c295a328970306e8e80a263ec91cf6e9189243c613b \ + --hash=sha256:a9e5ae5a8e8985c67e8944c23035a0dff2c26b0f5070b2f55b217a1c33bbe8b1 \ + --hash=sha256:b4fdb29c5a7406e3f7ef176b2a7079baa68b5b854f364c21abe327bbeec01cdb \ + --hash=sha256:c184485e0dfba4dfd451c3bd348c2e685d6523543a0f91b9fd4ae90eb09e8422 \ + --hash=sha256:c9cdf251c582c16fd6a9f5e95836c90828d51b0069ad22f463761d27c6c19019 \ + --hash=sha256:e39cf61bb8582bda88cdfebc0db163b774e7e03364bbf9ce1ead13863e81e359 \ + --hash=sha256:e8fbc522303e09036c752a0afcc5c0603e917222d8bedc02813fd73b4b4ed804 \ + --hash=sha256:f34464ab1207114e73bba0794d1257c150a2b89b7a9faf504e00af7c9fd58978 \ + --hash=sha256:f52dabc96ca99ebd2169dadbe018824ebda08a795c7684a0b7d203a290f3adb0 # via # gcp-docuploader # gcp-releasetool diff --git a/CHANGELOG.md b/CHANGELOG.md index 73f12029f..d2ca3bf4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [1.6.0](https://github.com/googleapis/python-compute/compare/v1.5.2...v1.6.0) (2022-09-29) + + +### Features + +* Update Compute Engine API to revision 20220831 ([#729](https://github.com/googleapis/python-compute/issues/729)) ([#345](https://github.com/googleapis/python-compute/issues/345)) ([cf5fab1](https://github.com/googleapis/python-compute/commit/cf5fab101239827a84fc05873af2774b91bd760b)) + + +### Bug Fixes + +* **deps:** require google-api-core>=2.10.1 ([cf5fab1](https://github.com/googleapis/python-compute/commit/cf5fab101239827a84fc05873af2774b91bd760b)) +* **deps:** Require protobuf >= 3.20.2 ([#347](https://github.com/googleapis/python-compute/issues/347)) ([62ad9cb](https://github.com/googleapis/python-compute/commit/62ad9cb9e429b3971b8d316246dd88bfae91ef94)) + ## [1.5.2](https://github.com/googleapis/python-compute/compare/v1.5.1...v1.5.2) (2022-09-07) diff --git a/docs/compute_v1/region_ssl_policies.rst b/docs/compute_v1/region_ssl_policies.rst new file mode 100644 index 000000000..068928fe2 --- /dev/null +++ b/docs/compute_v1/region_ssl_policies.rst @@ -0,0 +1,10 @@ +RegionSslPolicies +----------------------------------- + +.. automodule:: google.cloud.compute_v1.services.region_ssl_policies + :members: + :inherited-members: + +.. automodule:: google.cloud.compute_v1.services.region_ssl_policies.pagers + :members: + :inherited-members: diff --git a/docs/compute_v1/region_target_tcp_proxies.rst b/docs/compute_v1/region_target_tcp_proxies.rst new file mode 100644 index 000000000..9c4814414 --- /dev/null +++ b/docs/compute_v1/region_target_tcp_proxies.rst @@ -0,0 +1,10 @@ +RegionTargetTcpProxies +---------------------------------------- + +.. automodule:: google.cloud.compute_v1.services.region_target_tcp_proxies + :members: + :inherited-members: + +.. automodule:: google.cloud.compute_v1.services.region_target_tcp_proxies.pagers + :members: + :inherited-members: diff --git a/docs/compute_v1/services.rst b/docs/compute_v1/services.rst index 0e7da9842..a4e8810eb 100644 --- a/docs/compute_v1/services.rst +++ b/docs/compute_v1/services.rst @@ -62,8 +62,10 @@ Services for Google Cloud Compute v1 API regions region_security_policies region_ssl_certificates + region_ssl_policies region_target_http_proxies region_target_https_proxies + region_target_tcp_proxies region_url_maps reservations resource_policies diff --git a/google/cloud/compute/__init__.py b/google/cloud/compute/__init__.py index 2fed295ca..e7e8a147a 100644 --- a/google/cloud/compute/__init__.py +++ b/google/cloud/compute/__init__.py @@ -147,12 +147,18 @@ from google.cloud.compute_v1.services.region_ssl_certificates.client import ( RegionSslCertificatesClient, ) +from google.cloud.compute_v1.services.region_ssl_policies.client import ( + RegionSslPoliciesClient, +) from google.cloud.compute_v1.services.region_target_http_proxies.client import ( RegionTargetHttpProxiesClient, ) from google.cloud.compute_v1.services.region_target_https_proxies.client import ( RegionTargetHttpsProxiesClient, ) +from google.cloud.compute_v1.services.region_target_tcp_proxies.client import ( + RegionTargetTcpProxiesClient, +) from google.cloud.compute_v1.services.region_url_maps.client import RegionUrlMapsClient from google.cloud.compute_v1.services.reservations.client import ReservationsClient from google.cloud.compute_v1.services.resource_policies.client import ( @@ -282,6 +288,7 @@ AggregatedListServiceAttachmentsRequest, ) from google.cloud.compute_v1.types.compute import AggregatedListSslCertificatesRequest +from google.cloud.compute_v1.types.compute import AggregatedListSslPoliciesRequest from google.cloud.compute_v1.types.compute import AggregatedListSubnetworksRequest from google.cloud.compute_v1.types.compute import AggregatedListTargetHttpProxiesRequest from google.cloud.compute_v1.types.compute import ( @@ -494,8 +501,10 @@ from google.cloud.compute_v1.types.compute import DeleteRegionOperationResponse from google.cloud.compute_v1.types.compute import DeleteRegionSecurityPolicyRequest from google.cloud.compute_v1.types.compute import DeleteRegionSslCertificateRequest +from google.cloud.compute_v1.types.compute import DeleteRegionSslPolicyRequest from google.cloud.compute_v1.types.compute import DeleteRegionTargetHttpProxyRequest from google.cloud.compute_v1.types.compute import DeleteRegionTargetHttpsProxyRequest +from google.cloud.compute_v1.types.compute import DeleteRegionTargetTcpProxyRequest from google.cloud.compute_v1.types.compute import DeleteRegionUrlMapRequest from google.cloud.compute_v1.types.compute import DeleteReservationRequest from google.cloud.compute_v1.types.compute import DeleteResourcePolicyRequest @@ -541,6 +550,7 @@ from google.cloud.compute_v1.types.compute import DiskInstantiationConfig from google.cloud.compute_v1.types.compute import DiskList from google.cloud.compute_v1.types.compute import DiskMoveRequest +from google.cloud.compute_v1.types.compute import DiskParams from google.cloud.compute_v1.types.compute import DisksAddResourcePoliciesRequest from google.cloud.compute_v1.types.compute import DisksRemoveResourcePoliciesRequest from google.cloud.compute_v1.types.compute import DisksResizeRequest @@ -625,6 +635,7 @@ from google.cloud.compute_v1.types.compute import GetHealthCheckRequest from google.cloud.compute_v1.types.compute import GetHealthRegionBackendServiceRequest from google.cloud.compute_v1.types.compute import GetHealthTargetPoolRequest +from google.cloud.compute_v1.types.compute import GetIamPolicyBackendServiceRequest from google.cloud.compute_v1.types.compute import GetIamPolicyDiskRequest from google.cloud.compute_v1.types.compute import GetIamPolicyFirewallPolicyRequest from google.cloud.compute_v1.types.compute import GetIamPolicyImageRequest @@ -637,6 +648,9 @@ ) from google.cloud.compute_v1.types.compute import GetIamPolicyNodeGroupRequest from google.cloud.compute_v1.types.compute import GetIamPolicyNodeTemplateRequest +from google.cloud.compute_v1.types.compute import ( + GetIamPolicyRegionBackendServiceRequest, +) from google.cloud.compute_v1.types.compute import GetIamPolicyRegionDiskRequest from google.cloud.compute_v1.types.compute import ( GetIamPolicyRegionNetworkFirewallPolicyRequest, @@ -687,8 +701,10 @@ from google.cloud.compute_v1.types.compute import GetRegionRequest from google.cloud.compute_v1.types.compute import GetRegionSecurityPolicyRequest from google.cloud.compute_v1.types.compute import GetRegionSslCertificateRequest +from google.cloud.compute_v1.types.compute import GetRegionSslPolicyRequest from google.cloud.compute_v1.types.compute import GetRegionTargetHttpProxyRequest from google.cloud.compute_v1.types.compute import GetRegionTargetHttpsProxyRequest +from google.cloud.compute_v1.types.compute import GetRegionTargetTcpProxyRequest from google.cloud.compute_v1.types.compute import GetRegionUrlMapRequest from google.cloud.compute_v1.types.compute import GetReservationRequest from google.cloud.compute_v1.types.compute import GetResourcePolicyRequest @@ -833,8 +849,10 @@ ) from google.cloud.compute_v1.types.compute import InsertRegionSecurityPolicyRequest from google.cloud.compute_v1.types.compute import InsertRegionSslCertificateRequest +from google.cloud.compute_v1.types.compute import InsertRegionSslPolicyRequest from google.cloud.compute_v1.types.compute import InsertRegionTargetHttpProxyRequest from google.cloud.compute_v1.types.compute import InsertRegionTargetHttpsProxyRequest +from google.cloud.compute_v1.types.compute import InsertRegionTargetTcpProxyRequest from google.cloud.compute_v1.types.compute import InsertRegionUrlMapRequest from google.cloud.compute_v1.types.compute import InsertReservationRequest from google.cloud.compute_v1.types.compute import InsertResourcePolicyRequest @@ -859,6 +877,8 @@ from google.cloud.compute_v1.types.compute import InsertVpnTunnelRequest from google.cloud.compute_v1.types.compute import Instance from google.cloud.compute_v1.types.compute import InstanceAggregatedList +from google.cloud.compute_v1.types.compute import InstanceConsumptionData +from google.cloud.compute_v1.types.compute import InstanceConsumptionInfo from google.cloud.compute_v1.types.compute import InstanceGroup from google.cloud.compute_v1.types.compute import InstanceGroupAggregatedList from google.cloud.compute_v1.types.compute import InstanceGroupList @@ -986,6 +1006,9 @@ from google.cloud.compute_v1.types.compute import ListAddressesRequest from google.cloud.compute_v1.types.compute import ListAssociationsFirewallPolicyRequest from google.cloud.compute_v1.types.compute import ListAutoscalersRequest +from google.cloud.compute_v1.types.compute import ( + ListAvailableFeaturesRegionSslPoliciesRequest, +) from google.cloud.compute_v1.types.compute import ( ListAvailableFeaturesSslPoliciesRequest, ) @@ -1078,8 +1101,10 @@ from google.cloud.compute_v1.types.compute import ListRegionSecurityPoliciesRequest from google.cloud.compute_v1.types.compute import ListRegionsRequest from google.cloud.compute_v1.types.compute import ListRegionSslCertificatesRequest +from google.cloud.compute_v1.types.compute import ListRegionSslPoliciesRequest from google.cloud.compute_v1.types.compute import ListRegionTargetHttpProxiesRequest from google.cloud.compute_v1.types.compute import ListRegionTargetHttpsProxiesRequest +from google.cloud.compute_v1.types.compute import ListRegionTargetTcpProxiesRequest from google.cloud.compute_v1.types.compute import ListRegionUrlMapsRequest from google.cloud.compute_v1.types.compute import ListReservationsRequest from google.cloud.compute_v1.types.compute import ListResourcePoliciesRequest @@ -1252,6 +1277,7 @@ PatchRegionNetworkFirewallPolicyRequest, ) from google.cloud.compute_v1.types.compute import PatchRegionSecurityPolicyRequest +from google.cloud.compute_v1.types.compute import PatchRegionSslPolicyRequest from google.cloud.compute_v1.types.compute import PatchRegionTargetHttpsProxyRequest from google.cloud.compute_v1.types.compute import PatchRegionUrlMapRequest from google.cloud.compute_v1.types.compute import PatchRouterRequest @@ -1483,6 +1509,9 @@ SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig, ) from google.cloud.compute_v1.types.compute import SecurityPolicyAdvancedOptionsConfig +from google.cloud.compute_v1.types.compute import ( + SecurityPolicyAdvancedOptionsConfigJsonCustomConfig, +) from google.cloud.compute_v1.types.compute import SecurityPolicyDdosProtectionConfig from google.cloud.compute_v1.types.compute import SecurityPolicyList from google.cloud.compute_v1.types.compute import SecurityPolicyRecaptchaOptionsConfig @@ -1532,6 +1561,7 @@ from google.cloud.compute_v1.types.compute import ( SetEdgeSecurityPolicyBackendServiceRequest, ) +from google.cloud.compute_v1.types.compute import SetIamPolicyBackendServiceRequest from google.cloud.compute_v1.types.compute import SetIamPolicyDiskRequest from google.cloud.compute_v1.types.compute import SetIamPolicyFirewallPolicyRequest from google.cloud.compute_v1.types.compute import SetIamPolicyImageRequest @@ -1544,6 +1574,9 @@ ) from google.cloud.compute_v1.types.compute import SetIamPolicyNodeGroupRequest from google.cloud.compute_v1.types.compute import SetIamPolicyNodeTemplateRequest +from google.cloud.compute_v1.types.compute import ( + SetIamPolicyRegionBackendServiceRequest, +) from google.cloud.compute_v1.types.compute import SetIamPolicyRegionDiskRequest from google.cloud.compute_v1.types.compute import ( SetIamPolicyRegionNetworkFirewallPolicyRequest, @@ -1559,15 +1592,22 @@ from google.cloud.compute_v1.types.compute import ( SetInstanceTemplateRegionInstanceGroupManagerRequest, ) +from google.cloud.compute_v1.types.compute import SetLabelsAddressRequest from google.cloud.compute_v1.types.compute import SetLabelsDiskRequest from google.cloud.compute_v1.types.compute import SetLabelsExternalVpnGatewayRequest from google.cloud.compute_v1.types.compute import SetLabelsForwardingRuleRequest +from google.cloud.compute_v1.types.compute import SetLabelsGlobalAddressRequest from google.cloud.compute_v1.types.compute import SetLabelsGlobalForwardingRuleRequest from google.cloud.compute_v1.types.compute import SetLabelsImageRequest from google.cloud.compute_v1.types.compute import SetLabelsInstanceRequest +from google.cloud.compute_v1.types.compute import SetLabelsInterconnectAttachmentRequest +from google.cloud.compute_v1.types.compute import SetLabelsInterconnectRequest from google.cloud.compute_v1.types.compute import SetLabelsRegionDiskRequest +from google.cloud.compute_v1.types.compute import SetLabelsSecurityPolicyRequest from google.cloud.compute_v1.types.compute import SetLabelsSnapshotRequest +from google.cloud.compute_v1.types.compute import SetLabelsTargetVpnGatewayRequest from google.cloud.compute_v1.types.compute import SetLabelsVpnGatewayRequest +from google.cloud.compute_v1.types.compute import SetLabelsVpnTunnelRequest from google.cloud.compute_v1.types.compute import SetMachineResourcesInstanceRequest from google.cloud.compute_v1.types.compute import SetMachineTypeInstanceRequest from google.cloud.compute_v1.types.compute import SetMetadataInstanceRequest @@ -1638,10 +1678,12 @@ ) from google.cloud.compute_v1.types.compute import SslCertificatesScopedList from google.cloud.compute_v1.types.compute import SSLHealthCheck +from google.cloud.compute_v1.types.compute import SslPoliciesAggregatedList from google.cloud.compute_v1.types.compute import SslPoliciesList from google.cloud.compute_v1.types.compute import ( SslPoliciesListAvailableFeaturesResponse, ) +from google.cloud.compute_v1.types.compute import SslPoliciesScopedList from google.cloud.compute_v1.types.compute import SslPolicy from google.cloud.compute_v1.types.compute import SslPolicyReference from google.cloud.compute_v1.types.compute import StartInstanceRequest @@ -1907,8 +1949,10 @@ "RegionsClient", "RegionSecurityPoliciesClient", "RegionSslCertificatesClient", + "RegionSslPoliciesClient", "RegionTargetHttpProxiesClient", "RegionTargetHttpsProxiesClient", + "RegionTargetTcpProxiesClient", "RegionUrlMapsClient", "ReservationsClient", "ResourcePoliciesClient", @@ -1993,6 +2037,7 @@ "AggregatedListSecurityPoliciesRequest", "AggregatedListServiceAttachmentsRequest", "AggregatedListSslCertificatesRequest", + "AggregatedListSslPoliciesRequest", "AggregatedListSubnetworksRequest", "AggregatedListTargetHttpProxiesRequest", "AggregatedListTargetHttpsProxiesRequest", @@ -2137,8 +2182,10 @@ "DeleteRegionOperationResponse", "DeleteRegionSecurityPolicyRequest", "DeleteRegionSslCertificateRequest", + "DeleteRegionSslPolicyRequest", "DeleteRegionTargetHttpProxyRequest", "DeleteRegionTargetHttpsProxyRequest", + "DeleteRegionTargetTcpProxyRequest", "DeleteRegionUrlMapRequest", "DeleteReservationRequest", "DeleteResourcePolicyRequest", @@ -2178,6 +2225,7 @@ "DiskInstantiationConfig", "DiskList", "DiskMoveRequest", + "DiskParams", "DisksAddResourcePoliciesRequest", "DisksRemoveResourcePoliciesRequest", "DisksResizeRequest", @@ -2252,6 +2300,7 @@ "GetHealthCheckRequest", "GetHealthRegionBackendServiceRequest", "GetHealthTargetPoolRequest", + "GetIamPolicyBackendServiceRequest", "GetIamPolicyDiskRequest", "GetIamPolicyFirewallPolicyRequest", "GetIamPolicyImageRequest", @@ -2262,6 +2311,7 @@ "GetIamPolicyNetworkFirewallPolicyRequest", "GetIamPolicyNodeGroupRequest", "GetIamPolicyNodeTemplateRequest", + "GetIamPolicyRegionBackendServiceRequest", "GetIamPolicyRegionDiskRequest", "GetIamPolicyRegionNetworkFirewallPolicyRequest", "GetIamPolicyReservationRequest", @@ -2310,8 +2360,10 @@ "GetRegionRequest", "GetRegionSecurityPolicyRequest", "GetRegionSslCertificateRequest", + "GetRegionSslPolicyRequest", "GetRegionTargetHttpProxyRequest", "GetRegionTargetHttpsProxyRequest", + "GetRegionTargetTcpProxyRequest", "GetRegionUrlMapRequest", "GetReservationRequest", "GetResourcePolicyRequest", @@ -2434,8 +2486,10 @@ "InsertRegionNotificationEndpointRequest", "InsertRegionSecurityPolicyRequest", "InsertRegionSslCertificateRequest", + "InsertRegionSslPolicyRequest", "InsertRegionTargetHttpProxyRequest", "InsertRegionTargetHttpsProxyRequest", + "InsertRegionTargetTcpProxyRequest", "InsertRegionUrlMapRequest", "InsertReservationRequest", "InsertResourcePolicyRequest", @@ -2460,6 +2514,8 @@ "InsertVpnTunnelRequest", "Instance", "InstanceAggregatedList", + "InstanceConsumptionData", + "InstanceConsumptionInfo", "InstanceGroup", "InstanceGroupAggregatedList", "InstanceGroupList", @@ -2549,6 +2605,7 @@ "ListAddressesRequest", "ListAssociationsFirewallPolicyRequest", "ListAutoscalersRequest", + "ListAvailableFeaturesRegionSslPoliciesRequest", "ListAvailableFeaturesSslPoliciesRequest", "ListBackendBucketsRequest", "ListBackendServicesRequest", @@ -2615,8 +2672,10 @@ "ListRegionSecurityPoliciesRequest", "ListRegionsRequest", "ListRegionSslCertificatesRequest", + "ListRegionSslPoliciesRequest", "ListRegionTargetHttpProxiesRequest", "ListRegionTargetHttpsProxiesRequest", + "ListRegionTargetTcpProxiesRequest", "ListRegionUrlMapsRequest", "ListReservationsRequest", "ListResourcePoliciesRequest", @@ -2765,6 +2824,7 @@ "PatchRegionInstanceGroupManagerRequest", "PatchRegionNetworkFirewallPolicyRequest", "PatchRegionSecurityPolicyRequest", + "PatchRegionSslPolicyRequest", "PatchRegionTargetHttpsProxyRequest", "PatchRegionUrlMapRequest", "PatchRouterRequest", @@ -2924,6 +2984,7 @@ "SecurityPolicyAdaptiveProtectionConfig", "SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig", "SecurityPolicyAdvancedOptionsConfig", + "SecurityPolicyAdvancedOptionsConfigJsonCustomConfig", "SecurityPolicyDdosProtectionConfig", "SecurityPolicyList", "SecurityPolicyRecaptchaOptionsConfig", @@ -2959,6 +3020,7 @@ "SetDiskAutoDeleteInstanceRequest", "SetEdgeSecurityPolicyBackendBucketRequest", "SetEdgeSecurityPolicyBackendServiceRequest", + "SetIamPolicyBackendServiceRequest", "SetIamPolicyDiskRequest", "SetIamPolicyFirewallPolicyRequest", "SetIamPolicyImageRequest", @@ -2969,6 +3031,7 @@ "SetIamPolicyNetworkFirewallPolicyRequest", "SetIamPolicyNodeGroupRequest", "SetIamPolicyNodeTemplateRequest", + "SetIamPolicyRegionBackendServiceRequest", "SetIamPolicyRegionDiskRequest", "SetIamPolicyRegionNetworkFirewallPolicyRequest", "SetIamPolicyReservationRequest", @@ -2978,15 +3041,22 @@ "SetIamPolicySubnetworkRequest", "SetInstanceTemplateInstanceGroupManagerRequest", "SetInstanceTemplateRegionInstanceGroupManagerRequest", + "SetLabelsAddressRequest", "SetLabelsDiskRequest", "SetLabelsExternalVpnGatewayRequest", "SetLabelsForwardingRuleRequest", + "SetLabelsGlobalAddressRequest", "SetLabelsGlobalForwardingRuleRequest", "SetLabelsImageRequest", "SetLabelsInstanceRequest", + "SetLabelsInterconnectAttachmentRequest", + "SetLabelsInterconnectRequest", "SetLabelsRegionDiskRequest", + "SetLabelsSecurityPolicyRequest", "SetLabelsSnapshotRequest", + "SetLabelsTargetVpnGatewayRequest", "SetLabelsVpnGatewayRequest", + "SetLabelsVpnTunnelRequest", "SetMachineResourcesInstanceRequest", "SetMachineTypeInstanceRequest", "SetMetadataInstanceRequest", @@ -3037,8 +3107,10 @@ "SslCertificateSelfManagedSslCertificate", "SslCertificatesScopedList", "SSLHealthCheck", + "SslPoliciesAggregatedList", "SslPoliciesList", "SslPoliciesListAvailableFeaturesResponse", + "SslPoliciesScopedList", "SslPolicy", "SslPolicyReference", "StartInstanceRequest", diff --git a/google/cloud/compute_v1/__init__.py b/google/cloud/compute_v1/__init__.py index 766e78a9b..64f65b419 100644 --- a/google/cloud/compute_v1/__init__.py +++ b/google/cloud/compute_v1/__init__.py @@ -77,8 +77,10 @@ from .services.regions import RegionsClient from .services.region_security_policies import RegionSecurityPoliciesClient from .services.region_ssl_certificates import RegionSslCertificatesClient +from .services.region_ssl_policies import RegionSslPoliciesClient from .services.region_target_http_proxies import RegionTargetHttpProxiesClient from .services.region_target_https_proxies import RegionTargetHttpsProxiesClient +from .services.region_target_tcp_proxies import RegionTargetTcpProxiesClient from .services.region_url_maps import RegionUrlMapsClient from .services.reservations import ReservationsClient from .services.resource_policies import ResourcePoliciesClient @@ -164,6 +166,7 @@ from .types.compute import AggregatedListSecurityPoliciesRequest from .types.compute import AggregatedListServiceAttachmentsRequest from .types.compute import AggregatedListSslCertificatesRequest +from .types.compute import AggregatedListSslPoliciesRequest from .types.compute import AggregatedListSubnetworksRequest from .types.compute import AggregatedListTargetHttpProxiesRequest from .types.compute import AggregatedListTargetHttpsProxiesRequest @@ -310,8 +313,10 @@ from .types.compute import DeleteRegionOperationResponse from .types.compute import DeleteRegionSecurityPolicyRequest from .types.compute import DeleteRegionSslCertificateRequest +from .types.compute import DeleteRegionSslPolicyRequest from .types.compute import DeleteRegionTargetHttpProxyRequest from .types.compute import DeleteRegionTargetHttpsProxyRequest +from .types.compute import DeleteRegionTargetTcpProxyRequest from .types.compute import DeleteRegionUrlMapRequest from .types.compute import DeleteReservationRequest from .types.compute import DeleteResourcePolicyRequest @@ -351,6 +356,7 @@ from .types.compute import DiskInstantiationConfig from .types.compute import DiskList from .types.compute import DiskMoveRequest +from .types.compute import DiskParams from .types.compute import DisksAddResourcePoliciesRequest from .types.compute import DisksRemoveResourcePoliciesRequest from .types.compute import DisksResizeRequest @@ -425,6 +431,7 @@ from .types.compute import GetHealthCheckRequest from .types.compute import GetHealthRegionBackendServiceRequest from .types.compute import GetHealthTargetPoolRequest +from .types.compute import GetIamPolicyBackendServiceRequest from .types.compute import GetIamPolicyDiskRequest from .types.compute import GetIamPolicyFirewallPolicyRequest from .types.compute import GetIamPolicyImageRequest @@ -435,6 +442,7 @@ from .types.compute import GetIamPolicyNetworkFirewallPolicyRequest from .types.compute import GetIamPolicyNodeGroupRequest from .types.compute import GetIamPolicyNodeTemplateRequest +from .types.compute import GetIamPolicyRegionBackendServiceRequest from .types.compute import GetIamPolicyRegionDiskRequest from .types.compute import GetIamPolicyRegionNetworkFirewallPolicyRequest from .types.compute import GetIamPolicyReservationRequest @@ -483,8 +491,10 @@ from .types.compute import GetRegionRequest from .types.compute import GetRegionSecurityPolicyRequest from .types.compute import GetRegionSslCertificateRequest +from .types.compute import GetRegionSslPolicyRequest from .types.compute import GetRegionTargetHttpProxyRequest from .types.compute import GetRegionTargetHttpsProxyRequest +from .types.compute import GetRegionTargetTcpProxyRequest from .types.compute import GetRegionUrlMapRequest from .types.compute import GetReservationRequest from .types.compute import GetResourcePolicyRequest @@ -607,8 +617,10 @@ from .types.compute import InsertRegionNotificationEndpointRequest from .types.compute import InsertRegionSecurityPolicyRequest from .types.compute import InsertRegionSslCertificateRequest +from .types.compute import InsertRegionSslPolicyRequest from .types.compute import InsertRegionTargetHttpProxyRequest from .types.compute import InsertRegionTargetHttpsProxyRequest +from .types.compute import InsertRegionTargetTcpProxyRequest from .types.compute import InsertRegionUrlMapRequest from .types.compute import InsertReservationRequest from .types.compute import InsertResourcePolicyRequest @@ -633,6 +645,8 @@ from .types.compute import InsertVpnTunnelRequest from .types.compute import Instance from .types.compute import InstanceAggregatedList +from .types.compute import InstanceConsumptionData +from .types.compute import InstanceConsumptionInfo from .types.compute import InstanceGroup from .types.compute import InstanceGroupAggregatedList from .types.compute import InstanceGroupList @@ -722,6 +736,7 @@ from .types.compute import ListAddressesRequest from .types.compute import ListAssociationsFirewallPolicyRequest from .types.compute import ListAutoscalersRequest +from .types.compute import ListAvailableFeaturesRegionSslPoliciesRequest from .types.compute import ListAvailableFeaturesSslPoliciesRequest from .types.compute import ListBackendBucketsRequest from .types.compute import ListBackendServicesRequest @@ -788,8 +803,10 @@ from .types.compute import ListRegionSecurityPoliciesRequest from .types.compute import ListRegionsRequest from .types.compute import ListRegionSslCertificatesRequest +from .types.compute import ListRegionSslPoliciesRequest from .types.compute import ListRegionTargetHttpProxiesRequest from .types.compute import ListRegionTargetHttpsProxiesRequest +from .types.compute import ListRegionTargetTcpProxiesRequest from .types.compute import ListRegionUrlMapsRequest from .types.compute import ListReservationsRequest from .types.compute import ListResourcePoliciesRequest @@ -938,6 +955,7 @@ from .types.compute import PatchRegionInstanceGroupManagerRequest from .types.compute import PatchRegionNetworkFirewallPolicyRequest from .types.compute import PatchRegionSecurityPolicyRequest +from .types.compute import PatchRegionSslPolicyRequest from .types.compute import PatchRegionTargetHttpsProxyRequest from .types.compute import PatchRegionUrlMapRequest from .types.compute import PatchRouterRequest @@ -1099,6 +1117,7 @@ from .types.compute import SecurityPolicyAdaptiveProtectionConfig from .types.compute import SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig from .types.compute import SecurityPolicyAdvancedOptionsConfig +from .types.compute import SecurityPolicyAdvancedOptionsConfigJsonCustomConfig from .types.compute import SecurityPolicyDdosProtectionConfig from .types.compute import SecurityPolicyList from .types.compute import SecurityPolicyRecaptchaOptionsConfig @@ -1134,6 +1153,7 @@ from .types.compute import SetDiskAutoDeleteInstanceRequest from .types.compute import SetEdgeSecurityPolicyBackendBucketRequest from .types.compute import SetEdgeSecurityPolicyBackendServiceRequest +from .types.compute import SetIamPolicyBackendServiceRequest from .types.compute import SetIamPolicyDiskRequest from .types.compute import SetIamPolicyFirewallPolicyRequest from .types.compute import SetIamPolicyImageRequest @@ -1144,6 +1164,7 @@ from .types.compute import SetIamPolicyNetworkFirewallPolicyRequest from .types.compute import SetIamPolicyNodeGroupRequest from .types.compute import SetIamPolicyNodeTemplateRequest +from .types.compute import SetIamPolicyRegionBackendServiceRequest from .types.compute import SetIamPolicyRegionDiskRequest from .types.compute import SetIamPolicyRegionNetworkFirewallPolicyRequest from .types.compute import SetIamPolicyReservationRequest @@ -1153,15 +1174,22 @@ from .types.compute import SetIamPolicySubnetworkRequest from .types.compute import SetInstanceTemplateInstanceGroupManagerRequest from .types.compute import SetInstanceTemplateRegionInstanceGroupManagerRequest +from .types.compute import SetLabelsAddressRequest from .types.compute import SetLabelsDiskRequest from .types.compute import SetLabelsExternalVpnGatewayRequest from .types.compute import SetLabelsForwardingRuleRequest +from .types.compute import SetLabelsGlobalAddressRequest from .types.compute import SetLabelsGlobalForwardingRuleRequest from .types.compute import SetLabelsImageRequest from .types.compute import SetLabelsInstanceRequest +from .types.compute import SetLabelsInterconnectAttachmentRequest +from .types.compute import SetLabelsInterconnectRequest from .types.compute import SetLabelsRegionDiskRequest +from .types.compute import SetLabelsSecurityPolicyRequest from .types.compute import SetLabelsSnapshotRequest +from .types.compute import SetLabelsTargetVpnGatewayRequest from .types.compute import SetLabelsVpnGatewayRequest +from .types.compute import SetLabelsVpnTunnelRequest from .types.compute import SetMachineResourcesInstanceRequest from .types.compute import SetMachineTypeInstanceRequest from .types.compute import SetMetadataInstanceRequest @@ -1212,8 +1240,10 @@ from .types.compute import SslCertificateSelfManagedSslCertificate from .types.compute import SslCertificatesScopedList from .types.compute import SSLHealthCheck +from .types.compute import SslPoliciesAggregatedList from .types.compute import SslPoliciesList from .types.compute import SslPoliciesListAvailableFeaturesResponse +from .types.compute import SslPoliciesScopedList from .types.compute import SslPolicy from .types.compute import SslPolicyReference from .types.compute import StartInstanceRequest @@ -1436,6 +1466,7 @@ "AggregatedListSecurityPoliciesRequest", "AggregatedListServiceAttachmentsRequest", "AggregatedListSslCertificatesRequest", + "AggregatedListSslPoliciesRequest", "AggregatedListSubnetworksRequest", "AggregatedListTargetHttpProxiesRequest", "AggregatedListTargetHttpsProxiesRequest", @@ -1583,8 +1614,10 @@ "DeleteRegionOperationResponse", "DeleteRegionSecurityPolicyRequest", "DeleteRegionSslCertificateRequest", + "DeleteRegionSslPolicyRequest", "DeleteRegionTargetHttpProxyRequest", "DeleteRegionTargetHttpsProxyRequest", + "DeleteRegionTargetTcpProxyRequest", "DeleteRegionUrlMapRequest", "DeleteReservationRequest", "DeleteResourcePolicyRequest", @@ -1624,6 +1657,7 @@ "DiskInstantiationConfig", "DiskList", "DiskMoveRequest", + "DiskParams", "DiskType", "DiskTypeAggregatedList", "DiskTypeList", @@ -1705,6 +1739,7 @@ "GetHealthCheckRequest", "GetHealthRegionBackendServiceRequest", "GetHealthTargetPoolRequest", + "GetIamPolicyBackendServiceRequest", "GetIamPolicyDiskRequest", "GetIamPolicyFirewallPolicyRequest", "GetIamPolicyImageRequest", @@ -1715,6 +1750,7 @@ "GetIamPolicyNetworkFirewallPolicyRequest", "GetIamPolicyNodeGroupRequest", "GetIamPolicyNodeTemplateRequest", + "GetIamPolicyRegionBackendServiceRequest", "GetIamPolicyRegionDiskRequest", "GetIamPolicyRegionNetworkFirewallPolicyRequest", "GetIamPolicyReservationRequest", @@ -1763,8 +1799,10 @@ "GetRegionRequest", "GetRegionSecurityPolicyRequest", "GetRegionSslCertificateRequest", + "GetRegionSslPolicyRequest", "GetRegionTargetHttpProxyRequest", "GetRegionTargetHttpsProxyRequest", + "GetRegionTargetTcpProxyRequest", "GetRegionUrlMapRequest", "GetReservationRequest", "GetResourcePolicyRequest", @@ -1895,8 +1933,10 @@ "InsertRegionNotificationEndpointRequest", "InsertRegionSecurityPolicyRequest", "InsertRegionSslCertificateRequest", + "InsertRegionSslPolicyRequest", "InsertRegionTargetHttpProxyRequest", "InsertRegionTargetHttpsProxyRequest", + "InsertRegionTargetTcpProxyRequest", "InsertRegionUrlMapRequest", "InsertReservationRequest", "InsertResourcePolicyRequest", @@ -1921,6 +1961,8 @@ "InsertVpnTunnelRequest", "Instance", "InstanceAggregatedList", + "InstanceConsumptionData", + "InstanceConsumptionInfo", "InstanceGroup", "InstanceGroupAggregatedList", "InstanceGroupList", @@ -2019,6 +2061,7 @@ "ListAddressesRequest", "ListAssociationsFirewallPolicyRequest", "ListAutoscalersRequest", + "ListAvailableFeaturesRegionSslPoliciesRequest", "ListAvailableFeaturesSslPoliciesRequest", "ListBackendBucketsRequest", "ListBackendServicesRequest", @@ -2084,8 +2127,10 @@ "ListRegionOperationsRequest", "ListRegionSecurityPoliciesRequest", "ListRegionSslCertificatesRequest", + "ListRegionSslPoliciesRequest", "ListRegionTargetHttpProxiesRequest", "ListRegionTargetHttpsProxiesRequest", + "ListRegionTargetTcpProxiesRequest", "ListRegionUrlMapsRequest", "ListRegionsRequest", "ListReservationsRequest", @@ -2245,6 +2290,7 @@ "PatchRegionInstanceGroupManagerRequest", "PatchRegionNetworkFirewallPolicyRequest", "PatchRegionSecurityPolicyRequest", + "PatchRegionSslPolicyRequest", "PatchRegionTargetHttpsProxyRequest", "PatchRegionUrlMapRequest", "PatchRouterRequest", @@ -2335,9 +2381,11 @@ "RegionSetLabelsRequest", "RegionSetPolicyRequest", "RegionSslCertificatesClient", + "RegionSslPoliciesClient", "RegionTargetHttpProxiesClient", "RegionTargetHttpsProxiesClient", "RegionTargetHttpsProxiesSetSslCertificatesRequest", + "RegionTargetTcpProxiesClient", "RegionUrlMapsClient", "RegionUrlMapsValidateRequest", "RegionsClient", @@ -2433,6 +2481,7 @@ "SecurityPolicyAdaptiveProtectionConfig", "SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig", "SecurityPolicyAdvancedOptionsConfig", + "SecurityPolicyAdvancedOptionsConfigJsonCustomConfig", "SecurityPolicyDdosProtectionConfig", "SecurityPolicyList", "SecurityPolicyRecaptchaOptionsConfig", @@ -2469,6 +2518,7 @@ "SetDiskAutoDeleteInstanceRequest", "SetEdgeSecurityPolicyBackendBucketRequest", "SetEdgeSecurityPolicyBackendServiceRequest", + "SetIamPolicyBackendServiceRequest", "SetIamPolicyDiskRequest", "SetIamPolicyFirewallPolicyRequest", "SetIamPolicyImageRequest", @@ -2479,6 +2529,7 @@ "SetIamPolicyNetworkFirewallPolicyRequest", "SetIamPolicyNodeGroupRequest", "SetIamPolicyNodeTemplateRequest", + "SetIamPolicyRegionBackendServiceRequest", "SetIamPolicyRegionDiskRequest", "SetIamPolicyRegionNetworkFirewallPolicyRequest", "SetIamPolicyReservationRequest", @@ -2488,15 +2539,22 @@ "SetIamPolicySubnetworkRequest", "SetInstanceTemplateInstanceGroupManagerRequest", "SetInstanceTemplateRegionInstanceGroupManagerRequest", + "SetLabelsAddressRequest", "SetLabelsDiskRequest", "SetLabelsExternalVpnGatewayRequest", "SetLabelsForwardingRuleRequest", + "SetLabelsGlobalAddressRequest", "SetLabelsGlobalForwardingRuleRequest", "SetLabelsImageRequest", "SetLabelsInstanceRequest", + "SetLabelsInterconnectAttachmentRequest", + "SetLabelsInterconnectRequest", "SetLabelsRegionDiskRequest", + "SetLabelsSecurityPolicyRequest", "SetLabelsSnapshotRequest", + "SetLabelsTargetVpnGatewayRequest", "SetLabelsVpnGatewayRequest", + "SetLabelsVpnTunnelRequest", "SetMachineResourcesInstanceRequest", "SetMachineTypeInstanceRequest", "SetMetadataInstanceRequest", @@ -2548,9 +2606,11 @@ "SslCertificateSelfManagedSslCertificate", "SslCertificatesClient", "SslCertificatesScopedList", + "SslPoliciesAggregatedList", "SslPoliciesClient", "SslPoliciesList", "SslPoliciesListAvailableFeaturesResponse", + "SslPoliciesScopedList", "SslPolicy", "SslPolicyReference", "StartInstanceRequest", diff --git a/google/cloud/compute_v1/gapic_metadata.json b/google/cloud/compute_v1/gapic_metadata.json index 5573237ad..3235295f9 100644 --- a/google/cloud/compute_v1/gapic_metadata.json +++ b/google/cloud/compute_v1/gapic_metadata.json @@ -58,6 +58,11 @@ "methods": [ "list" ] + }, + "SetLabels": { + "methods": [ + "set_labels" + ] } } } @@ -196,6 +201,11 @@ "get_health" ] }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, "Insert": { "methods": [ "insert" @@ -216,6 +226,11 @@ "set_edge_security_policy" ] }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, "SetSecurityPolicy": { "methods": [ "set_security_policy" @@ -578,6 +593,11 @@ "methods": [ "list" ] + }, + "SetLabels": { + "methods": [ + "set_labels" + ] } } } @@ -1360,6 +1380,11 @@ "methods": [ "patch" ] + }, + "SetLabels": { + "methods": [ + "set_labels" + ] } } } @@ -1418,6 +1443,11 @@ "methods": [ "patch" ] + }, + "SetLabels": { + "methods": [ + "set_labels" + ] } } } @@ -2192,6 +2222,11 @@ "get_health" ] }, + "GetIamPolicy": { + "methods": [ + "get_iam_policy" + ] + }, "Insert": { "methods": [ "insert" @@ -2207,6 +2242,11 @@ "patch" ] }, + "SetIamPolicy": { + "methods": [ + "set_iam_policy" + ] + }, "Update": { "methods": [ "update" @@ -2802,6 +2842,45 @@ } } }, + "RegionSslPolicies": { + "clients": { + "rest": { + "libraryClient": "RegionSslPoliciesClient", + "rpcs": { + "Delete": { + "methods": [ + "delete" + ] + }, + "Get": { + "methods": [ + "get" + ] + }, + "Insert": { + "methods": [ + "insert" + ] + }, + "List": { + "methods": [ + "list" + ] + }, + "ListAvailableFeatures": { + "methods": [ + "list_available_features" + ] + }, + "Patch": { + "methods": [ + "patch" + ] + } + } + } + } + }, "RegionTargetHttpProxies": { "clients": { "rest": { @@ -2880,6 +2959,35 @@ } } }, + "RegionTargetTcpProxies": { + "clients": { + "rest": { + "libraryClient": "RegionTargetTcpProxiesClient", + "rpcs": { + "Delete": { + "methods": [ + "delete" + ] + }, + "Get": { + "methods": [ + "get" + ] + }, + "Insert": { + "methods": [ + "insert" + ] + }, + "List": { + "methods": [ + "list" + ] + } + } + } + } + }, "RegionUrlMaps": { "clients": { "rest": { @@ -3198,6 +3306,11 @@ "methods": [ "remove_rule" ] + }, + "SetLabels": { + "methods": [ + "set_labels" + ] } } } @@ -3345,6 +3458,11 @@ "rest": { "libraryClient": "SslPoliciesClient", "rpcs": { + "AggregatedList": { + "methods": [ + "aggregated_list" + ] + }, "Delete": { "methods": [ "delete" @@ -3810,6 +3928,11 @@ "methods": [ "list" ] + }, + "SetLabels": { + "methods": [ + "set_labels" + ] } } } @@ -3947,6 +4070,11 @@ "methods": [ "list" ] + }, + "SetLabels": { + "methods": [ + "set_labels" + ] } } } 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 976de946b..1fef08609 100644 --- a/google/cloud/compute_v1/services/accelerator_types/transports/rest.py +++ b/google/cloud/compute_v1/services/accelerator_types/transports/rest.py @@ -341,7 +341,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -436,7 +436,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -523,7 +523,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/addresses/client.py b/google/cloud/compute_v1/services/addresses/client.py index 7e2a9ba20..7a4187b51 100644 --- a/google/cloud/compute_v1/services/addresses/client.py +++ b/google/cloud/compute_v1/services/addresses/client.py @@ -1136,6 +1136,255 @@ def list( # Done; return the response. return response + def set_labels_unary( + self, + request: Union[compute.SetLabelsAddressRequest, 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]] = (), + ) -> compute.Operation: + r"""Sets the labels on an Address. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsAddressRequest, dict]): + The request object. A request message for + Addresses.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.SetLabelsAddressRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsAddressRequest): + request = compute.SetLabelsAddressRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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.SetLabelsAddressRequest, 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 an Address. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsAddressRequest, dict]): + The request object. A request message for + Addresses.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.SetLabelsAddressRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsAddressRequest): + request = compute.SetLabelsAddressRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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/addresses/transports/base.py b/google/cloud/compute_v1/services/addresses/transports/base.py index 90680e00f..3efc31017 100644 --- a/google/cloud/compute_v1/services/addresses/transports/base.py +++ b/google/cloud/compute_v1/services/addresses/transports/base.py @@ -157,6 +157,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_labels: gapic_v1.method.wrap_method( + self.set_labels, + default_timeout=None, + client_info=client_info, + ), } def close(self): @@ -212,6 +217,15 @@ def list( ]: raise NotImplementedError() + @property + def set_labels( + self, + ) -> Callable[ + [compute.SetLabelsAddressRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + @property def kind(self) -> str: raise NotImplementedError() diff --git a/google/cloud/compute_v1/services/addresses/transports/rest.py b/google/cloud/compute_v1/services/addresses/transports/rest.py index a61b495a5..7fa9ea4b7 100644 --- a/google/cloud/compute_v1/services/addresses/transports/rest.py +++ b/google/cloud/compute_v1/services/addresses/transports/rest.py @@ -101,6 +101,13 @@ def pre_list(request, metadata): def post_list(response): logging.log(f"Received response: {response}") + def pre_set_labels(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_labels(response): + logging.log(f"Received response: {response}") + transport = AddressesRestTransport(interceptor=MyCustomAddressesInterceptor()) client = AddressesClient(transport=transport) @@ -206,6 +213,27 @@ def post_list(self, response: compute.AddressList) -> compute.AddressList: """ return response + def pre_set_labels( + self, + request: compute.SetLabelsAddressRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.SetLabelsAddressRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_labels + + Override in a subclass to manipulate the request or metadata + before they are sent to the Addresses server. + """ + return request, metadata + + def post_set_labels(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for set_labels + + Override in a subclass to manipulate the response + after it is returned by the Addresses server but before + it is returned to user code. + """ + return response + @dataclasses.dataclass class AddressesRestStub: @@ -381,7 +409,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -483,7 +511,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -576,7 +604,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -686,7 +714,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -773,7 +801,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -789,6 +817,117 @@ def __call__( resp = self._interceptor.post_list(resp) return resp + class _SetLabels(AddressesRestStub): + def __hash__(self): + return hash("SetLabels") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetLabelsAddressRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the set labels method over HTTP. + + Args: + request (~.compute.SetLabelsAddressRequest): + The request object. A request message for + Addresses.SetLabels. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/regions/{region}/addresses/{resource}/setLabels", + "body": "region_set_labels_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_labels(request, metadata) + pb_request = compute.SetLabelsAddressRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_labels(resp) + return resp + @property def aggregated_list( self, @@ -823,6 +962,14 @@ def list(self) -> Callable[[compute.ListAddressesRequest], compute.AddressList]: # In C++ this would require a dynamic_cast return self._List(self._session, self._host, self._interceptor) # type: ignore + @property + def set_labels( + self, + ) -> Callable[[compute.SetLabelsAddressRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetLabels(self._session, self._host, self._interceptor) # type: ignore + @property def kind(self) -> str: return "rest" diff --git a/google/cloud/compute_v1/services/autoscalers/transports/rest.py b/google/cloud/compute_v1/services/autoscalers/transports/rest.py index 4c032b694..a8c9a960c 100644 --- a/google/cloud/compute_v1/services/autoscalers/transports/rest.py +++ b/google/cloud/compute_v1/services/autoscalers/transports/rest.py @@ -443,7 +443,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -545,7 +545,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -644,7 +644,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -754,7 +754,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -844,7 +844,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -954,7 +954,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1065,7 +1065,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 7b29874fa..8385a086d 100644 --- a/google/cloud/compute_v1/services/backend_buckets/transports/rest.py +++ b/google/cloud/compute_v1/services/backend_buckets/transports/rest.py @@ -537,7 +537,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -640,7 +640,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -746,7 +746,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -838,7 +838,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -948,7 +948,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1038,7 +1038,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1148,7 +1148,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1261,7 +1261,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1372,7 +1372,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/backend_services/client.py b/google/cloud/compute_v1/services/backend_services/client.py index 799b8fe14..d256372dc 100644 --- a/google/cloud/compute_v1/services/backend_services/client.py +++ b/google/cloud/compute_v1/services/backend_services/client.py @@ -1365,6 +1365,135 @@ def get_health( # Done; return the response. return response + def get_iam_policy( + self, + request: Union[compute.GetIamPolicyBackendServiceRequest, 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.GetIamPolicyBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.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.GetIamPolicyBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetIamPolicyBackendServiceRequest): + request = compute.GetIamPolicyBackendServiceRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("resource", request.resource), + ) + ), + ) + + # 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, @@ -2109,6 +2238,147 @@ def error_code(self): # Done; return the response. return response + def set_iam_policy( + self, + request: Union[compute.SetIamPolicyBackendServiceRequest, dict] = None, + *, + project: str = None, + resource: str = None, + global_set_policy_request_resource: compute.GlobalSetPolicyRequest = 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.SetIamPolicyBackendServiceRequest, dict]): + The request object. A request message for + BackendServices.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. + 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_policy_request_resource (google.cloud.compute_v1.types.GlobalSetPolicyRequest): + The body resource for this request + This corresponds to the ``global_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, resource, global_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.SetIamPolicyBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetIamPolicyBackendServiceRequest): + request = compute.SetIamPolicyBackendServiceRequest(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_policy_request_resource is not None: + request.global_set_policy_request_resource = ( + global_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("resource", request.resource), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def set_security_policy_unary( self, request: Union[compute.SetSecurityPolicyBackendServiceRequest, dict] = None, 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 00347bded..7ed630746 100644 --- a/google/cloud/compute_v1/services/backend_services/transports/base.py +++ b/google/cloud/compute_v1/services/backend_services/transports/base.py @@ -162,6 +162,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.get_iam_policy: gapic_v1.method.wrap_method( + self.get_iam_policy, + default_timeout=None, + client_info=client_info, + ), self.insert: gapic_v1.method.wrap_method( self.insert, default_timeout=None, @@ -182,6 +187,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_iam_policy: gapic_v1.method.wrap_method( + self.set_iam_policy, + default_timeout=None, + client_info=client_info, + ), self.set_security_policy: gapic_v1.method.wrap_method( self.set_security_policy, default_timeout=None, @@ -263,6 +273,15 @@ def get_health( ]: raise NotImplementedError() + @property + def get_iam_policy( + self, + ) -> Callable[ + [compute.GetIamPolicyBackendServiceRequest], + Union[compute.Policy, Awaitable[compute.Policy]], + ]: + raise NotImplementedError() + @property def insert( self, @@ -299,6 +318,15 @@ def set_edge_security_policy( ]: raise NotImplementedError() + @property + def set_iam_policy( + self, + ) -> Callable[ + [compute.SetIamPolicyBackendServiceRequest], + Union[compute.Policy, Awaitable[compute.Policy]], + ]: + raise NotImplementedError() + @property def set_security_policy( self, 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 195341bc4..65ba1ac28 100644 --- a/google/cloud/compute_v1/services/backend_services/transports/rest.py +++ b/google/cloud/compute_v1/services/backend_services/transports/rest.py @@ -111,6 +111,13 @@ def pre_get_health(request, metadata): def post_get_health(response): logging.log(f"Received response: {response}") + def pre_get_iam_policy(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_iam_policy(response): + logging.log(f"Received response: {response}") + def pre_insert(request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -139,6 +146,13 @@ def pre_set_edge_security_policy(request, metadata): def post_set_edge_security_policy(response): logging.log(f"Received response: {response}") + def pre_set_iam_policy(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_iam_policy(response): + logging.log(f"Received response: {response}") + def pre_set_security_policy(request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -293,6 +307,27 @@ def post_get_health( """ return response + def pre_get_iam_policy( + self, + request: compute.GetIamPolicyBackendServiceRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.GetIamPolicyBackendServiceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the BackendServices server. + """ + return request, metadata + + def post_get_iam_policy(self, response: compute.Policy) -> compute.Policy: + """Post-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the BackendServices server but before + it is returned to user code. + """ + return response + def pre_insert( self, request: compute.InsertBackendServiceRequest, @@ -383,6 +418,27 @@ def post_set_edge_security_policy( """ return response + def pre_set_iam_policy( + self, + request: compute.SetIamPolicyBackendServiceRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.SetIamPolicyBackendServiceRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the BackendServices server. + """ + return request, metadata + + def post_set_iam_policy(self, response: compute.Policy) -> compute.Policy: + """Post-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the BackendServices server but before + it is returned to user code. + """ + return response + def pre_set_security_policy( self, request: compute.SetSecurityPolicyBackendServiceRequest, @@ -629,7 +685,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -719,7 +775,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -821,7 +877,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -927,7 +983,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1029,7 +1085,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1124,7 +1180,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1141,6 +1197,134 @@ def __call__( resp = self._interceptor.post_get_health(resp) return resp + class _GetIamPolicy(BackendServicesRestStub): + def __hash__(self): + return hash("GetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.GetIamPolicyBackendServiceRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Call the get iam policy method over HTTP. + + Args: + request (~.compute.GetIamPolicyBackendServiceRequest): + The request object. A request message for + BackendServices.GetIamPolicy. 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: + ~.compute.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 `__. + **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 `__. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/compute/v1/projects/{project}/global/backendServices/{resource}/getIamPolicy", + }, + ] + request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) + pb_request = compute.GetIamPolicyBackendServiceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Policy() + pb_resp = compute.Policy.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_iam_policy(resp) + return resp + class _Insert(BackendServicesRestStub): def __hash__(self): return hash("Insert") @@ -1235,7 +1419,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1325,7 +1509,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1435,7 +1619,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1548,7 +1732,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1565,6 +1749,143 @@ def __call__( resp = self._interceptor.post_set_edge_security_policy(resp) return resp + class _SetIamPolicy(BackendServicesRestStub): + def __hash__(self): + return hash("SetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetIamPolicyBackendServiceRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Call the set iam policy method over HTTP. + + Args: + request (~.compute.SetIamPolicyBackendServiceRequest): + The request object. A request message for + BackendServices.SetIamPolicy. 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: + ~.compute.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 `__. + **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 `__. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/global/backendServices/{resource}/setIamPolicy", + "body": "global_set_policy_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) + pb_request = compute.SetIamPolicyBackendServiceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Policy() + pb_resp = compute.Policy.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_iam_policy(resp) + return resp + class _SetSecurityPolicy(BackendServicesRestStub): def __hash__(self): return hash("SetSecurityPolicy") @@ -1661,7 +1982,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1772,7 +2093,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1842,6 +2163,14 @@ def get_health( # In C++ this would require a dynamic_cast return self._GetHealth(self._session, self._host, self._interceptor) # type: ignore + @property + def get_iam_policy( + self, + ) -> Callable[[compute.GetIamPolicyBackendServiceRequest], compute.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + @property def insert( self, @@ -1876,6 +2205,14 @@ def set_edge_security_policy( # In C++ this would require a dynamic_cast return self._SetEdgeSecurityPolicy(self._session, self._host, self._interceptor) # type: ignore + @property + def set_iam_policy( + self, + ) -> Callable[[compute.SetIamPolicyBackendServiceRequest], compute.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + @property def set_security_policy( self, 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 2996cc9c5..107fdb2b9 100644 --- a/google/cloud/compute_v1/services/disk_types/transports/rest.py +++ b/google/cloud/compute_v1/services/disk_types/transports/rest.py @@ -329,7 +329,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -426,7 +426,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -512,7 +512,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/disks/transports/rest.py b/google/cloud/compute_v1/services/disks/transports/rest.py index c86ca22c7..a40501ed6 100644 --- a/google/cloud/compute_v1/services/disks/transports/rest.py +++ b/google/cloud/compute_v1/services/disks/transports/rest.py @@ -632,7 +632,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -720,7 +720,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -830,7 +830,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -932,7 +932,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1030,7 +1030,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1158,7 +1158,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1267,7 +1267,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1354,7 +1354,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1466,7 +1466,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1576,7 +1576,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1713,7 +1713,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1824,7 +1824,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1922,7 +1922,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 0529dfe97..f1584fe6e 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 @@ -441,7 +441,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -542,7 +542,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -652,7 +652,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -742,7 +742,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -852,7 +852,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -950,7 +950,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 a3600eeea..2ed1d1f5a 100644 --- a/google/cloud/compute_v1/services/firewall_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/firewall_policies/transports/rest.py @@ -793,7 +793,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -904,7 +904,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1007,7 +1007,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1109,7 +1109,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1198,7 +1198,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1285,7 +1285,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1413,7 +1413,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1504,7 +1504,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1616,7 +1616,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1693,7 +1693,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1771,7 +1771,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1875,7 +1875,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1985,7 +1985,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2096,7 +2096,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2201,7 +2201,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2303,7 +2303,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2439,7 +2439,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2537,7 +2537,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/firewalls/transports/rest.py b/google/cloud/compute_v1/services/firewalls/transports/rest.py index 4b4085c8a..f7f8e837a 100644 --- a/google/cloud/compute_v1/services/firewalls/transports/rest.py +++ b/google/cloud/compute_v1/services/firewalls/transports/rest.py @@ -424,7 +424,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -515,7 +515,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -625,7 +625,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -712,7 +712,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -822,7 +822,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -933,7 +933,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 7e7c35cc9..04ef7e0a6 100644 --- a/google/cloud/compute_v1/services/forwarding_rules/transports/rest.py +++ b/google/cloud/compute_v1/services/forwarding_rules/transports/rest.py @@ -478,7 +478,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -580,7 +580,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -679,7 +679,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -789,7 +789,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -879,7 +879,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -989,7 +989,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1100,7 +1100,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1211,7 +1211,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/global_addresses/client.py b/google/cloud/compute_v1/services/global_addresses/client.py index 35d86514a..b651b2722 100644 --- a/google/cloud/compute_v1/services/global_addresses/client.py +++ b/google/cloud/compute_v1/services/global_addresses/client.py @@ -987,6 +987,236 @@ def list( # Done; return the response. return response + def set_labels_unary( + self, + request: Union[compute.SetLabelsGlobalAddressRequest, 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]] = (), + ) -> compute.Operation: + r"""Sets the labels on a GlobalAddress. To learn more + about labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsGlobalAddressRequest, dict]): + The request object. A request message for + GlobalAddresses.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.SetLabelsGlobalAddressRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsGlobalAddressRequest): + request = compute.SetLabelsGlobalAddressRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("resource", request.resource), + ) + ), + ) + + # 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.SetLabelsGlobalAddressRequest, 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 GlobalAddress. To learn more + about labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsGlobalAddressRequest, dict]): + The request object. A request message for + GlobalAddresses.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.SetLabelsGlobalAddressRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsGlobalAddressRequest): + request = compute.SetLabelsGlobalAddressRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("resource", request.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 __enter__(self): return self 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 547d8bbaa..e5add3bfe 100644 --- a/google/cloud/compute_v1/services/global_addresses/transports/base.py +++ b/google/cloud/compute_v1/services/global_addresses/transports/base.py @@ -152,6 +152,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_labels: gapic_v1.method.wrap_method( + self.set_labels, + default_timeout=None, + client_info=client_info, + ), } def close(self): @@ -199,6 +204,15 @@ def list( ]: raise NotImplementedError() + @property + def set_labels( + self, + ) -> Callable[ + [compute.SetLabelsGlobalAddressRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + @property def kind(self) -> str: raise NotImplementedError() 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 0e1b1d366..99479dfce 100644 --- a/google/cloud/compute_v1/services/global_addresses/transports/rest.py +++ b/google/cloud/compute_v1/services/global_addresses/transports/rest.py @@ -97,6 +97,13 @@ def pre_list(request, metadata): def post_list(response): logging.log(f"Received response: {response}") + def pre_set_labels(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_labels(response): + logging.log(f"Received response: {response}") + transport = GlobalAddressesRestTransport(interceptor=MyCustomGlobalAddressesInterceptor()) client = GlobalAddressesClient(transport=transport) @@ -187,6 +194,27 @@ def post_list(self, response: compute.AddressList) -> compute.AddressList: """ return response + def pre_set_labels( + self, + request: compute.SetLabelsGlobalAddressRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.SetLabelsGlobalAddressRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_labels + + Override in a subclass to manipulate the request or metadata + before they are sent to the GlobalAddresses server. + """ + return request, metadata + + def post_set_labels(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for set_labels + + Override in a subclass to manipulate the response + after it is returned by the GlobalAddresses server but before + it is returned to user code. + """ + return response + @dataclasses.dataclass class GlobalAddressesRestStub: @@ -377,7 +405,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -471,7 +499,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -581,7 +609,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -669,7 +697,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -685,6 +713,117 @@ def __call__( resp = self._interceptor.post_list(resp) return resp + class _SetLabels(GlobalAddressesRestStub): + def __hash__(self): + return hash("SetLabels") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetLabelsGlobalAddressRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the set labels method over HTTP. + + Args: + request (~.compute.SetLabelsGlobalAddressRequest): + The request object. A request message for + GlobalAddresses.SetLabels. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/global/addresses/{resource}/setLabels", + "body": "global_set_labels_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_labels(request, metadata) + pb_request = compute.SetLabelsGlobalAddressRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_labels(resp) + return resp + @property def delete( self, @@ -715,6 +854,14 @@ def list( # In C++ this would require a dynamic_cast return self._List(self._session, self._host, self._interceptor) # type: ignore + @property + def set_labels( + self, + ) -> Callable[[compute.SetLabelsGlobalAddressRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetLabels(self._session, self._host, self._interceptor) # type: ignore + @property def kind(self) -> str: return "rest" 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 8ec564a9e..3ffde3840 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 @@ -463,7 +463,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -562,7 +562,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -672,7 +672,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -762,7 +762,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -872,7 +872,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -983,7 +983,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1094,7 +1094,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 ad10fba03..d992bd875 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 @@ -500,7 +500,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -603,7 +603,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -719,7 +719,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -818,7 +818,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -928,7 +928,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1016,7 +1016,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1109,7 +1109,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 8497a5c9f..6f87d2f5c 100644 --- a/google/cloud/compute_v1/services/global_operations/transports/rest.py +++ b/google/cloud/compute_v1/services/global_operations/transports/rest.py @@ -396,7 +396,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -486,7 +486,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -588,7 +588,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -677,7 +677,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -779,7 +779,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 ceba27b3a..32b57ca23 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 @@ -345,7 +345,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -447,7 +447,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -525,7 +525,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 10392e189..1df126319 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 @@ -423,7 +423,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -519,7 +519,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -629,7 +629,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -717,7 +717,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -827,7 +827,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 6c1db9296..01328b1ef 100644 --- a/google/cloud/compute_v1/services/health_checks/transports/rest.py +++ b/google/cloud/compute_v1/services/health_checks/transports/rest.py @@ -445,7 +445,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -547,7 +547,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -654,7 +654,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -764,7 +764,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -854,7 +854,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -964,7 +964,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1075,7 +1075,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 a462d24b0..1a2c2ca98 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 @@ -278,7 +278,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/images/transports/rest.py b/google/cloud/compute_v1/services/images/transports/rest.py index f2f1c4eb1..e6b8e09b5 100644 --- a/google/cloud/compute_v1/services/images/transports/rest.py +++ b/google/cloud/compute_v1/services/images/transports/rest.py @@ -561,7 +561,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -671,7 +671,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -762,7 +762,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -853,7 +853,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -981,7 +981,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1090,7 +1090,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1177,7 +1177,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1286,7 +1286,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1423,7 +1423,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1534,7 +1534,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1632,7 +1632,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 84bde8f8a..077e67c53 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 @@ -893,7 +893,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -981,7 +981,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1096,7 +1096,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1209,7 +1209,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1312,7 +1312,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1424,7 +1424,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1540,7 +1540,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1637,7 +1637,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1747,7 +1747,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1835,7 +1835,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1922,7 +1922,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2013,7 +2013,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2104,7 +2104,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2214,7 +2214,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2330,7 +2330,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2445,7 +2445,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2550,7 +2550,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2664,7 +2664,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2777,7 +2777,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2893,7 +2893,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 dd0d68dfb..f0d64b4d7 100644 --- a/google/cloud/compute_v1/services/instance_groups/transports/rest.py +++ b/google/cloud/compute_v1/services/instance_groups/transports/rest.py @@ -531,7 +531,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -619,7 +619,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -721,7 +721,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -822,7 +822,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -932,7 +932,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1020,7 +1020,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1115,7 +1115,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1228,7 +1228,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1339,7 +1339,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 ee24534d8..b4be2e576 100644 --- a/google/cloud/compute_v1/services/instance_templates/transports/rest.py +++ b/google/cloud/compute_v1/services/instance_templates/transports/rest.py @@ -467,7 +467,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -559,7 +559,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -687,7 +687,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -797,7 +797,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -885,7 +885,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1021,7 +1021,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1119,7 +1119,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/instances/transports/rest.py b/google/cloud/compute_v1/services/instances/transports/rest.py index c0ad9bcbc..60051cd71 100644 --- a/google/cloud/compute_v1/services/instances/transports/rest.py +++ b/google/cloud/compute_v1/services/instances/transports/rest.py @@ -1587,7 +1587,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1700,7 +1700,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1788,7 +1788,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1898,7 +1898,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2009,7 +2009,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2112,7 +2112,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2219,7 +2219,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2323,7 +2323,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2414,7 +2414,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2505,7 +2505,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2594,7 +2594,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2722,7 +2722,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2809,7 +2809,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2898,7 +2898,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2988,7 +2988,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -3098,7 +3098,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -3185,7 +3185,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -3274,7 +3274,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -3386,7 +3386,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -3489,7 +3489,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -3591,7 +3591,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -3683,7 +3683,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -3787,7 +3787,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -3894,7 +3894,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -4030,7 +4030,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -4141,7 +4141,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -4254,7 +4254,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -4367,7 +4367,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -4478,7 +4478,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -4591,7 +4591,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -4702,7 +4702,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -4815,7 +4815,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -4934,7 +4934,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -5045,7 +5045,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -5151,7 +5151,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -5253,7 +5253,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -5365,7 +5365,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -5467,7 +5467,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -5569,7 +5569,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -5666,7 +5666,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -5777,7 +5777,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -5892,7 +5892,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -6005,7 +6005,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -6120,7 +6120,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -6234,7 +6234,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/interconnect_attachments/client.py b/google/cloud/compute_v1/services/interconnect_attachments/client.py index b0d49f0f3..11cb2cc13 100644 --- a/google/cloud/compute_v1/services/interconnect_attachments/client.py +++ b/google/cloud/compute_v1/services/interconnect_attachments/client.py @@ -1408,6 +1408,257 @@ def error_code(self): # Done; return the response. return response + def set_labels_unary( + self, + request: Union[compute.SetLabelsInterconnectAttachmentRequest, 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]] = (), + ) -> compute.Operation: + r"""Sets the labels on an InterconnectAttachment. To + learn more about labels, read the Labeling Resources + documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsInterconnectAttachmentRequest, dict]): + The request object. A request message for + InterconnectAttachments.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.SetLabelsInterconnectAttachmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsInterconnectAttachmentRequest): + request = compute.SetLabelsInterconnectAttachmentRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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.SetLabelsInterconnectAttachmentRequest, 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 an InterconnectAttachment. To + learn more about labels, read the Labeling Resources + documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsInterconnectAttachmentRequest, dict]): + The request object. A request message for + InterconnectAttachments.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.SetLabelsInterconnectAttachmentRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsInterconnectAttachmentRequest): + request = compute.SetLabelsInterconnectAttachmentRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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 5fac6563e..58c204f1e 100644 --- a/google/cloud/compute_v1/services/interconnect_attachments/transports/base.py +++ b/google/cloud/compute_v1/services/interconnect_attachments/transports/base.py @@ -162,6 +162,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_labels: gapic_v1.method.wrap_method( + self.set_labels, + default_timeout=None, + client_info=client_info, + ), } def close(self): @@ -235,6 +240,15 @@ def patch( ]: raise NotImplementedError() + @property + def set_labels( + self, + ) -> Callable[ + [compute.SetLabelsInterconnectAttachmentRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + @property def kind(self) -> str: raise NotImplementedError() 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 27b10cd87..9d5d27b23 100644 --- a/google/cloud/compute_v1/services/interconnect_attachments/transports/rest.py +++ b/google/cloud/compute_v1/services/interconnect_attachments/transports/rest.py @@ -111,6 +111,13 @@ def pre_patch(request, metadata): def post_patch(response): logging.log(f"Received response: {response}") + def pre_set_labels(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_labels(response): + logging.log(f"Received response: {response}") + transport = InterconnectAttachmentsRestTransport(interceptor=MyCustomInterconnectAttachmentsInterceptor()) client = InterconnectAttachmentsClient(transport=transport) @@ -251,6 +258,29 @@ def post_patch(self, response: compute.Operation) -> compute.Operation: """ return response + def pre_set_labels( + self, + request: compute.SetLabelsInterconnectAttachmentRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + compute.SetLabelsInterconnectAttachmentRequest, Sequence[Tuple[str, str]] + ]: + """Pre-rpc interceptor for set_labels + + Override in a subclass to manipulate the request or metadata + before they are sent to the InterconnectAttachments server. + """ + return request, metadata + + def post_set_labels(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for set_labels + + Override in a subclass to manipulate the response + after it is returned by the InterconnectAttachments server but before + it is returned to user code. + """ + return response + @dataclasses.dataclass class InterconnectAttachmentsRestStub: @@ -428,7 +458,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -530,7 +560,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -625,7 +655,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -735,7 +765,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -826,7 +856,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -936,7 +966,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -953,6 +983,117 @@ def __call__( resp = self._interceptor.post_patch(resp) return resp + class _SetLabels(InterconnectAttachmentsRestStub): + def __hash__(self): + return hash("SetLabels") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetLabelsInterconnectAttachmentRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the set labels method over HTTP. + + Args: + request (~.compute.SetLabelsInterconnectAttachmentRequest): + The request object. A request message for + InterconnectAttachments.SetLabels. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/regions/{region}/interconnectAttachments/{resource}/setLabels", + "body": "region_set_labels_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_labels(request, metadata) + pb_request = compute.SetLabelsInterconnectAttachmentRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_labels(resp) + return resp + @property def aggregated_list( self, @@ -1008,6 +1149,14 @@ def patch( # In C++ this would require a dynamic_cast return self._Patch(self._session, self._host, self._interceptor) # type: ignore + @property + def set_labels( + self, + ) -> Callable[[compute.SetLabelsInterconnectAttachmentRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetLabels(self._session, self._host, self._interceptor) # type: ignore + @property def kind(self) -> str: return "rest" 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 b1f946183..b19973dc8 100644 --- a/google/cloud/compute_v1/services/interconnect_locations/transports/rest.py +++ b/google/cloud/compute_v1/services/interconnect_locations/transports/rest.py @@ -317,7 +317,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -407,7 +407,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/interconnects/client.py b/google/cloud/compute_v1/services/interconnects/client.py index 073411528..a3207c246 100644 --- a/google/cloud/compute_v1/services/interconnects/client.py +++ b/google/cloud/compute_v1/services/interconnects/client.py @@ -1293,6 +1293,236 @@ def error_code(self): # Done; return the response. return response + def set_labels_unary( + self, + request: Union[compute.SetLabelsInterconnectRequest, 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]] = (), + ) -> compute.Operation: + r"""Sets the labels on an Interconnect. To learn more + about labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsInterconnectRequest, dict]): + The request object. A request message for + Interconnects.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.SetLabelsInterconnectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsInterconnectRequest): + request = compute.SetLabelsInterconnectRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("resource", request.resource), + ) + ), + ) + + # 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.SetLabelsInterconnectRequest, 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 Interconnect. To learn more + about labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsInterconnectRequest, dict]): + The request object. A request message for + Interconnects.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.SetLabelsInterconnectRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsInterconnectRequest): + request = compute.SetLabelsInterconnectRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("resource", request.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 __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 3377db854..25a61153a 100644 --- a/google/cloud/compute_v1/services/interconnects/transports/base.py +++ b/google/cloud/compute_v1/services/interconnects/transports/base.py @@ -162,6 +162,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_labels: gapic_v1.method.wrap_method( + self.set_labels, + default_timeout=None, + client_info=client_info, + ), } def close(self): @@ -230,6 +235,15 @@ def patch( ]: raise NotImplementedError() + @property + def set_labels( + self, + ) -> Callable[ + [compute.SetLabelsInterconnectRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + @property def kind(self) -> str: raise NotImplementedError() diff --git a/google/cloud/compute_v1/services/interconnects/transports/rest.py b/google/cloud/compute_v1/services/interconnects/transports/rest.py index 792032473..c31b10a05 100644 --- a/google/cloud/compute_v1/services/interconnects/transports/rest.py +++ b/google/cloud/compute_v1/services/interconnects/transports/rest.py @@ -111,6 +111,13 @@ def pre_patch(request, metadata): def post_patch(response): logging.log(f"Received response: {response}") + def pre_set_labels(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_labels(response): + logging.log(f"Received response: {response}") + transport = InterconnectsRestTransport(interceptor=MyCustomInterconnectsInterceptor()) client = InterconnectsClient(transport=transport) @@ -245,6 +252,27 @@ def post_patch(self, response: compute.Operation) -> compute.Operation: """ return response + def pre_set_labels( + self, + request: compute.SetLabelsInterconnectRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.SetLabelsInterconnectRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_labels + + Override in a subclass to manipulate the request or metadata + before they are sent to the Interconnects server. + """ + return request, metadata + + def post_set_labels(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for set_labels + + Override in a subclass to manipulate the response + after it is returned by the Interconnects server but before + it is returned to user code. + """ + return response + @dataclasses.dataclass class InterconnectsRestStub: @@ -435,7 +463,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -528,7 +556,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -617,7 +645,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -727,7 +755,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -817,7 +845,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -927,7 +955,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -944,6 +972,117 @@ def __call__( resp = self._interceptor.post_patch(resp) return resp + class _SetLabels(InterconnectsRestStub): + def __hash__(self): + return hash("SetLabels") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetLabelsInterconnectRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the set labels method over HTTP. + + Args: + request (~.compute.SetLabelsInterconnectRequest): + The request object. A request message for + Interconnects.SetLabels. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/global/interconnects/{resource}/setLabels", + "body": "global_set_labels_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_labels(request, metadata) + pb_request = compute.SetLabelsInterconnectRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_labels(resp) + return resp + @property def delete( self, @@ -991,6 +1130,14 @@ def patch(self) -> Callable[[compute.PatchInterconnectRequest], compute.Operatio # In C++ this would require a dynamic_cast return self._Patch(self._session, self._host, self._interceptor) # type: ignore + @property + def set_labels( + self, + ) -> Callable[[compute.SetLabelsInterconnectRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetLabels(self._session, self._host, self._interceptor) # type: ignore + @property def kind(self) -> str: return "rest" 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 7e19df021..f7665d760 100644 --- a/google/cloud/compute_v1/services/license_codes/transports/rest.py +++ b/google/cloud/compute_v1/services/license_codes/transports/rest.py @@ -310,7 +310,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -407,7 +407,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/licenses/transports/rest.py b/google/cloud/compute_v1/services/licenses/transports/rest.py index cdd8dc7d1..635027d01 100644 --- a/google/cloud/compute_v1/services/licenses/transports/rest.py +++ b/google/cloud/compute_v1/services/licenses/transports/rest.py @@ -456,7 +456,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -549,7 +549,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -677,7 +677,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -787,7 +787,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -874,7 +874,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1010,7 +1010,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1108,7 +1108,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 611a961ba..1ff0f206d 100644 --- a/google/cloud/compute_v1/services/machine_images/transports/rest.py +++ b/google/cloud/compute_v1/services/machine_images/transports/rest.py @@ -465,7 +465,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -560,7 +560,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -688,7 +688,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -798,7 +798,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -886,7 +886,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1022,7 +1022,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1120,7 +1120,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 e99a4ebc8..adc2b9063 100644 --- a/google/cloud/compute_v1/services/machine_types/transports/rest.py +++ b/google/cloud/compute_v1/services/machine_types/transports/rest.py @@ -333,7 +333,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -425,7 +425,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -512,7 +512,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 bfb890b3d..80f890175 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 @@ -405,7 +405,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -507,7 +507,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -596,7 +596,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -706,7 +706,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -817,7 +817,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 482614483..931b7827b 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 @@ -529,7 +529,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -643,7 +643,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -746,7 +746,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -860,7 +860,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -959,7 +959,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1069,7 +1069,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1157,7 +1157,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1256,7 +1256,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1356,7 +1356,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 f806eaf0e..d08397c24 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 @@ -748,7 +748,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -859,7 +859,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -962,7 +962,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1064,7 +1064,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1153,7 +1153,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1240,7 +1240,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1368,7 +1368,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1459,7 +1459,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1569,7 +1569,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1657,7 +1657,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1767,7 +1767,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1878,7 +1878,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1985,7 +1985,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2087,7 +2087,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2223,7 +2223,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2323,7 +2323,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/networks/transports/rest.py b/google/cloud/compute_v1/services/networks/transports/rest.py index 859ff094d..25d7cff7e 100644 --- a/google/cloud/compute_v1/services/networks/transports/rest.py +++ b/google/cloud/compute_v1/services/networks/transports/rest.py @@ -574,7 +574,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -677,7 +677,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -768,7 +768,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -857,7 +857,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -967,7 +967,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1054,7 +1054,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1143,7 +1143,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1252,7 +1252,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1363,7 +1363,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1468,7 +1468,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1578,7 +1578,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 715ce9db6..e7a252130 100644 --- a/google/cloud/compute_v1/services/node_groups/transports/rest.py +++ b/google/cloud/compute_v1/services/node_groups/transports/rest.py @@ -638,7 +638,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -726,7 +726,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -828,7 +828,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -938,7 +938,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1036,7 +1036,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1164,7 +1164,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1276,7 +1276,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1364,7 +1364,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1451,7 +1451,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1561,7 +1561,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1698,7 +1698,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1811,7 +1811,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1909,7 +1909,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 06e6b89a3..097f2799d 100644 --- a/google/cloud/compute_v1/services/node_templates/transports/rest.py +++ b/google/cloud/compute_v1/services/node_templates/transports/rest.py @@ -480,7 +480,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -582,7 +582,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -674,7 +674,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -802,7 +802,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -912,7 +912,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1000,7 +1000,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1136,7 +1136,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1234,7 +1234,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 a0fc29ac4..644b1256f 100644 --- a/google/cloud/compute_v1/services/node_types/transports/rest.py +++ b/google/cloud/compute_v1/services/node_types/transports/rest.py @@ -329,7 +329,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -425,7 +425,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -511,7 +511,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 f122d7757..d6e86a26e 100644 --- a/google/cloud/compute_v1/services/packet_mirrorings/transports/rest.py +++ b/google/cloud/compute_v1/services/packet_mirrorings/transports/rest.py @@ -456,7 +456,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -558,7 +558,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -655,7 +655,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -765,7 +765,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -855,7 +855,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -965,7 +965,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1063,7 +1063,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/projects/transports/rest.py b/google/cloud/compute_v1/services/projects/transports/rest.py index c9013d679..6fa70f186 100644 --- a/google/cloud/compute_v1/services/projects/transports/rest.py +++ b/google/cloud/compute_v1/services/projects/transports/rest.py @@ -640,7 +640,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -752,7 +752,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -855,7 +855,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -967,7 +967,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1059,7 +1059,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1151,7 +1151,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1240,7 +1240,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1335,7 +1335,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1446,7 +1446,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1557,7 +1557,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1671,7 +1671,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1784,7 +1784,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1897,7 +1897,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 f3d2ec7d2..01e51736c 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 @@ -409,7 +409,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -502,7 +502,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -612,7 +612,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -700,7 +700,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -810,7 +810,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 378f8c374..0ec4632df 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 @@ -428,7 +428,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -530,7 +530,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -626,7 +626,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -736,7 +736,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -824,7 +824,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -934,7 +934,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 38b195be1..056e57416 100644 --- a/google/cloud/compute_v1/services/region_autoscalers/transports/rest.py +++ b/google/cloud/compute_v1/services/region_autoscalers/transports/rest.py @@ -435,7 +435,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -534,7 +534,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -644,7 +644,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -732,7 +732,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -842,7 +842,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -953,7 +953,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 0cf817370..e20af16a2 100644 --- a/google/cloud/compute_v1/services/region_backend_services/client.py +++ b/google/cloud/compute_v1/services/region_backend_services/client.py @@ -865,6 +865,146 @@ def get_health( # Done; return the response. return response + def get_iam_policy( + self, + request: Union[compute.GetIamPolicyRegionBackendServiceRequest, 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.GetIamPolicyRegionBackendServiceRequest, dict]): + The request object. A request message for + RegionBackendServices.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.GetIamPolicyRegionBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetIamPolicyRegionBackendServiceRequest): + request = compute.GetIamPolicyRegionBackendServiceRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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.InsertRegionBackendServiceRequest, dict] = None, @@ -1451,6 +1591,158 @@ def error_code(self): # Done; return the response. return response + def set_iam_policy( + self, + request: Union[compute.SetIamPolicyRegionBackendServiceRequest, dict] = None, + *, + project: str = None, + region: str = None, + resource: str = None, + region_set_policy_request_resource: compute.RegionSetPolicyRequest = 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.SetIamPolicyRegionBackendServiceRequest, dict]): + The request object. A request message for + RegionBackendServices.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. + 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. + region_set_policy_request_resource (google.cloud.compute_v1.types.RegionSetPolicyRequest): + The body resource for this request + This corresponds to the ``region_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, region, resource, region_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.SetIamPolicyRegionBackendServiceRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetIamPolicyRegionBackendServiceRequest): + request = compute.SetIamPolicyRegionBackendServiceRequest(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_policy_request_resource is not None: + request.region_set_policy_request_resource = ( + region_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + def update_unary( self, request: Union[compute.UpdateRegionBackendServiceRequest, dict] = None, 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 e469d2ad0..c0e8a4edc 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 @@ -147,6 +147,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.get_iam_policy: gapic_v1.method.wrap_method( + self.get_iam_policy, + default_timeout=None, + client_info=client_info, + ), self.insert: gapic_v1.method.wrap_method( self.insert, default_timeout=None, @@ -162,6 +167,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_iam_policy: gapic_v1.method.wrap_method( + self.set_iam_policy, + default_timeout=None, + client_info=client_info, + ), self.update: gapic_v1.method.wrap_method( self.update, default_timeout=None, @@ -208,6 +218,15 @@ def get_health( ]: raise NotImplementedError() + @property + def get_iam_policy( + self, + ) -> Callable[ + [compute.GetIamPolicyRegionBackendServiceRequest], + Union[compute.Policy, Awaitable[compute.Policy]], + ]: + raise NotImplementedError() + @property def insert( self, @@ -235,6 +254,15 @@ def patch( ]: raise NotImplementedError() + @property + def set_iam_policy( + self, + ) -> Callable[ + [compute.SetIamPolicyRegionBackendServiceRequest], + Union[compute.Policy, Awaitable[compute.Policy]], + ]: + raise NotImplementedError() + @property def update( self, 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 0550dc52f..3ad369976 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 @@ -90,6 +90,13 @@ def pre_get_health(request, metadata): def post_get_health(response): logging.log(f"Received response: {response}") + def pre_get_iam_policy(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get_iam_policy(response): + logging.log(f"Received response: {response}") + def pre_insert(request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -111,6 +118,13 @@ def pre_patch(request, metadata): def post_patch(response): logging.log(f"Received response: {response}") + def pre_set_iam_policy(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_iam_policy(response): + logging.log(f"Received response: {response}") + def pre_update(request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -189,6 +203,29 @@ def post_get_health( """ return response + def pre_get_iam_policy( + self, + request: compute.GetIamPolicyRegionBackendServiceRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + compute.GetIamPolicyRegionBackendServiceRequest, Sequence[Tuple[str, str]] + ]: + """Pre-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionBackendServices server. + """ + return request, metadata + + def post_get_iam_policy(self, response: compute.Policy) -> compute.Policy: + """Post-rpc interceptor for get_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the RegionBackendServices server but before + it is returned to user code. + """ + return response + def pre_insert( self, request: compute.InsertRegionBackendServiceRequest, @@ -254,6 +291,29 @@ def post_patch(self, response: compute.Operation) -> compute.Operation: """ return response + def pre_set_iam_policy( + self, + request: compute.SetIamPolicyRegionBackendServiceRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + compute.SetIamPolicyRegionBackendServiceRequest, Sequence[Tuple[str, str]] + ]: + """Pre-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionBackendServices server. + """ + return request, metadata + + def post_set_iam_policy(self, response: compute.Policy) -> compute.Policy: + """Post-rpc interceptor for set_iam_policy + + Override in a subclass to manipulate the response + after it is returned by the RegionBackendServices server but before + it is returned to user code. + """ + return response + def pre_update( self, request: compute.UpdateRegionBackendServiceRequest, @@ -465,7 +525,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -567,7 +627,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -662,7 +722,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -679,6 +739,134 @@ def __call__( resp = self._interceptor.post_get_health(resp) return resp + class _GetIamPolicy(RegionBackendServicesRestStub): + def __hash__(self): + return hash("GetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.GetIamPolicyRegionBackendServiceRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Call the get iam policy method over HTTP. + + Args: + request (~.compute.GetIamPolicyRegionBackendServiceRequest): + The request object. A request message for + RegionBackendServices.GetIamPolicy. 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: + ~.compute.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 `__. + **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 `__. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/compute/v1/projects/{project}/regions/{region}/backendServices/{resource}/getIamPolicy", + }, + ] + request, metadata = self._interceptor.pre_get_iam_policy(request, metadata) + pb_request = compute.GetIamPolicyRegionBackendServiceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Policy() + pb_resp = compute.Policy.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get_iam_policy(resp) + return resp + class _Insert(RegionBackendServicesRestStub): def __hash__(self): return hash("Insert") @@ -773,7 +961,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -863,7 +1051,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -973,7 +1161,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -990,6 +1178,143 @@ def __call__( resp = self._interceptor.post_patch(resp) return resp + class _SetIamPolicy(RegionBackendServicesRestStub): + def __hash__(self): + return hash("SetIamPolicy") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetIamPolicyRegionBackendServiceRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Policy: + r"""Call the set iam policy method over HTTP. + + Args: + request (~.compute.SetIamPolicyRegionBackendServiceRequest): + The request object. A request message for + RegionBackendServices.SetIamPolicy. 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: + ~.compute.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 `__. + **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 `__. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/regions/{region}/backendServices/{resource}/setIamPolicy", + "body": "region_set_policy_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_iam_policy(request, metadata) + pb_request = compute.SetIamPolicyRegionBackendServiceRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Policy() + pb_resp = compute.Policy.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_iam_policy(resp) + return resp + class _Update(RegionBackendServicesRestStub): def __hash__(self): return hash("Update") @@ -1084,7 +1409,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1128,6 +1453,14 @@ def get_health( # In C++ this would require a dynamic_cast return self._GetHealth(self._session, self._host, self._interceptor) # type: ignore + @property + def get_iam_policy( + self, + ) -> Callable[[compute.GetIamPolicyRegionBackendServiceRequest], compute.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._GetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + @property def insert( self, @@ -1154,6 +1487,14 @@ def patch( # In C++ this would require a dynamic_cast return self._Patch(self._session, self._host, self._interceptor) # type: ignore + @property + def set_iam_policy( + self, + ) -> Callable[[compute.SetIamPolicyRegionBackendServiceRequest], compute.Policy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetIamPolicy(self._session, self._host, self._interceptor) # type: ignore + @property def update( self, 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 e8da10f1b..321effe1c 100644 --- a/google/cloud/compute_v1/services/region_commitments/transports/rest.py +++ b/google/cloud/compute_v1/services/region_commitments/transports/rest.py @@ -394,7 +394,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -490,7 +490,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -600,7 +600,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -690,7 +690,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -800,7 +800,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 3adccbe63..cca254ad8 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 @@ -319,7 +319,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -406,7 +406,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 1503435f7..972b44930 100644 --- a/google/cloud/compute_v1/services/region_disks/transports/rest.py +++ b/google/cloud/compute_v1/services/region_disks/transports/rest.py @@ -614,7 +614,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -725,7 +725,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -828,7 +828,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -927,7 +927,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1055,7 +1055,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1165,7 +1165,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1253,7 +1253,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1365,7 +1365,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1476,7 +1476,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1613,7 +1613,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1724,7 +1724,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1822,7 +1822,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 d446d9a7a..461410007 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 @@ -413,7 +413,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -502,7 +502,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -612,7 +612,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -700,7 +700,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -810,7 +810,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 0f4a953bf..5efdcb2bd 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 @@ -433,7 +433,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -540,7 +540,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -650,7 +650,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -740,7 +740,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -850,7 +850,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -961,7 +961,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 1ee8c0aac..20f1f4dcc 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 @@ -877,7 +877,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -995,7 +995,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1110,7 +1110,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1213,7 +1213,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1327,7 +1327,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1445,7 +1445,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1542,7 +1542,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1652,7 +1652,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1742,7 +1742,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1831,7 +1831,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1924,7 +1924,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2017,7 +2017,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2129,7 +2129,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2247,7 +2247,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2362,7 +2362,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2467,7 +2467,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2581,7 +2581,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2696,7 +2696,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2814,7 +2814,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 20e2f73bf..48790f4c7 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 @@ -384,7 +384,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -473,7 +473,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -568,7 +568,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -679,7 +679,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 561ffd7bd..53d641ae6 100644 --- a/google/cloud/compute_v1/services/region_instances/transports/rest.py +++ b/google/cloud/compute_v1/services/region_instances/transports/rest.py @@ -301,7 +301,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 6e134564a..82e3969c9 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 @@ -387,7 +387,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -485,7 +485,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -595,7 +595,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -683,7 +683,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 68b951474..d6179d5a1 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 @@ -807,7 +807,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -918,7 +918,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1023,7 +1023,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1125,7 +1125,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1214,7 +1214,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1303,7 +1303,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1398,7 +1398,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1532,7 +1532,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1623,7 +1623,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1733,7 +1733,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1821,7 +1821,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1931,7 +1931,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2042,7 +2042,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2149,7 +2149,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2253,7 +2253,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -2391,7 +2391,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -2491,7 +2491,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 5aca61a71..96e412c29 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 @@ -387,7 +387,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -481,7 +481,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -591,7 +591,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -679,7 +679,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 38e0ebf4d..734c140d2 100644 --- a/google/cloud/compute_v1/services/region_operations/transports/rest.py +++ b/google/cloud/compute_v1/services/region_operations/transports/rest.py @@ -367,7 +367,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -469,7 +469,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -558,7 +558,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -660,7 +660,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 63f993321..dc2ed15c8 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 @@ -407,7 +407,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -500,7 +500,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -610,7 +610,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -698,7 +698,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -808,7 +808,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 140d95d93..321df050a 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 @@ -379,7 +379,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -482,7 +482,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -592,7 +592,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -682,7 +682,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/region_ssl_policies/__init__.py b/google/cloud/compute_v1/services/region_ssl_policies/__init__.py new file mode 100644 index 000000000..9a5296526 --- /dev/null +++ b/google/cloud/compute_v1/services/region_ssl_policies/__init__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# 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. +# +from .client import RegionSslPoliciesClient + +__all__ = ("RegionSslPoliciesClient",) diff --git a/google/cloud/compute_v1/services/region_ssl_policies/client.py b/google/cloud/compute_v1/services/region_ssl_policies/client.py new file mode 100644 index 000000000..be9cbb621 --- /dev/null +++ b/google/cloud/compute_v1/services/region_ssl_policies/client.py @@ -0,0 +1,1440 @@ +# -*- coding: utf-8 -*- +# 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. +# +from collections import OrderedDict +import functools +import os +import re +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 +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.oauth2 import service_account # type: ignore + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +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_policies import pagers +from google.cloud.compute_v1.types import compute +from .transports.base import RegionSslPoliciesTransport, DEFAULT_CLIENT_INFO +from .transports.rest import RegionSslPoliciesRestTransport + + +class RegionSslPoliciesClientMeta(type): + """Metaclass for the RegionSslPolicies client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[RegionSslPoliciesTransport]] + _transport_registry["rest"] = RegionSslPoliciesRestTransport + + def get_transport_class( + cls, + label: str = None, + ) -> Type[RegionSslPoliciesTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class RegionSslPoliciesClient(metaclass=RegionSslPoliciesClientMeta): + """The RegionSslPolicies API.""" + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "compute.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + RegionSslPoliciesClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + RegionSslPoliciesClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file(filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> RegionSslPoliciesTransport: + """Returns the transport used by the client instance. + + Returns: + RegionSslPoliciesTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, RegionSslPoliciesTransport, None] = None, + client_options: Optional[client_options_lib.ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the region ssl policies client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, RegionSslPoliciesTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + NOTE: "rest" transport functionality is currently in a + beta state (preview). We welcome your feedback via an + issue in this library's source repository. + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + client_options = client_options_lib.from_dict(client_options) + if client_options is None: + client_options = client_options_lib.ClientOptions() + + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( + client_options + ) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, RegionSslPoliciesTransport): + # transport is a RegionSslPoliciesTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def delete_unary( + self, + request: Union[compute.DeleteRegionSslPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + ssl_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + 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.DeleteRegionSslPolicyRequest, dict]): + The request object. A request message for + RegionSslPolicies.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_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, region, 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.DeleteRegionSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionSslPolicyRequest): + request = compute.DeleteRegionSslPolicyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("ssl_policy", request.ssl_policy), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteRegionSslPolicyRequest, dict] = None, + *, + project: str = None, + region: 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.DeleteRegionSslPolicyRequest, dict]): + The request object. A request message for + RegionSslPolicies.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_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, region, 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.DeleteRegionSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionSslPolicyRequest): + request = compute.DeleteRegionSslPolicyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("ssl_policy", request.ssl_policy), + ) + ), + ) + + # 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.GetRegionSslPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + ssl_policy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.SslPolicy: + r"""Lists all of the ordered rules present in a single + specified policy. + + Args: + request (Union[google.cloud.compute_v1.types.GetRegionSslPolicyRequest, dict]): + The request object. A request message for + RegionSslPolicies.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. + 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. + retry (google.api_core.retry.Retry): Designation of what errors, if any, + should be retried. + timeout (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.SslPolicy: + Represents an SSL Policy resource. + Use SSL policies to control the SSL + features, such as versions and cipher + suites, offered by an HTTPS or SSL Proxy + load balancer. For more information, + read SSL Policy Concepts. + + """ + # Create or coerce a protobuf request object. + # Quick check: 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_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.GetRegionSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetRegionSslPolicyRequest): + request = compute.GetRegionSslPolicyRequest(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_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.get] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("ssl_policy", request.ssl_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.InsertRegionSslPolicyRequest, dict] = None, + *, + project: str = None, + region: str = None, + ssl_policy_resource: compute.SslPolicy = 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 and + region using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionSslPolicyRequest, dict]): + The request object. A request message for + RegionSslPolicies.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_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, region, 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.InsertRegionSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionSslPolicyRequest): + request = compute.InsertRegionSslPolicyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionSslPolicyRequest, dict] = None, + *, + project: str = None, + region: 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"""Creates a new policy in the specified project and + region using the data included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionSslPolicyRequest, dict]): + The request object. A request message for + RegionSslPolicies.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_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, region, 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.InsertRegionSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionSslPolicyRequest): + request = compute.InsertRegionSslPolicyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ) + ), + ) + + # 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.ListRegionSslPoliciesRequest, 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 SSL policies that have been configured + for the specified project and region. + + Args: + request (Union[google.cloud.compute_v1.types.ListRegionSslPoliciesRequest, dict]): + The request object. A request message for + RegionSslPolicies.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_ssl_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.ListRegionSslPoliciesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListRegionSslPoliciesRequest): + request = compute.ListRegionSslPoliciesRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ) + ), + ) + + # 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_available_features( + self, + request: Union[ + compute.ListAvailableFeaturesRegionSslPoliciesRequest, dict + ] = None, + *, + project: str = None, + region: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.SslPoliciesListAvailableFeaturesResponse: + r"""Lists all features that can be specified in the SSL + policy when using custom profile. + + Args: + request (Union[google.cloud.compute_v1.types.ListAvailableFeaturesRegionSslPoliciesRequest, dict]): + The request object. A request message for + RegionSslPolicies.ListAvailableFeatures. See the method + description for details. + project (str): + 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.types.SslPoliciesListAvailableFeaturesResponse: + + """ + # Create or coerce a protobuf request object. + # Quick check: 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.ListAvailableFeaturesRegionSslPoliciesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance( + request, compute.ListAvailableFeaturesRegionSslPoliciesRequest + ): + request = compute.ListAvailableFeaturesRegionSslPoliciesRequest(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_available_features] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch_unary( + self, + request: Union[compute.PatchRegionSslPolicyRequest, dict] = None, + *, + project: str = None, + region: 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]] = (), + ) -> compute.Operation: + r"""Patches the specified SSL policy with the data + included in the request. + + Args: + request (Union[google.cloud.compute_v1.types.PatchRegionSslPolicyRequest, dict]): + The request object. A request message for + RegionSslPolicies.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. + 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, region, 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.PatchRegionSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionSslPolicyRequest): + request = compute.PatchRegionSslPolicyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("ssl_policy", request.ssl_policy), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def patch( + self, + request: Union[compute.PatchRegionSslPolicyRequest, dict] = None, + *, + project: str = None, + region: 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.PatchRegionSslPolicyRequest, dict]): + The request object. A request message for + RegionSslPolicies.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. + 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, region, 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.PatchRegionSslPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.PatchRegionSslPolicyRequest): + request = compute.PatchRegionSslPolicyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("ssl_policy", request.ssl_policy), + ) + ), + ) + + # 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 + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-compute", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("RegionSslPoliciesClient",) diff --git a/google/cloud/compute_v1/services/region_ssl_policies/pagers.py b/google/cloud/compute_v1/services/region_ssl_policies/pagers.py new file mode 100644 index 000000000..1e01871e3 --- /dev/null +++ b/google/cloud/compute_v1/services/region_ssl_policies/pagers.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +# 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Sequence, + Tuple, + Optional, + Iterator, +) + +from google.cloud.compute_v1.types import compute + + +class ListPager: + """A pager for iterating through ``list`` requests. + + This class thinly wraps an initial + :class:`google.cloud.compute_v1.types.SslPoliciesList` object, and + provides an ``__iter__`` method to iterate through its + ``items`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``List`` requests and continue to iterate + through the ``items`` field on the + corresponding responses. + + All the usual :class:`google.cloud.compute_v1.types.SslPoliciesList` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., compute.SslPoliciesList], + request: compute.ListRegionSslPoliciesRequest, + response: compute.SslPoliciesList, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.compute_v1.types.ListRegionSslPoliciesRequest): + The initial request object. + response (google.cloud.compute_v1.types.SslPoliciesList): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = compute.ListRegionSslPoliciesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[compute.SslPoliciesList]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[compute.SslPolicy]: + for page in self.pages: + yield from page.items + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/google/cloud/compute_v1/services/region_ssl_policies/transports/__init__.py b/google/cloud/compute_v1/services/region_ssl_policies/transports/__init__.py new file mode 100644 index 000000000..ca9e96725 --- /dev/null +++ b/google/cloud/compute_v1/services/region_ssl_policies/transports/__init__.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import RegionSslPoliciesTransport +from .rest import RegionSslPoliciesRestTransport +from .rest import RegionSslPoliciesRestInterceptor + + +# Compile a registry of transports. +_transport_registry = OrderedDict() # type: Dict[str, Type[RegionSslPoliciesTransport]] +_transport_registry["rest"] = RegionSslPoliciesRestTransport + +__all__ = ( + "RegionSslPoliciesTransport", + "RegionSslPoliciesRestTransport", + "RegionSslPoliciesRestInterceptor", +) diff --git a/google/cloud/compute_v1/services/region_ssl_policies/transports/base.py b/google/cloud/compute_v1/services/region_ssl_policies/transports/base.py new file mode 100644 index 000000000..a3b787920 --- /dev/null +++ b/google/cloud/compute_v1/services/region_ssl_policies/transports/base.py @@ -0,0 +1,250 @@ +# -*- coding: utf-8 -*- +# 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 abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union +import pkg_resources + +import google.auth # type: ignore +import google.api_core +from google.api_core import exceptions as core_exceptions +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 +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( + gapic_version=pkg_resources.get_distribution( + "google-cloud-compute", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +class RegionSslPoliciesTransport(abc.ABC): + """Abstract transport class for RegionSslPolicies.""" + + AUTH_SCOPES = ( + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/cloud-platform", + ) + + DEFAULT_HOST: str = "compute.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: ga_credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + self._extended_operations_services: Dict[str, Any] = {} + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.delete: gapic_v1.method.wrap_method( + self.delete, + default_timeout=None, + client_info=client_info, + ), + self.get: gapic_v1.method.wrap_method( + self.get, + default_timeout=None, + client_info=client_info, + ), + self.insert: gapic_v1.method.wrap_method( + self.insert, + default_timeout=None, + client_info=client_info, + ), + self.list: gapic_v1.method.wrap_method( + self.list, + default_timeout=None, + client_info=client_info, + ), + self.list_available_features: gapic_v1.method.wrap_method( + self.list_available_features, + default_timeout=None, + client_info=client_info, + ), + self.patch: gapic_v1.method.wrap_method( + self.patch, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def delete( + self, + ) -> Callable[ + [compute.DeleteRegionSslPolicyRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + + @property + def get( + self, + ) -> Callable[ + [compute.GetRegionSslPolicyRequest], + Union[compute.SslPolicy, Awaitable[compute.SslPolicy]], + ]: + raise NotImplementedError() + + @property + def insert( + self, + ) -> Callable[ + [compute.InsertRegionSslPolicyRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + + @property + def list( + self, + ) -> Callable[ + [compute.ListRegionSslPoliciesRequest], + Union[compute.SslPoliciesList, Awaitable[compute.SslPoliciesList]], + ]: + raise NotImplementedError() + + @property + def list_available_features( + self, + ) -> Callable[ + [compute.ListAvailableFeaturesRegionSslPoliciesRequest], + Union[ + compute.SslPoliciesListAvailableFeaturesResponse, + Awaitable[compute.SslPoliciesListAvailableFeaturesResponse], + ], + ]: + raise NotImplementedError() + + @property + def patch( + self, + ) -> Callable[ + [compute.PatchRegionSslPolicyRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + 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__ = ("RegionSslPoliciesTransport",) diff --git a/google/cloud/compute_v1/services/region_ssl_policies/transports/rest.py b/google/cloud/compute_v1/services/region_ssl_policies/transports/rest.py new file mode 100644 index 000000000..5b63d0a40 --- /dev/null +++ b/google/cloud/compute_v1/services/region_ssl_policies/transports/rest.py @@ -0,0 +1,1006 @@ +# -*- coding: utf-8 -*- +# 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. +# + +from google.auth.transport.requests import AuthorizedSession # type: ignore +import json # type: ignore +import grpc # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.api_core import exceptions as core_exceptions +from google.api_core import retry as retries +from google.api_core import rest_helpers +from google.api_core import rest_streaming +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from requests import __version__ as requests_version +import dataclasses +import re +from typing import Callable, Dict, List, Optional, Sequence, Tuple, Union +import warnings + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + + +from google.cloud.compute_v1.types import compute + +from .base import ( + RegionSslPoliciesTransport, + DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, +) + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=requests_version, +) + + +class RegionSslPoliciesRestInterceptor: + """Interceptor for RegionSslPolicies. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the RegionSslPoliciesRestTransport. + + .. code-block:: python + class MyCustomRegionSslPoliciesInterceptor(RegionSslPoliciesRestInterceptor): + def pre_delete(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_delete(response): + logging.log(f"Received response: {response}") + + def pre_get(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get(response): + logging.log(f"Received response: {response}") + + def pre_insert(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_insert(response): + logging.log(f"Received response: {response}") + + def pre_list(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list(response): + logging.log(f"Received response: {response}") + + def pre_list_available_features(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list_available_features(response): + logging.log(f"Received response: {response}") + + def pre_patch(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_patch(response): + logging.log(f"Received response: {response}") + + transport = RegionSslPoliciesRestTransport(interceptor=MyCustomRegionSslPoliciesInterceptor()) + client = RegionSslPoliciesClient(transport=transport) + + + """ + + def pre_delete( + self, + request: compute.DeleteRegionSslPolicyRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.DeleteRegionSslPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionSslPolicies server. + """ + return request, metadata + + def post_delete(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for delete + + Override in a subclass to manipulate the response + after it is returned by the RegionSslPolicies server but before + it is returned to user code. + """ + return response + + def pre_get( + self, + request: compute.GetRegionSslPolicyRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.GetRegionSslPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionSslPolicies server. + """ + return request, metadata + + def post_get(self, response: compute.SslPolicy) -> compute.SslPolicy: + """Post-rpc interceptor for get + + Override in a subclass to manipulate the response + after it is returned by the RegionSslPolicies server but before + it is returned to user code. + """ + return response + + def pre_insert( + self, + request: compute.InsertRegionSslPolicyRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.InsertRegionSslPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for insert + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionSslPolicies server. + """ + return request, metadata + + def post_insert(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for insert + + Override in a subclass to manipulate the response + after it is returned by the RegionSslPolicies server but before + it is returned to user code. + """ + return response + + def pre_list( + self, + request: compute.ListRegionSslPoliciesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.ListRegionSslPoliciesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionSslPolicies server. + """ + return request, metadata + + def post_list(self, response: compute.SslPoliciesList) -> compute.SslPoliciesList: + """Post-rpc interceptor for list + + Override in a subclass to manipulate the response + after it is returned by the RegionSslPolicies server but before + it is returned to user code. + """ + return response + + def pre_list_available_features( + self, + request: compute.ListAvailableFeaturesRegionSslPoliciesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[ + compute.ListAvailableFeaturesRegionSslPoliciesRequest, Sequence[Tuple[str, str]] + ]: + """Pre-rpc interceptor for list_available_features + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionSslPolicies server. + """ + return request, metadata + + def post_list_available_features( + self, response: compute.SslPoliciesListAvailableFeaturesResponse + ) -> compute.SslPoliciesListAvailableFeaturesResponse: + """Post-rpc interceptor for list_available_features + + Override in a subclass to manipulate the response + after it is returned by the RegionSslPolicies server but before + it is returned to user code. + """ + return response + + def pre_patch( + self, + request: compute.PatchRegionSslPolicyRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.PatchRegionSslPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for patch + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionSslPolicies server. + """ + return request, metadata + + def post_patch(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for patch + + Override in a subclass to manipulate the response + after it is returned by the RegionSslPolicies server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class RegionSslPoliciesRestStub: + _session: AuthorizedSession + _host: str + _interceptor: RegionSslPoliciesRestInterceptor + + +class RegionSslPoliciesRestTransport(RegionSslPoliciesTransport): + """REST backend transport for RegionSslPolicies. + + The RegionSslPolicies API. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + + NOTE: This REST transport functionality is currently in a beta + state (preview). We welcome your feedback via an issue in this + library's source repository. Thank you! + """ + + def __init__( + self, + *, + host: str = "compute.googleapis.com", + credentials: ga_credentials.Credentials = None, + credentials_file: str = None, + scopes: Sequence[str] = None, + client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + interceptor: Optional[RegionSslPoliciesRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + NOTE: This REST transport functionality is currently in a beta + state (preview). We welcome your feedback via a GitHub issue in + this library's repository. Thank you! + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or RegionSslPoliciesRestInterceptor() + self._prep_wrapped_messages(client_info) + + class _Delete(RegionSslPoliciesRestStub): + def __hash__(self): + return hash("Delete") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.DeleteRegionSslPolicyRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the delete method over HTTP. + + Args: + request (~.compute.DeleteRegionSslPolicyRequest): + The request object. A request message for + RegionSslPolicies.Delete. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "delete", + "uri": "/compute/v1/projects/{project}/regions/{region}/sslPolicies/{ssl_policy}", + }, + ] + request, metadata = self._interceptor.pre_delete(request, metadata) + pb_request = compute.DeleteRegionSslPolicyRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_delete(resp) + return resp + + class _Get(RegionSslPoliciesRestStub): + def __hash__(self): + return hash("Get") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.GetRegionSslPolicyRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.SslPolicy: + r"""Call the get method over HTTP. + + Args: + request (~.compute.GetRegionSslPolicyRequest): + The request object. A request message for + RegionSslPolicies.Get. 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: + ~.compute.SslPolicy: + Represents an SSL Policy resource. + Use SSL policies to control the SSL + features, such as versions and cipher + suites, offered by an HTTPS or SSL Proxy + load balancer. For more information, + read SSL Policy Concepts. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/compute/v1/projects/{project}/regions/{region}/sslPolicies/{ssl_policy}", + }, + ] + request, metadata = self._interceptor.pre_get(request, metadata) + pb_request = compute.GetRegionSslPolicyRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.SslPolicy() + pb_resp = compute.SslPolicy.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get(resp) + return resp + + class _Insert(RegionSslPoliciesRestStub): + def __hash__(self): + return hash("Insert") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.InsertRegionSslPolicyRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the insert method over HTTP. + + Args: + request (~.compute.InsertRegionSslPolicyRequest): + The request object. A request message for + RegionSslPolicies.Insert. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/regions/{region}/sslPolicies", + "body": "ssl_policy_resource", + }, + ] + request, metadata = self._interceptor.pre_insert(request, metadata) + pb_request = compute.InsertRegionSslPolicyRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_insert(resp) + return resp + + class _List(RegionSslPoliciesRestStub): + def __hash__(self): + return hash("List") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.ListRegionSslPoliciesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.SslPoliciesList: + r"""Call the list method over HTTP. + + Args: + request (~.compute.ListRegionSslPoliciesRequest): + The request object. A request message for + RegionSslPolicies.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: + ~.compute.SslPoliciesList: + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/compute/v1/projects/{project}/regions/{region}/sslPolicies", + }, + ] + request, metadata = self._interceptor.pre_list(request, metadata) + pb_request = compute.ListRegionSslPoliciesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.SslPoliciesList() + pb_resp = compute.SslPoliciesList.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list(resp) + return resp + + class _ListAvailableFeatures(RegionSslPoliciesRestStub): + def __hash__(self): + return hash("ListAvailableFeatures") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.ListAvailableFeaturesRegionSslPoliciesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.SslPoliciesListAvailableFeaturesResponse: + r"""Call the list available features method over HTTP. + + Args: + request (~.compute.ListAvailableFeaturesRegionSslPoliciesRequest): + The request object. A request message for + RegionSslPolicies.ListAvailableFeatures. + 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: + ~.compute.SslPoliciesListAvailableFeaturesResponse: + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/compute/v1/projects/{project}/regions/{region}/sslPolicies/listAvailableFeatures", + }, + ] + request, metadata = self._interceptor.pre_list_available_features( + request, metadata + ) + pb_request = compute.ListAvailableFeaturesRegionSslPoliciesRequest.pb( + request + ) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.SslPoliciesListAvailableFeaturesResponse() + pb_resp = compute.SslPoliciesListAvailableFeaturesResponse.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list_available_features(resp) + return resp + + class _Patch(RegionSslPoliciesRestStub): + def __hash__(self): + return hash("Patch") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.PatchRegionSslPolicyRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the patch method over HTTP. + + Args: + request (~.compute.PatchRegionSslPolicyRequest): + The request object. A request message for + RegionSslPolicies.Patch. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "patch", + "uri": "/compute/v1/projects/{project}/regions/{region}/sslPolicies/{ssl_policy}", + "body": "ssl_policy_resource", + }, + ] + request, metadata = self._interceptor.pre_patch(request, metadata) + pb_request = compute.PatchRegionSslPolicyRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_patch(resp) + return resp + + @property + def delete( + self, + ) -> Callable[[compute.DeleteRegionSslPolicyRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._Delete(self._session, self._host, self._interceptor) # type: ignore + + @property + def get(self) -> Callable[[compute.GetRegionSslPolicyRequest], compute.SslPolicy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._Get(self._session, self._host, self._interceptor) # type: ignore + + @property + def insert( + self, + ) -> Callable[[compute.InsertRegionSslPolicyRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._Insert(self._session, self._host, self._interceptor) # type: ignore + + @property + def list( + self, + ) -> Callable[[compute.ListRegionSslPoliciesRequest], compute.SslPoliciesList]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._List(self._session, self._host, self._interceptor) # type: ignore + + @property + def list_available_features( + self, + ) -> Callable[ + [compute.ListAvailableFeaturesRegionSslPoliciesRequest], + compute.SslPoliciesListAvailableFeaturesResponse, + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._ListAvailableFeatures(self._session, self._host, self._interceptor) # type: ignore + + @property + def patch( + self, + ) -> Callable[[compute.PatchRegionSslPolicyRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._Patch(self._session, self._host, self._interceptor) # type: ignore + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__ = ("RegionSslPoliciesRestTransport",) 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 fcf3a463e..3388f44a7 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 @@ -409,7 +409,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -509,7 +509,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -619,7 +619,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -707,7 +707,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -817,7 +817,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 68262f132..eed3e7031 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 @@ -470,7 +470,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -569,7 +569,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -679,7 +679,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -769,7 +769,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -879,7 +879,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -994,7 +994,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1105,7 +1105,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/region_target_tcp_proxies/__init__.py b/google/cloud/compute_v1/services/region_target_tcp_proxies/__init__.py new file mode 100644 index 000000000..8d09c6dc9 --- /dev/null +++ b/google/cloud/compute_v1/services/region_target_tcp_proxies/__init__.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# 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. +# +from .client import RegionTargetTcpProxiesClient + +__all__ = ("RegionTargetTcpProxiesClient",) diff --git a/google/cloud/compute_v1/services/region_target_tcp_proxies/client.py b/google/cloud/compute_v1/services/region_target_tcp_proxies/client.py new file mode 100644 index 000000000..e99fa919e --- /dev/null +++ b/google/cloud/compute_v1/services/region_target_tcp_proxies/client.py @@ -0,0 +1,1098 @@ +# -*- coding: utf-8 -*- +# 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. +# +from collections import OrderedDict +import functools +import os +import re +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 +from google.auth.transport import mtls # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth.exceptions import MutualTLSChannelError # type: ignore +from google.oauth2 import service_account # type: ignore + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +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_tcp_proxies import pagers +from google.cloud.compute_v1.types import compute +from .transports.base import RegionTargetTcpProxiesTransport, DEFAULT_CLIENT_INFO +from .transports.rest import RegionTargetTcpProxiesRestTransport + + +class RegionTargetTcpProxiesClientMeta(type): + """Metaclass for the RegionTargetTcpProxies client. + + This provides class-level methods for building and retrieving + support objects (e.g. transport) without polluting the client instance + objects. + """ + + _transport_registry = ( + OrderedDict() + ) # type: Dict[str, Type[RegionTargetTcpProxiesTransport]] + _transport_registry["rest"] = RegionTargetTcpProxiesRestTransport + + def get_transport_class( + cls, + label: str = None, + ) -> Type[RegionTargetTcpProxiesTransport]: + """Returns an appropriate transport class. + + Args: + label: The name of the desired transport. If none is + provided, then the first transport in the registry is used. + + Returns: + The transport class to use. + """ + # If a specific transport is requested, return that one. + if label: + return cls._transport_registry[label] + + # No transport is requested; return the default (that is, the first one + # in the dictionary). + return next(iter(cls._transport_registry.values())) + + +class RegionTargetTcpProxiesClient(metaclass=RegionTargetTcpProxiesClientMeta): + """The RegionTargetTcpProxies API.""" + + @staticmethod + def _get_default_mtls_endpoint(api_endpoint): + """Converts api endpoint to mTLS endpoint. + + Convert "*.sandbox.googleapis.com" and "*.googleapis.com" to + "*.mtls.sandbox.googleapis.com" and "*.mtls.googleapis.com" respectively. + Args: + api_endpoint (Optional[str]): the api endpoint to convert. + Returns: + str: converted mTLS api endpoint. + """ + if not api_endpoint: + return api_endpoint + + mtls_endpoint_re = re.compile( + r"(?P[^.]+)(?P\.mtls)?(?P\.sandbox)?(?P\.googleapis\.com)?" + ) + + m = mtls_endpoint_re.match(api_endpoint) + name, mtls, sandbox, googledomain = m.groups() + if mtls or not googledomain: + return api_endpoint + + if sandbox: + return api_endpoint.replace( + "sandbox.googleapis.com", "mtls.sandbox.googleapis.com" + ) + + return api_endpoint.replace(".googleapis.com", ".mtls.googleapis.com") + + DEFAULT_ENDPOINT = "compute.googleapis.com" + DEFAULT_MTLS_ENDPOINT = _get_default_mtls_endpoint.__func__( # type: ignore + DEFAULT_ENDPOINT + ) + + @classmethod + def from_service_account_info(cls, info: dict, *args, **kwargs): + """Creates an instance of this client using the provided credentials + info. + + Args: + info (dict): The service account private key info. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + RegionTargetTcpProxiesClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_info(info) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + @classmethod + def from_service_account_file(cls, filename: str, *args, **kwargs): + """Creates an instance of this client using the provided credentials + file. + + Args: + filename (str): The path to the service account private key json + file. + args: Additional arguments to pass to the constructor. + kwargs: Additional arguments to pass to the constructor. + + Returns: + RegionTargetTcpProxiesClient: The constructed client. + """ + credentials = service_account.Credentials.from_service_account_file(filename) + kwargs["credentials"] = credentials + return cls(*args, **kwargs) + + from_service_account_json = from_service_account_file + + @property + def transport(self) -> RegionTargetTcpProxiesTransport: + """Returns the transport used by the client instance. + + Returns: + RegionTargetTcpProxiesTransport: The transport used by the client + instance. + """ + return self._transport + + @staticmethod + def common_billing_account_path( + billing_account: str, + ) -> str: + """Returns a fully-qualified billing_account string.""" + return "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + + @staticmethod + def parse_common_billing_account_path(path: str) -> Dict[str, str]: + """Parse a billing_account path into its component segments.""" + m = re.match(r"^billingAccounts/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_folder_path( + folder: str, + ) -> str: + """Returns a fully-qualified folder string.""" + return "folders/{folder}".format( + folder=folder, + ) + + @staticmethod + def parse_common_folder_path(path: str) -> Dict[str, str]: + """Parse a folder path into its component segments.""" + m = re.match(r"^folders/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_organization_path( + organization: str, + ) -> str: + """Returns a fully-qualified organization string.""" + return "organizations/{organization}".format( + organization=organization, + ) + + @staticmethod + def parse_common_organization_path(path: str) -> Dict[str, str]: + """Parse a organization path into its component segments.""" + m = re.match(r"^organizations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_project_path( + project: str, + ) -> str: + """Returns a fully-qualified project string.""" + return "projects/{project}".format( + project=project, + ) + + @staticmethod + def parse_common_project_path(path: str) -> Dict[str, str]: + """Parse a project path into its component segments.""" + m = re.match(r"^projects/(?P.+?)$", path) + return m.groupdict() if m else {} + + @staticmethod + def common_location_path( + project: str, + location: str, + ) -> str: + """Returns a fully-qualified location string.""" + return "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + + @staticmethod + def parse_common_location_path(path: str) -> Dict[str, str]: + """Parse a location path into its component segments.""" + m = re.match(r"^projects/(?P.+?)/locations/(?P.+?)$", path) + return m.groupdict() if m else {} + + @classmethod + def get_mtls_endpoint_and_cert_source( + cls, client_options: Optional[client_options_lib.ClientOptions] = None + ): + """Return the API endpoint and client cert source for mutual TLS. + + The client cert source is determined in the following order: + (1) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is not "true", the + client cert source is None. + (2) if `client_options.client_cert_source` is provided, use the provided one; if the + default client cert source exists, use the default one; otherwise the client cert + source is None. + + The API endpoint is determined in the following order: + (1) if `client_options.api_endpoint` if provided, use the provided one. + (2) if `GOOGLE_API_USE_CLIENT_CERTIFICATE` environment variable is "always", use the + default mTLS endpoint; if the environment variabel is "never", use the default API + endpoint; otherwise if client cert source exists, use the default mTLS endpoint, otherwise + use the default API endpoint. + + More details can be found at https://google.aip.dev/auth/4114. + + Args: + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. Only the `api_endpoint` and `client_cert_source` properties may be used + in this method. + + Returns: + Tuple[str, Callable[[], Tuple[bytes, bytes]]]: returns the API endpoint and the + client cert source to use. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If any errors happen. + """ + if client_options is None: + client_options = client_options_lib.ClientOptions() + use_client_cert = os.getenv("GOOGLE_API_USE_CLIENT_CERTIFICATE", "false") + use_mtls_endpoint = os.getenv("GOOGLE_API_USE_MTLS_ENDPOINT", "auto") + if use_client_cert not in ("true", "false"): + raise ValueError( + "Environment variable `GOOGLE_API_USE_CLIENT_CERTIFICATE` must be either `true` or `false`" + ) + if use_mtls_endpoint not in ("auto", "never", "always"): + raise MutualTLSChannelError( + "Environment variable `GOOGLE_API_USE_MTLS_ENDPOINT` must be `never`, `auto` or `always`" + ) + + # Figure out the client cert source to use. + client_cert_source = None + if use_client_cert == "true": + if client_options.client_cert_source: + client_cert_source = client_options.client_cert_source + elif mtls.has_default_client_cert_source(): + client_cert_source = mtls.default_client_cert_source() + + # Figure out which api endpoint to use. + if client_options.api_endpoint is not None: + api_endpoint = client_options.api_endpoint + elif use_mtls_endpoint == "always" or ( + use_mtls_endpoint == "auto" and client_cert_source + ): + api_endpoint = cls.DEFAULT_MTLS_ENDPOINT + else: + api_endpoint = cls.DEFAULT_ENDPOINT + + return api_endpoint, client_cert_source + + def __init__( + self, + *, + credentials: Optional[ga_credentials.Credentials] = None, + transport: Union[str, RegionTargetTcpProxiesTransport, None] = None, + client_options: Optional[client_options_lib.ClientOptions] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + ) -> None: + """Instantiates the region target tcp proxies client. + + Args: + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + transport (Union[str, RegionTargetTcpProxiesTransport]): The + transport to use. If set to None, a transport is chosen + automatically. + NOTE: "rest" transport functionality is currently in a + beta state (preview). We welcome your feedback via an + issue in this library's source repository. + client_options (google.api_core.client_options.ClientOptions): Custom options for the + client. It won't take effect if a ``transport`` instance is provided. + (1) The ``api_endpoint`` property can be used to override the + default endpoint provided by the client. GOOGLE_API_USE_MTLS_ENDPOINT + environment variable can also be used to override the endpoint: + "always" (always use the default mTLS endpoint), "never" (always + use the default regular endpoint) and "auto" (auto switch to the + default mTLS endpoint if client certificate is present, this is + the default value). However, the ``api_endpoint`` property takes + precedence if provided. + (2) If GOOGLE_API_USE_CLIENT_CERTIFICATE environment variable + is "true", then the ``client_cert_source`` property can be used + to provide client certificate for mutual TLS transport. If + not provided, the default SSL client certificate will be used if + present. If GOOGLE_API_USE_CLIENT_CERTIFICATE is "false" or not + set, no client certificate will be used. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + + Raises: + google.auth.exceptions.MutualTLSChannelError: If mutual TLS transport + creation failed for any reason. + """ + if isinstance(client_options, dict): + client_options = client_options_lib.from_dict(client_options) + if client_options is None: + client_options = client_options_lib.ClientOptions() + + api_endpoint, client_cert_source_func = self.get_mtls_endpoint_and_cert_source( + client_options + ) + + api_key_value = getattr(client_options, "api_key", None) + if api_key_value and credentials: + raise ValueError( + "client_options.api_key and credentials are mutually exclusive" + ) + + # Save or instantiate the transport. + # Ordinarily, we provide the transport, but allowing a custom transport + # instance provides an extensibility point for unusual situations. + if isinstance(transport, RegionTargetTcpProxiesTransport): + # transport is a RegionTargetTcpProxiesTransport instance. + if credentials or client_options.credentials_file or api_key_value: + raise ValueError( + "When providing a transport instance, " + "provide its credentials directly." + ) + if client_options.scopes: + raise ValueError( + "When providing a transport instance, provide its scopes " + "directly." + ) + self._transport = transport + else: + import google.auth._default # type: ignore + + if api_key_value and hasattr( + google.auth._default, "get_api_key_credentials" + ): + credentials = google.auth._default.get_api_key_credentials( + api_key_value + ) + + Transport = type(self).get_transport_class(transport) + self._transport = Transport( + credentials=credentials, + credentials_file=client_options.credentials_file, + host=api_endpoint, + scopes=client_options.scopes, + client_cert_source_for_mtls=client_cert_source_func, + quota_project_id=client_options.quota_project_id, + client_info=client_info, + always_use_jwt_access=True, + api_audience=client_options.api_audience, + ) + + def delete_unary( + self, + request: Union[compute.DeleteRegionTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_tcp_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Deletes the specified TargetTcpProxy resource. + + Args: + request (Union[google.cloud.compute_v1.types.DeleteRegionTargetTcpProxyRequest, dict]): + The request object. A request message for + RegionTargetTcpProxies.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_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, region, 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.DeleteRegionTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionTargetTcpProxyRequest): + request = compute.DeleteRegionTargetTcpProxyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("target_tcp_proxy", request.target_tcp_proxy), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def delete( + self, + request: Union[compute.DeleteRegionTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + region: 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.DeleteRegionTargetTcpProxyRequest, dict]): + The request object. A request message for + RegionTargetTcpProxies.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_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, region, 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.DeleteRegionTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.DeleteRegionTargetTcpProxyRequest): + request = compute.DeleteRegionTargetTcpProxyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("target_tcp_proxy", request.target_tcp_proxy), + ) + ), + ) + + # 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.GetRegionTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_tcp_proxy: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.TargetTcpProxy: + r"""Returns the specified TargetTcpProxy resource. + + Args: + request (Union[google.cloud.compute_v1.types.GetRegionTargetTcpProxyRequest, dict]): + The request object. A request message for + RegionTargetTcpProxies.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_tcp_proxy (str): + Name of the TargetTcpProxy resource + to return. + + 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.cloud.compute_v1.types.TargetTcpProxy: + Represents a Target TCP Proxy + resource. A target TCP proxy is a + component of a TCP Proxy load balancer. + Global forwarding rules reference target + TCP proxy, and the target proxy then + references an external backend service. + For more information, read TCP Proxy + Load Balancing overview. + + """ + # Create or coerce a protobuf request object. + # Quick check: 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_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.GetRegionTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.GetRegionTargetTcpProxyRequest): + request = compute.GetRegionTargetTcpProxyRequest(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_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.get] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("target_tcp_proxy", request.target_tcp_proxy), + ) + ), + ) + + # 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.InsertRegionTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + region: str = None, + target_tcp_proxy_resource: compute.TargetTcpProxy = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Creates a TargetTcpProxy resource in the specified + project and region using the data included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionTargetTcpProxyRequest, dict]): + The request object. A request message for + RegionTargetTcpProxies.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_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. + # Quick check: 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_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.InsertRegionTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionTargetTcpProxyRequest): + request = compute.InsertRegionTargetTcpProxyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ) + ), + ) + + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) + + # Done; return the response. + return response + + def insert( + self, + request: Union[compute.InsertRegionTargetTcpProxyRequest, dict] = None, + *, + project: str = None, + region: 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 and region using the data included in the + request. + + Args: + request (Union[google.cloud.compute_v1.types.InsertRegionTargetTcpProxyRequest, dict]): + The request object. A request message for + RegionTargetTcpProxies.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_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. + # Quick check: 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_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.InsertRegionTargetTcpProxyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.InsertRegionTargetTcpProxyRequest): + request = compute.InsertRegionTargetTcpProxyRequest(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_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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ) + ), + ) + + # 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.ListRegionTargetTcpProxiesRequest, 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 TargetTcpProxy resources + available to the specified project in a given region. + + Args: + request (Union[google.cloud.compute_v1.types.ListRegionTargetTcpProxiesRequest, dict]): + The request object. A request message for + RegionTargetTcpProxies.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_target_tcp_proxies.pagers.ListPager: + Contains a list of TargetTcpProxy + 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.ListRegionTargetTcpProxiesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.ListRegionTargetTcpProxiesRequest): + request = compute.ListRegionTargetTcpProxiesRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ) + ), + ) + + # 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 __enter__(self): + return self + + def __exit__(self, type, value, traceback): + """Releases underlying transport's resources. + + .. warning:: + ONLY use as a context manager if the transport is NOT shared + with other clients! Exiting the with block will CLOSE the transport + and may cause errors in other clients! + """ + self.transport.close() + + +try: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=pkg_resources.get_distribution( + "google-cloud-compute", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +__all__ = ("RegionTargetTcpProxiesClient",) diff --git a/google/cloud/compute_v1/services/region_target_tcp_proxies/pagers.py b/google/cloud/compute_v1/services/region_target_tcp_proxies/pagers.py new file mode 100644 index 000000000..b7cba907f --- /dev/null +++ b/google/cloud/compute_v1/services/region_target_tcp_proxies/pagers.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +# 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. +# +from typing import ( + Any, + AsyncIterator, + Awaitable, + Callable, + Sequence, + Tuple, + Optional, + Iterator, +) + +from google.cloud.compute_v1.types import compute + + +class ListPager: + """A pager for iterating through ``list`` requests. + + This class thinly wraps an initial + :class:`google.cloud.compute_v1.types.TargetTcpProxyList` object, and + provides an ``__iter__`` method to iterate through its + ``items`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``List`` requests and continue to iterate + through the ``items`` field on the + corresponding responses. + + All the usual :class:`google.cloud.compute_v1.types.TargetTcpProxyList` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., compute.TargetTcpProxyList], + request: compute.ListRegionTargetTcpProxiesRequest, + response: compute.TargetTcpProxyList, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.compute_v1.types.ListRegionTargetTcpProxiesRequest): + The initial request object. + response (google.cloud.compute_v1.types.TargetTcpProxyList): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = compute.ListRegionTargetTcpProxiesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[compute.TargetTcpProxyList]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[compute.TargetTcpProxy]: + for page in self.pages: + yield from page.items + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) diff --git a/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/__init__.py b/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/__init__.py new file mode 100644 index 000000000..83b2410f3 --- /dev/null +++ b/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/__init__.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# 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. +# +from collections import OrderedDict +from typing import Dict, Type + +from .base import RegionTargetTcpProxiesTransport +from .rest import RegionTargetTcpProxiesRestTransport +from .rest import RegionTargetTcpProxiesRestInterceptor + + +# Compile a registry of transports. +_transport_registry = ( + OrderedDict() +) # type: Dict[str, Type[RegionTargetTcpProxiesTransport]] +_transport_registry["rest"] = RegionTargetTcpProxiesRestTransport + +__all__ = ( + "RegionTargetTcpProxiesTransport", + "RegionTargetTcpProxiesRestTransport", + "RegionTargetTcpProxiesRestInterceptor", +) diff --git a/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/base.py b/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/base.py new file mode 100644 index 000000000..3dc62b348 --- /dev/null +++ b/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/base.py @@ -0,0 +1,219 @@ +# -*- coding: utf-8 -*- +# 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 abc +from typing import Awaitable, Callable, Dict, Optional, Sequence, Union +import pkg_resources + +import google.auth # type: ignore +import google.api_core +from google.api_core import exceptions as core_exceptions +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 +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( + gapic_version=pkg_resources.get_distribution( + "google-cloud-compute", + ).version, + ) +except pkg_resources.DistributionNotFound: + DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo() + + +class RegionTargetTcpProxiesTransport(abc.ABC): + """Abstract transport class for RegionTargetTcpProxies.""" + + AUTH_SCOPES = ( + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/cloud-platform", + ) + + DEFAULT_HOST: str = "compute.googleapis.com" + + def __init__( + self, + *, + host: str = DEFAULT_HOST, + credentials: ga_credentials.Credentials = None, + credentials_file: Optional[str] = None, + scopes: Optional[Sequence[str]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + api_audience: Optional[str] = None, + **kwargs, + ) -> None: + """Instantiate the transport. + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is mutually exclusive with credentials. + scopes (Optional[Sequence[str]]): A list of scopes. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you're developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + """ + self._extended_operations_services: Dict[str, Any] = {} + + scopes_kwargs = {"scopes": scopes, "default_scopes": self.AUTH_SCOPES} + + # Save the scopes. + self._scopes = scopes + + # If no credentials are provided, then determine the appropriate + # defaults. + if credentials and credentials_file: + raise core_exceptions.DuplicateCredentialArgs( + "'credentials_file' and 'credentials' are mutually exclusive" + ) + + if credentials_file is not None: + credentials, _ = google.auth.load_credentials_from_file( + credentials_file, **scopes_kwargs, quota_project_id=quota_project_id + ) + elif credentials is None: + credentials, _ = google.auth.default( + **scopes_kwargs, quota_project_id=quota_project_id + ) + # Don't apply audience if the credentials file passed from user. + if hasattr(credentials, "with_gdch_audience"): + credentials = credentials.with_gdch_audience( + api_audience if api_audience else host + ) + + # If the credentials are service account credentials, then always try to use self signed JWT. + if ( + always_use_jwt_access + and isinstance(credentials, service_account.Credentials) + and hasattr(service_account.Credentials, "with_always_use_jwt_access") + ): + credentials = credentials.with_always_use_jwt_access(True) + + # Save the credentials. + self._credentials = credentials + + # Save the hostname. Default to port 443 (HTTPS) if none is specified. + if ":" not in host: + host += ":443" + self._host = host + + def _prep_wrapped_messages(self, client_info): + # Precompute the wrapped methods. + self._wrapped_methods = { + self.delete: gapic_v1.method.wrap_method( + self.delete, + default_timeout=None, + client_info=client_info, + ), + self.get: gapic_v1.method.wrap_method( + self.get, + default_timeout=None, + client_info=client_info, + ), + self.insert: gapic_v1.method.wrap_method( + self.insert, + default_timeout=None, + client_info=client_info, + ), + self.list: gapic_v1.method.wrap_method( + self.list, + default_timeout=None, + client_info=client_info, + ), + } + + def close(self): + """Closes resources associated with the transport. + + .. warning:: + Only call this method if the transport is NOT shared + with other clients - this may cause errors in other clients! + """ + raise NotImplementedError() + + @property + def delete( + self, + ) -> Callable[ + [compute.DeleteRegionTargetTcpProxyRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + + @property + def get( + self, + ) -> Callable[ + [compute.GetRegionTargetTcpProxyRequest], + Union[compute.TargetTcpProxy, Awaitable[compute.TargetTcpProxy]], + ]: + raise NotImplementedError() + + @property + def insert( + self, + ) -> Callable[ + [compute.InsertRegionTargetTcpProxyRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + + @property + def list( + self, + ) -> Callable[ + [compute.ListRegionTargetTcpProxiesRequest], + Union[compute.TargetTcpProxyList, Awaitable[compute.TargetTcpProxyList]], + ]: + 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__ = ("RegionTargetTcpProxiesTransport",) diff --git a/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/rest.py b/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/rest.py new file mode 100644 index 000000000..73aea055a --- /dev/null +++ b/google/cloud/compute_v1/services/region_target_tcp_proxies/transports/rest.py @@ -0,0 +1,735 @@ +# -*- coding: utf-8 -*- +# 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. +# + +from google.auth.transport.requests import AuthorizedSession # type: ignore +import json # type: ignore +import grpc # type: ignore +from google.auth.transport.grpc import SslCredentials # type: ignore +from google.auth import credentials as ga_credentials # type: ignore +from google.api_core import exceptions as core_exceptions +from google.api_core import retry as retries +from google.api_core import rest_helpers +from google.api_core import rest_streaming +from google.api_core import path_template +from google.api_core import gapic_v1 + +from google.protobuf import json_format +from requests import __version__ as requests_version +import dataclasses +import re +from typing import Callable, Dict, List, Optional, Sequence, Tuple, Union +import warnings + +try: + OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault] +except AttributeError: # pragma: NO COVER + OptionalRetry = Union[retries.Retry, object] # type: ignore + + +from google.cloud.compute_v1.types import compute + +from .base import ( + RegionTargetTcpProxiesTransport, + DEFAULT_CLIENT_INFO as BASE_DEFAULT_CLIENT_INFO, +) + + +DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( + gapic_version=BASE_DEFAULT_CLIENT_INFO.gapic_version, + grpc_version=None, + rest_version=requests_version, +) + + +class RegionTargetTcpProxiesRestInterceptor: + """Interceptor for RegionTargetTcpProxies. + + Interceptors are used to manipulate requests, request metadata, and responses + in arbitrary ways. + Example use cases include: + * Logging + * Verifying requests according to service or custom semantics + * Stripping extraneous information from responses + + These use cases and more can be enabled by injecting an + instance of a custom subclass when constructing the RegionTargetTcpProxiesRestTransport. + + .. code-block:: python + class MyCustomRegionTargetTcpProxiesInterceptor(RegionTargetTcpProxiesRestInterceptor): + def pre_delete(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_delete(response): + logging.log(f"Received response: {response}") + + def pre_get(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_get(response): + logging.log(f"Received response: {response}") + + def pre_insert(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_insert(response): + logging.log(f"Received response: {response}") + + def pre_list(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_list(response): + logging.log(f"Received response: {response}") + + transport = RegionTargetTcpProxiesRestTransport(interceptor=MyCustomRegionTargetTcpProxiesInterceptor()) + client = RegionTargetTcpProxiesClient(transport=transport) + + + """ + + def pre_delete( + self, + request: compute.DeleteRegionTargetTcpProxyRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.DeleteRegionTargetTcpProxyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for delete + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionTargetTcpProxies server. + """ + return request, metadata + + def post_delete(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for delete + + Override in a subclass to manipulate the response + after it is returned by the RegionTargetTcpProxies server but before + it is returned to user code. + """ + return response + + def pre_get( + self, + request: compute.GetRegionTargetTcpProxyRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.GetRegionTargetTcpProxyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for get + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionTargetTcpProxies server. + """ + return request, metadata + + def post_get(self, response: compute.TargetTcpProxy) -> compute.TargetTcpProxy: + """Post-rpc interceptor for get + + Override in a subclass to manipulate the response + after it is returned by the RegionTargetTcpProxies server but before + it is returned to user code. + """ + return response + + def pre_insert( + self, + request: compute.InsertRegionTargetTcpProxyRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.InsertRegionTargetTcpProxyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for insert + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionTargetTcpProxies server. + """ + return request, metadata + + def post_insert(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for insert + + Override in a subclass to manipulate the response + after it is returned by the RegionTargetTcpProxies server but before + it is returned to user code. + """ + return response + + def pre_list( + self, + request: compute.ListRegionTargetTcpProxiesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.ListRegionTargetTcpProxiesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for list + + Override in a subclass to manipulate the request or metadata + before they are sent to the RegionTargetTcpProxies server. + """ + return request, metadata + + def post_list( + self, response: compute.TargetTcpProxyList + ) -> compute.TargetTcpProxyList: + """Post-rpc interceptor for list + + Override in a subclass to manipulate the response + after it is returned by the RegionTargetTcpProxies server but before + it is returned to user code. + """ + return response + + +@dataclasses.dataclass +class RegionTargetTcpProxiesRestStub: + _session: AuthorizedSession + _host: str + _interceptor: RegionTargetTcpProxiesRestInterceptor + + +class RegionTargetTcpProxiesRestTransport(RegionTargetTcpProxiesTransport): + """REST backend transport for RegionTargetTcpProxies. + + The RegionTargetTcpProxies API. + + This class defines the same methods as the primary client, so the + primary client can load the underlying transport implementation + and call it. + + It sends JSON representations of protocol buffers over HTTP/1.1 + + NOTE: This REST transport functionality is currently in a beta + state (preview). We welcome your feedback via an issue in this + library's source repository. Thank you! + """ + + def __init__( + self, + *, + host: str = "compute.googleapis.com", + credentials: ga_credentials.Credentials = None, + credentials_file: str = None, + scopes: Sequence[str] = None, + client_cert_source_for_mtls: Callable[[], Tuple[bytes, bytes]] = None, + quota_project_id: Optional[str] = None, + client_info: gapic_v1.client_info.ClientInfo = DEFAULT_CLIENT_INFO, + always_use_jwt_access: Optional[bool] = False, + url_scheme: str = "https", + interceptor: Optional[RegionTargetTcpProxiesRestInterceptor] = None, + api_audience: Optional[str] = None, + ) -> None: + """Instantiate the transport. + + NOTE: This REST transport functionality is currently in a beta + state (preview). We welcome your feedback via a GitHub issue in + this library's repository. Thank you! + + Args: + host (Optional[str]): + The hostname to connect to. + credentials (Optional[google.auth.credentials.Credentials]): The + authorization credentials to attach to requests. These + credentials identify the application to the service; if none + are specified, the client will attempt to ascertain the + credentials from the environment. + + credentials_file (Optional[str]): A file with credentials that can + be loaded with :func:`google.auth.load_credentials_from_file`. + This argument is ignored if ``channel`` is provided. + scopes (Optional(Sequence[str])): A list of scopes. This argument is + ignored if ``channel`` is provided. + client_cert_source_for_mtls (Callable[[], Tuple[bytes, bytes]]): Client + certificate to configure mutual TLS HTTP channel. It is ignored + if ``channel`` is provided. + quota_project_id (Optional[str]): An optional project to use for billing + and quota. + client_info (google.api_core.gapic_v1.client_info.ClientInfo): + The client info used to send a user-agent string along with + API requests. If ``None``, then default info will be used. + Generally, you only need to set this if you are developing + your own client library. + always_use_jwt_access (Optional[bool]): Whether self signed JWT should + be used for service account credentials. + url_scheme: the protocol scheme for the API endpoint. Normally + "https", but for testing or local servers, + "http" can be specified. + """ + # Run the base constructor + # TODO(yon-mg): resolve other ctor params i.e. scopes, quota, etc. + # TODO: When custom host (api_endpoint) is set, `scopes` must *also* be set on the + # credentials object + maybe_url_match = re.match("^(?Phttp(?:s)?://)?(?P.*)$", host) + if maybe_url_match is None: + raise ValueError( + f"Unexpected hostname structure: {host}" + ) # pragma: NO COVER + + url_match_items = maybe_url_match.groupdict() + + host = f"{url_scheme}://{host}" if not url_match_items["scheme"] else host + + super().__init__( + host=host, + credentials=credentials, + client_info=client_info, + always_use_jwt_access=always_use_jwt_access, + api_audience=api_audience, + ) + self._session = AuthorizedSession( + self._credentials, default_host=self.DEFAULT_HOST + ) + if client_cert_source_for_mtls: + self._session.configure_mtls_channel(client_cert_source_for_mtls) + self._interceptor = interceptor or RegionTargetTcpProxiesRestInterceptor() + self._prep_wrapped_messages(client_info) + + class _Delete(RegionTargetTcpProxiesRestStub): + def __hash__(self): + return hash("Delete") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.DeleteRegionTargetTcpProxyRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the delete method over HTTP. + + Args: + request (~.compute.DeleteRegionTargetTcpProxyRequest): + The request object. A request message for + RegionTargetTcpProxies.Delete. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "delete", + "uri": "/compute/v1/projects/{project}/regions/{region}/targetTcpProxies/{target_tcp_proxy}", + }, + ] + request, metadata = self._interceptor.pre_delete(request, metadata) + pb_request = compute.DeleteRegionTargetTcpProxyRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_delete(resp) + return resp + + class _Get(RegionTargetTcpProxiesRestStub): + def __hash__(self): + return hash("Get") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.GetRegionTargetTcpProxyRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.TargetTcpProxy: + r"""Call the get method over HTTP. + + Args: + request (~.compute.GetRegionTargetTcpProxyRequest): + The request object. A request message for + RegionTargetTcpProxies.Get. 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: + ~.compute.TargetTcpProxy: + Represents a Target TCP Proxy + resource. A target TCP proxy is a + component of a TCP Proxy load balancer. + Global forwarding rules reference target + TCP proxy, and the target proxy then + references an external backend service. + For more information, read TCP Proxy + Load Balancing overview. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/compute/v1/projects/{project}/regions/{region}/targetTcpProxies/{target_tcp_proxy}", + }, + ] + request, metadata = self._interceptor.pre_get(request, metadata) + pb_request = compute.GetRegionTargetTcpProxyRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.TargetTcpProxy() + pb_resp = compute.TargetTcpProxy.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_get(resp) + return resp + + class _Insert(RegionTargetTcpProxiesRestStub): + def __hash__(self): + return hash("Insert") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.InsertRegionTargetTcpProxyRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the insert method over HTTP. + + Args: + request (~.compute.InsertRegionTargetTcpProxyRequest): + The request object. A request message for + RegionTargetTcpProxies.Insert. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/regions/{region}/targetTcpProxies", + "body": "target_tcp_proxy_resource", + }, + ] + request, metadata = self._interceptor.pre_insert(request, metadata) + pb_request = compute.InsertRegionTargetTcpProxyRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_insert(resp) + return resp + + class _List(RegionTargetTcpProxiesRestStub): + def __hash__(self): + return hash("List") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.ListRegionTargetTcpProxiesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.TargetTcpProxyList: + r"""Call the list method over HTTP. + + Args: + request (~.compute.ListRegionTargetTcpProxiesRequest): + The request object. A request message for + RegionTargetTcpProxies.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: + ~.compute.TargetTcpProxyList: + Contains a list of TargetTcpProxy + resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/compute/v1/projects/{project}/regions/{region}/targetTcpProxies", + }, + ] + request, metadata = self._interceptor.pre_list(request, metadata) + pb_request = compute.ListRegionTargetTcpProxiesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.TargetTcpProxyList() + pb_resp = compute.TargetTcpProxyList.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_list(resp) + return resp + + @property + def delete( + self, + ) -> Callable[[compute.DeleteRegionTargetTcpProxyRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._Delete(self._session, self._host, self._interceptor) # type: ignore + + @property + def get( + self, + ) -> Callable[[compute.GetRegionTargetTcpProxyRequest], compute.TargetTcpProxy]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._Get(self._session, self._host, self._interceptor) # type: ignore + + @property + def insert( + self, + ) -> Callable[[compute.InsertRegionTargetTcpProxyRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._Insert(self._session, self._host, self._interceptor) # type: ignore + + @property + def list( + self, + ) -> Callable[ + [compute.ListRegionTargetTcpProxiesRequest], compute.TargetTcpProxyList + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._List(self._session, self._host, self._interceptor) # type: ignore + + @property + def kind(self) -> str: + return "rest" + + def close(self): + self._session.close() + + +__all__ = ("RegionTargetTcpProxiesRestTransport",) 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 edeec834e..c5d959480 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 @@ -463,7 +463,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -571,7 +571,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -681,7 +681,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -769,7 +769,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -879,7 +879,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -990,7 +990,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1086,7 +1086,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/regions/transports/rest.py b/google/cloud/compute_v1/services/regions/transports/rest.py index 79d87bf8b..07c023420 100644 --- a/google/cloud/compute_v1/services/regions/transports/rest.py +++ b/google/cloud/compute_v1/services/regions/transports/rest.py @@ -302,7 +302,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -388,7 +388,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/reservations/transports/rest.py b/google/cloud/compute_v1/services/reservations/transports/rest.py index b374ba762..a53aaec1e 100644 --- a/google/cloud/compute_v1/services/reservations/transports/rest.py +++ b/google/cloud/compute_v1/services/reservations/transports/rest.py @@ -531,7 +531,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -633,7 +633,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -726,7 +726,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -854,7 +854,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -964,7 +964,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1052,7 +1052,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1162,7 +1162,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1299,7 +1299,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1397,7 +1397,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1508,7 +1508,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 e4b6f3e76..909e05d3a 100644 --- a/google/cloud/compute_v1/services/resource_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/resource_policies/transports/rest.py @@ -484,7 +484,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -586,7 +586,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -679,7 +679,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -807,7 +807,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -917,7 +917,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1005,7 +1005,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1141,7 +1141,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1239,7 +1239,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/routers/transports/rest.py b/google/cloud/compute_v1/services/routers/transports/rest.py index a47c7f2f4..7153082f6 100644 --- a/google/cloud/compute_v1/services/routers/transports/rest.py +++ b/google/cloud/compute_v1/services/routers/transports/rest.py @@ -521,7 +521,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -622,7 +622,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -711,7 +711,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -802,7 +802,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -891,7 +891,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1000,7 +1000,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1087,7 +1087,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1196,7 +1196,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1292,7 +1292,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1402,7 +1402,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/routes/transports/rest.py b/google/cloud/compute_v1/services/routes/transports/rest.py index 507682ddc..f1843fd55 100644 --- a/google/cloud/compute_v1/services/routes/transports/rest.py +++ b/google/cloud/compute_v1/services/routes/transports/rest.py @@ -365,7 +365,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -457,7 +457,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -566,7 +566,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -653,7 +653,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/security_policies/client.py b/google/cloud/compute_v1/services/security_policies/client.py index 0beb51fd8..be3df685d 100644 --- a/google/cloud/compute_v1/services/security_policies/client.py +++ b/google/cloud/compute_v1/services/security_policies/client.py @@ -2124,6 +2124,236 @@ def error_code(self): # Done; return the response. return response + def set_labels_unary( + self, + request: Union[compute.SetLabelsSecurityPolicyRequest, 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]] = (), + ) -> compute.Operation: + r"""Sets the labels on a security policy. To learn more + about labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsSecurityPolicyRequest, dict]): + The request object. A request message for + SecurityPolicies.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.SetLabelsSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsSecurityPolicyRequest): + request = compute.SetLabelsSecurityPolicyRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("resource", request.resource), + ) + ), + ) + + # 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.SetLabelsSecurityPolicyRequest, 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 security policy. To learn more + about labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsSecurityPolicyRequest, dict]): + The request object. A request message for + SecurityPolicies.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.SetLabelsSecurityPolicyRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsSecurityPolicyRequest): + request = compute.SetLabelsSecurityPolicyRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("resource", request.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 __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 e28b6fa23..a7c767185 100644 --- a/google/cloud/compute_v1/services/security_policies/transports/base.py +++ b/google/cloud/compute_v1/services/security_policies/transports/base.py @@ -187,6 +187,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_labels: gapic_v1.method.wrap_method( + self.set_labels, + default_timeout=None, + client_info=client_info, + ), } def close(self): @@ -303,6 +308,15 @@ def remove_rule( ]: raise NotImplementedError() + @property + def set_labels( + self, + ) -> Callable[ + [compute.SetLabelsSecurityPolicyRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + @property def kind(self) -> str: raise NotImplementedError() 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 dd23a758e..9c7c286dd 100644 --- a/google/cloud/compute_v1/services/security_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/security_policies/transports/rest.py @@ -146,6 +146,13 @@ def pre_remove_rule(request, metadata): def post_remove_rule(response): logging.log(f"Received response: {response}") + def pre_set_labels(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_labels(response): + logging.log(f"Received response: {response}") + transport = SecurityPoliciesRestTransport(interceptor=MyCustomSecurityPoliciesInterceptor()) client = SecurityPoliciesClient(transport=transport) @@ -396,6 +403,27 @@ def post_remove_rule(self, response: compute.Operation) -> compute.Operation: """ return response + def pre_set_labels( + self, + request: compute.SetLabelsSecurityPolicyRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.SetLabelsSecurityPolicyRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_labels + + Override in a subclass to manipulate the request or metadata + before they are sent to the SecurityPolicies server. + """ + return request, metadata + + def post_set_labels(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for set_labels + + Override in a subclass to manipulate the response + after it is returned by the SecurityPolicies server but before + it is returned to user code. + """ + return response + @dataclasses.dataclass class SecurityPoliciesRestStub: @@ -594,7 +622,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -682,7 +710,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -784,7 +812,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -877,7 +905,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -968,7 +996,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1078,7 +1106,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1166,7 +1194,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1263,7 +1291,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1375,7 +1403,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1486,7 +1514,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1589,7 +1617,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1605,6 +1633,117 @@ def __call__( resp = self._interceptor.post_remove_rule(resp) return resp + class _SetLabels(SecurityPoliciesRestStub): + def __hash__(self): + return hash("SetLabels") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetLabelsSecurityPolicyRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the set labels method over HTTP. + + Args: + request (~.compute.SetLabelsSecurityPolicyRequest): + The request object. A request message for + SecurityPolicies.SetLabels. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/global/securityPolicies/{resource}/setLabels", + "body": "global_set_labels_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_labels(request, metadata) + pb_request = compute.SetLabelsSecurityPolicyRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_labels(resp) + return resp + @property def add_rule( self, @@ -1699,6 +1838,14 @@ def remove_rule( # In C++ this would require a dynamic_cast return self._RemoveRule(self._session, self._host, self._interceptor) # type: ignore + @property + def set_labels( + self, + ) -> Callable[[compute.SetLabelsSecurityPolicyRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetLabels(self._session, self._host, self._interceptor) # type: ignore + @property def kind(self) -> str: return "rest" 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 faeed7cc1..f734aec03 100644 --- a/google/cloud/compute_v1/services/service_attachments/transports/rest.py +++ b/google/cloud/compute_v1/services/service_attachments/transports/rest.py @@ -516,7 +516,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -618,7 +618,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -714,7 +714,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -842,7 +842,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -952,7 +952,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1040,7 +1040,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1150,7 +1150,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1287,7 +1287,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1385,7 +1385,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/snapshots/transports/rest.py b/google/cloud/compute_v1/services/snapshots/transports/rest.py index 1d3ca7fd1..39ccf8520 100644 --- a/google/cloud/compute_v1/services/snapshots/transports/rest.py +++ b/google/cloud/compute_v1/services/snapshots/transports/rest.py @@ -484,7 +484,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -575,7 +575,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -703,7 +703,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -813,7 +813,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -902,7 +902,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1038,7 +1038,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1149,7 +1149,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1247,7 +1247,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 06f6a6c30..6ec506421 100644 --- a/google/cloud/compute_v1/services/ssl_certificates/transports/rest.py +++ b/google/cloud/compute_v1/services/ssl_certificates/transports/rest.py @@ -394,7 +394,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -496,7 +496,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -599,7 +599,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -709,7 +709,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -799,7 +799,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/ssl_policies/client.py b/google/cloud/compute_v1/services/ssl_policies/client.py index ac1bb7f8d..39df94240 100644 --- a/google/cloud/compute_v1/services/ssl_policies/client.py +++ b/google/cloud/compute_v1/services/ssl_policies/client.py @@ -407,6 +407,94 @@ def __init__( api_audience=client_options.api_audience, ) + def aggregated_list( + self, + request: Union[compute.AggregatedListSslPoliciesRequest, dict] = None, + *, + project: str = None, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> pagers.AggregatedListPager: + r"""Retrieves the list of all SslPolicy resources, + regional and global, available to the specified project. + + Args: + request (Union[google.cloud.compute_v1.types.AggregatedListSslPoliciesRequest, dict]): + The request object. A request message for + SslPolicies.AggregatedList. See the method description + for details. + project (str): + Name of the project scoping 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.ssl_policies.pagers.AggregatedListPager: + 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.AggregatedListSslPoliciesRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.AggregatedListSslPoliciesRequest): + request = compute.AggregatedListSslPoliciesRequest(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.aggregated_list] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata((("project", request.project),)), + ) + + # 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.AggregatedListPager( + method=rpc, + request=request, + response=response, + metadata=metadata, + ) + + # Done; return the response. + return response + def delete_unary( self, request: Union[compute.DeleteSslPolicyRequest, dict] = None, diff --git a/google/cloud/compute_v1/services/ssl_policies/pagers.py b/google/cloud/compute_v1/services/ssl_policies/pagers.py index 4ed9ac1bf..88eeb5c74 100644 --- a/google/cloud/compute_v1/services/ssl_policies/pagers.py +++ b/google/cloud/compute_v1/services/ssl_policies/pagers.py @@ -27,6 +27,71 @@ from google.cloud.compute_v1.types import compute +class AggregatedListPager: + """A pager for iterating through ``aggregated_list`` requests. + + This class thinly wraps an initial + :class:`google.cloud.compute_v1.types.SslPoliciesAggregatedList` object, and + provides an ``__iter__`` method to iterate through its + ``items`` field. + + If there are more pages, the ``__iter__`` method will make additional + ``AggregatedList`` requests and continue to iterate + through the ``items`` field on the + corresponding responses. + + All the usual :class:`google.cloud.compute_v1.types.SslPoliciesAggregatedList` + attributes are available on the pager. If multiple requests are made, only + the most recent response is retained, and thus used for attribute lookup. + """ + + def __init__( + self, + method: Callable[..., compute.SslPoliciesAggregatedList], + request: compute.AggregatedListSslPoliciesRequest, + response: compute.SslPoliciesAggregatedList, + *, + metadata: Sequence[Tuple[str, str]] = () + ): + """Instantiate the pager. + + Args: + method (Callable): The method that was originally called, and + which instantiated this pager. + request (google.cloud.compute_v1.types.AggregatedListSslPoliciesRequest): + The initial request object. + response (google.cloud.compute_v1.types.SslPoliciesAggregatedList): + The initial response object. + metadata (Sequence[Tuple[str, str]]): Strings which should be + sent along with the request as metadata. + """ + self._method = method + self._request = compute.AggregatedListSslPoliciesRequest(request) + self._response = response + self._metadata = metadata + + def __getattr__(self, name: str) -> Any: + return getattr(self._response, name) + + @property + def pages(self) -> Iterator[compute.SslPoliciesAggregatedList]: + yield self._response + while self._response.next_page_token: + self._request.page_token = self._response.next_page_token + self._response = self._method(self._request, metadata=self._metadata) + yield self._response + + def __iter__(self) -> Iterator[Tuple[str, compute.SslPoliciesScopedList]]: + for page in self.pages: + yield from page.items.items() + + def get(self, key: str) -> Optional[compute.SslPoliciesScopedList]: + return self._response.items.get(key) + + def __repr__(self) -> str: + return "{0}<{1!r}>".format(self.__class__.__name__, self._response) + + class ListPager: """A pager for iterating through ``list`` requests. 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 dc02c2c8e..dfdaeaeb4 100644 --- a/google/cloud/compute_v1/services/ssl_policies/transports/base.py +++ b/google/cloud/compute_v1/services/ssl_policies/transports/base.py @@ -132,6 +132,11 @@ def __init__( def _prep_wrapped_messages(self, client_info): # Precompute the wrapped methods. self._wrapped_methods = { + self.aggregated_list: gapic_v1.method.wrap_method( + self.aggregated_list, + default_timeout=None, + client_info=client_info, + ), self.delete: gapic_v1.method.wrap_method( self.delete, default_timeout=None, @@ -173,6 +178,18 @@ def close(self): """ raise NotImplementedError() + @property + def aggregated_list( + self, + ) -> Callable[ + [compute.AggregatedListSslPoliciesRequest], + Union[ + compute.SslPoliciesAggregatedList, + Awaitable[compute.SslPoliciesAggregatedList], + ], + ]: + raise NotImplementedError() + @property def delete( self, 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 c15a08893..e4157a8f3 100644 --- a/google/cloud/compute_v1/services/ssl_policies/transports/rest.py +++ b/google/cloud/compute_v1/services/ssl_policies/transports/rest.py @@ -66,6 +66,13 @@ class SslPoliciesRestInterceptor: .. code-block:: python class MyCustomSslPoliciesInterceptor(SslPoliciesRestInterceptor): + def pre_aggregated_list(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_aggregated_list(response): + logging.log(f"Received response: {response}") + def pre_delete(request, metadata): logging.log(f"Received request: {request}") return request, metadata @@ -114,6 +121,29 @@ def post_patch(response): """ + def pre_aggregated_list( + self, + request: compute.AggregatedListSslPoliciesRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.AggregatedListSslPoliciesRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for aggregated_list + + Override in a subclass to manipulate the request or metadata + before they are sent to the SslPolicies server. + """ + return request, metadata + + def post_aggregated_list( + self, response: compute.SslPoliciesAggregatedList + ) -> compute.SslPoliciesAggregatedList: + """Post-rpc interceptor for aggregated_list + + Override in a subclass to manipulate the response + after it is returned by the SslPolicies server but before + it is returned to user code. + """ + return response + def pre_delete( self, request: compute.DeleteSslPolicyRequest, @@ -346,6 +376,93 @@ def __init__( self._interceptor = interceptor or SslPoliciesRestInterceptor() self._prep_wrapped_messages(client_info) + class _AggregatedList(SslPoliciesRestStub): + def __hash__(self): + return hash("AggregatedList") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.AggregatedListSslPoliciesRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.SslPoliciesAggregatedList: + r"""Call the aggregated list method over HTTP. + + Args: + request (~.compute.AggregatedListSslPoliciesRequest): + The request object. A request message for + SslPolicies.AggregatedList. 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: + ~.compute.SslPoliciesAggregatedList: + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "get", + "uri": "/compute/v1/projects/{project}/aggregated/sslPolicies", + }, + ] + request, metadata = self._interceptor.pre_aggregated_list(request, metadata) + pb_request = compute.AggregatedListSslPoliciesRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.SslPoliciesAggregatedList() + pb_resp = compute.SslPoliciesAggregatedList.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_aggregated_list(resp) + return resp + class _Delete(SslPoliciesRestStub): def __hash__(self): return hash("Delete") @@ -432,7 +549,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -525,7 +642,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -635,7 +752,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -723,7 +840,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -812,7 +929,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -922,7 +1039,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -939,6 +1056,16 @@ def __call__( resp = self._interceptor.post_patch(resp) return resp + @property + def aggregated_list( + self, + ) -> Callable[ + [compute.AggregatedListSslPoliciesRequest], compute.SslPoliciesAggregatedList + ]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._AggregatedList(self._session, self._host, self._interceptor) # type: ignore + @property def delete(self) -> Callable[[compute.DeleteSslPolicyRequest], compute.Operation]: # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. diff --git a/google/cloud/compute_v1/services/subnetworks/transports/rest.py b/google/cloud/compute_v1/services/subnetworks/transports/rest.py index 7a4a4b662..6b9131620 100644 --- a/google/cloud/compute_v1/services/subnetworks/transports/rest.py +++ b/google/cloud/compute_v1/services/subnetworks/transports/rest.py @@ -593,7 +593,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -695,7 +695,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -807,7 +807,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -902,7 +902,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1030,7 +1030,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1140,7 +1140,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1230,7 +1230,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1317,7 +1317,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1427,7 +1427,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1564,7 +1564,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1678,7 +1678,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1776,7 +1776,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 4a917708e..11e248d18 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 @@ -407,7 +407,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -501,7 +501,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -611,7 +611,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -699,7 +699,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -809,7 +809,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 02e068e6f..0fe34e8bb 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 @@ -452,7 +452,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -554,7 +554,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -654,7 +654,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -764,7 +764,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -852,7 +852,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -962,7 +962,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1073,7 +1073,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 0392d65f3..f2b942f83 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 @@ -574,7 +574,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -676,7 +676,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -775,7 +775,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -885,7 +885,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -975,7 +975,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1085,7 +1085,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1198,7 +1198,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1311,7 +1311,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1424,7 +1424,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1535,7 +1535,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1646,7 +1646,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 e1e2a9a6b..98dd51d95 100644 --- a/google/cloud/compute_v1/services/target_instances/transports/rest.py +++ b/google/cloud/compute_v1/services/target_instances/transports/rest.py @@ -394,7 +394,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -496,7 +496,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -591,7 +591,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -701,7 +701,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -791,7 +791,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception 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 ad98b3f6e..7bb607093 100644 --- a/google/cloud/compute_v1/services/target_pools/transports/rest.py +++ b/google/cloud/compute_v1/services/target_pools/transports/rest.py @@ -584,7 +584,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -695,7 +695,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -783,7 +783,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -885,7 +885,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -980,7 +980,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1075,7 +1075,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1186,7 +1186,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1276,7 +1276,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1388,7 +1388,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1499,7 +1499,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1610,7 +1610,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 9eb6d40d4..2e2cb4869 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 @@ -531,7 +531,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -626,7 +626,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -736,7 +736,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -826,7 +826,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -938,7 +938,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1051,7 +1051,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1164,7 +1164,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1277,7 +1277,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1388,7 +1388,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 b8f3c12d1..4b91c3ca0 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 @@ -439,7 +439,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -534,7 +534,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -644,7 +644,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -734,7 +734,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -846,7 +846,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -959,7 +959,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 20819aa97..ecb997b7c 100644 --- a/google/cloud/compute_v1/services/target_vpn_gateways/client.py +++ b/google/cloud/compute_v1/services/target_vpn_gateways/client.py @@ -1141,6 +1141,255 @@ def list( # Done; return the response. return response + def set_labels_unary( + self, + request: Union[compute.SetLabelsTargetVpnGatewayRequest, 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]] = (), + ) -> compute.Operation: + r"""Sets the labels on a TargetVpnGateway. To learn more + about labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsTargetVpnGatewayRequest, dict]): + The request object. A request message for + TargetVpnGateways.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.SetLabelsTargetVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsTargetVpnGatewayRequest): + request = compute.SetLabelsTargetVpnGatewayRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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.SetLabelsTargetVpnGatewayRequest, 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 TargetVpnGateway. To learn more + about labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsTargetVpnGatewayRequest, dict]): + The request object. A request message for + TargetVpnGateways.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.SetLabelsTargetVpnGatewayRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsTargetVpnGatewayRequest): + request = compute.SetLabelsTargetVpnGatewayRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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/target_vpn_gateways/transports/base.py b/google/cloud/compute_v1/services/target_vpn_gateways/transports/base.py index 2ce8ad95a..8ec28d693 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 @@ -157,6 +157,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_labels: gapic_v1.method.wrap_method( + self.set_labels, + default_timeout=None, + client_info=client_info, + ), } def close(self): @@ -216,6 +221,15 @@ def list( ]: raise NotImplementedError() + @property + def set_labels( + self, + ) -> Callable[ + [compute.SetLabelsTargetVpnGatewayRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + @property def kind(self) -> str: raise NotImplementedError() 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 a111de548..c2092ef57 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 @@ -104,6 +104,13 @@ def pre_list(request, metadata): def post_list(response): logging.log(f"Received response: {response}") + def pre_set_labels(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_labels(response): + logging.log(f"Received response: {response}") + transport = TargetVpnGatewaysRestTransport(interceptor=MyCustomTargetVpnGatewaysInterceptor()) client = TargetVpnGatewaysClient(transport=transport) @@ -221,6 +228,27 @@ def post_list( """ return response + def pre_set_labels( + self, + request: compute.SetLabelsTargetVpnGatewayRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.SetLabelsTargetVpnGatewayRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_labels + + Override in a subclass to manipulate the request or metadata + before they are sent to the TargetVpnGateways server. + """ + return request, metadata + + def post_set_labels(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for set_labels + + Override in a subclass to manipulate the response + after it is returned by the TargetVpnGateways server but before + it is returned to user code. + """ + return response + @dataclasses.dataclass class TargetVpnGatewaysRestStub: @@ -396,7 +424,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -498,7 +526,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -590,7 +618,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -700,7 +728,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -790,7 +818,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -806,6 +834,117 @@ def __call__( resp = self._interceptor.post_list(resp) return resp + class _SetLabels(TargetVpnGatewaysRestStub): + def __hash__(self): + return hash("SetLabels") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetLabelsTargetVpnGatewayRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the set labels method over HTTP. + + Args: + request (~.compute.SetLabelsTargetVpnGatewayRequest): + The request object. A request message for + TargetVpnGateways.SetLabels. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/regions/{region}/targetVpnGateways/{resource}/setLabels", + "body": "region_set_labels_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_labels(request, metadata) + pb_request = compute.SetLabelsTargetVpnGatewayRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_labels(resp) + return resp + @property def aggregated_list( self, @@ -849,6 +988,14 @@ def list( # In C++ this would require a dynamic_cast return self._List(self._session, self._host, self._interceptor) # type: ignore + @property + def set_labels( + self, + ) -> Callable[[compute.SetLabelsTargetVpnGatewayRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetLabels(self._session, self._host, self._interceptor) # type: ignore + @property def kind(self) -> str: return "rest" 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 95a982772..0e3e65e08 100644 --- a/google/cloud/compute_v1/services/url_maps/transports/rest.py +++ b/google/cloud/compute_v1/services/url_maps/transports/rest.py @@ -491,7 +491,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -592,7 +592,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -699,7 +699,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -808,7 +808,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -921,7 +921,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1008,7 +1008,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1117,7 +1117,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1227,7 +1227,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1323,7 +1323,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) 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 4ea093edb..f4f09801f 100644 --- a/google/cloud/compute_v1/services/vpn_gateways/transports/rest.py +++ b/google/cloud/compute_v1/services/vpn_gateways/transports/rest.py @@ -475,7 +475,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -577,7 +577,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -673,7 +673,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -760,7 +760,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -870,7 +870,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -960,7 +960,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -1070,7 +1070,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -1168,7 +1168,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) diff --git a/google/cloud/compute_v1/services/vpn_tunnels/client.py b/google/cloud/compute_v1/services/vpn_tunnels/client.py index 5656cad95..c2608a3db 100644 --- a/google/cloud/compute_v1/services/vpn_tunnels/client.py +++ b/google/cloud/compute_v1/services/vpn_tunnels/client.py @@ -1134,6 +1134,255 @@ def list( # Done; return the response. return response + def set_labels_unary( + self, + request: Union[compute.SetLabelsVpnTunnelRequest, 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]] = (), + ) -> compute.Operation: + r"""Sets the labels on a VpnTunnel. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsVpnTunnelRequest, dict]): + The request object. A request message for + VpnTunnels.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.SetLabelsVpnTunnelRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsVpnTunnelRequest): + request = compute.SetLabelsVpnTunnelRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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.SetLabelsVpnTunnelRequest, 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 VpnTunnel. To learn more about + labels, read the Labeling Resources documentation. + + Args: + request (Union[google.cloud.compute_v1.types.SetLabelsVpnTunnelRequest, dict]): + The request object. A request message for + VpnTunnels.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.SetLabelsVpnTunnelRequest. + # There's no risk of modifying the input as we've already verified + # there are no flattened fields. + if not isinstance(request, compute.SetLabelsVpnTunnelRequest): + request = compute.SetLabelsVpnTunnelRequest(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] + + # Certain fields should be provided within the metadata header; + # add these here. + metadata = tuple(metadata) + ( + gapic_v1.routing_header.to_grpc_metadata( + ( + ("project", request.project), + ("region", request.region), + ("resource", request.resource), + ) + ), + ) + + # 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/vpn_tunnels/transports/base.py b/google/cloud/compute_v1/services/vpn_tunnels/transports/base.py index da2930620..f7445af57 100644 --- a/google/cloud/compute_v1/services/vpn_tunnels/transports/base.py +++ b/google/cloud/compute_v1/services/vpn_tunnels/transports/base.py @@ -157,6 +157,11 @@ def _prep_wrapped_messages(self, client_info): default_timeout=None, client_info=client_info, ), + self.set_labels: gapic_v1.method.wrap_method( + self.set_labels, + default_timeout=None, + client_info=client_info, + ), } def close(self): @@ -215,6 +220,15 @@ def list( ]: raise NotImplementedError() + @property + def set_labels( + self, + ) -> Callable[ + [compute.SetLabelsVpnTunnelRequest], + Union[compute.Operation, Awaitable[compute.Operation]], + ]: + raise NotImplementedError() + @property def kind(self) -> str: raise NotImplementedError() 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 18238a45e..b502f3e0d 100644 --- a/google/cloud/compute_v1/services/vpn_tunnels/transports/rest.py +++ b/google/cloud/compute_v1/services/vpn_tunnels/transports/rest.py @@ -101,6 +101,13 @@ def pre_list(request, metadata): def post_list(response): logging.log(f"Received response: {response}") + def pre_set_labels(request, metadata): + logging.log(f"Received request: {request}") + return request, metadata + + def post_set_labels(response): + logging.log(f"Received response: {response}") + transport = VpnTunnelsRestTransport(interceptor=MyCustomVpnTunnelsInterceptor()) client = VpnTunnelsClient(transport=transport) @@ -212,6 +219,27 @@ def post_list(self, response: compute.VpnTunnelList) -> compute.VpnTunnelList: """ return response + def pre_set_labels( + self, + request: compute.SetLabelsVpnTunnelRequest, + metadata: Sequence[Tuple[str, str]], + ) -> Tuple[compute.SetLabelsVpnTunnelRequest, Sequence[Tuple[str, str]]]: + """Pre-rpc interceptor for set_labels + + Override in a subclass to manipulate the request or metadata + before they are sent to the VpnTunnels server. + """ + return request, metadata + + def post_set_labels(self, response: compute.Operation) -> compute.Operation: + """Post-rpc interceptor for set_labels + + Override in a subclass to manipulate the response + after it is returned by the VpnTunnels server but before + it is returned to user code. + """ + return response + @dataclasses.dataclass class VpnTunnelsRestStub: @@ -387,7 +415,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -489,7 +517,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -578,7 +606,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -688,7 +716,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), data=body, ) @@ -778,7 +806,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -794,6 +822,117 @@ def __call__( resp = self._interceptor.post_list(resp) return resp + class _SetLabels(VpnTunnelsRestStub): + def __hash__(self): + return hash("SetLabels") + + __REQUIRED_FIELDS_DEFAULT_VALUES: Dict[str, str] = {} + + @classmethod + def _get_unset_required_fields(cls, message_dict): + return { + k: v + for k, v in cls.__REQUIRED_FIELDS_DEFAULT_VALUES.items() + if k not in message_dict + } + + def __call__( + self, + request: compute.SetLabelsVpnTunnelRequest, + *, + retry: OptionalRetry = gapic_v1.method.DEFAULT, + timeout: float = None, + metadata: Sequence[Tuple[str, str]] = (), + ) -> compute.Operation: + r"""Call the set labels method over HTTP. + + Args: + request (~.compute.SetLabelsVpnTunnelRequest): + The request object. A request message for + VpnTunnels.SetLabels. 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: + ~.compute.Operation: + Represents an Operation resource. Google Compute Engine + has three Operation resources: \* + `Global `__ + \* + `Regional `__ + \* + `Zonal `__ + You can use an operation resource to manage asynchronous + API requests. For more information, read Handling API + responses. Operations can be global, regional or zonal. + - For global operations, use the ``globalOperations`` + resource. - For regional operations, use the + ``regionOperations`` resource. - For zonal operations, + use the ``zonalOperations`` resource. For more + information, read Global, Regional, and Zonal Resources. + + """ + + http_options: List[Dict[str, str]] = [ + { + "method": "post", + "uri": "/compute/v1/projects/{project}/regions/{region}/vpnTunnels/{resource}/setLabels", + "body": "region_set_labels_request_resource", + }, + ] + request, metadata = self._interceptor.pre_set_labels(request, metadata) + pb_request = compute.SetLabelsVpnTunnelRequest.pb(request) + transcoded_request = path_template.transcode(http_options, pb_request) + + # Jsonify the request body + + body = json_format.MessageToJson( + transcoded_request["body"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + uri = transcoded_request["uri"] + method = transcoded_request["method"] + + # Jsonify the query params + query_params = json.loads( + json_format.MessageToJson( + transcoded_request["query_params"], + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + query_params.update(self._get_unset_required_fields(query_params)) + + # Send the request + headers = dict(metadata) + headers["Content-Type"] = "application/json" + response = getattr(self._session, method)( + "{host}{uri}".format(host=self._host, uri=uri), + timeout=timeout, + headers=headers, + params=rest_helpers.flatten_query_params(query_params, strict=True), + data=body, + ) + + # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception + # subclass. + if response.status_code >= 400: + raise core_exceptions.from_http_response(response) + + # Return the response + resp = compute.Operation() + pb_resp = compute.Operation.pb(resp) + + json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) + resp = self._interceptor.post_set_labels(resp) + return resp + @property def aggregated_list( self, @@ -828,6 +967,14 @@ def list(self) -> Callable[[compute.ListVpnTunnelsRequest], compute.VpnTunnelLis # In C++ this would require a dynamic_cast return self._List(self._session, self._host, self._interceptor) # type: ignore + @property + def set_labels( + self, + ) -> Callable[[compute.SetLabelsVpnTunnelRequest], compute.Operation]: + # The return type is fine, but mypy isn't sophisticated enough to determine what's going on here. + # In C++ this would require a dynamic_cast + return self._SetLabels(self._session, self._host, self._interceptor) # type: ignore + @property def kind(self) -> str: return "rest" 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 42dd9e242..c581626f8 100644 --- a/google/cloud/compute_v1/services/zone_operations/transports/rest.py +++ b/google/cloud/compute_v1/services/zone_operations/transports/rest.py @@ -367,7 +367,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -469,7 +469,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -558,7 +558,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -660,7 +660,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/services/zones/transports/rest.py b/google/cloud/compute_v1/services/zones/transports/rest.py index e4032e8e6..e5cd9ccd4 100644 --- a/google/cloud/compute_v1/services/zones/transports/rest.py +++ b/google/cloud/compute_v1/services/zones/transports/rest.py @@ -304,7 +304,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception @@ -390,7 +390,7 @@ def __call__( "{host}{uri}".format(host=self._host, uri=uri), timeout=timeout, headers=headers, - params=rest_helpers.flatten_query_params(query_params), + params=rest_helpers.flatten_query_params(query_params, strict=True), ) # In case of error, raise the appropriate core_exceptions.GoogleAPICallError exception diff --git a/google/cloud/compute_v1/types/__init__.py b/google/cloud/compute_v1/types/__init__.py index a255f18f2..62b3ab7f9 100644 --- a/google/cloud/compute_v1/types/__init__.py +++ b/google/cloud/compute_v1/types/__init__.py @@ -74,6 +74,7 @@ AggregatedListSecurityPoliciesRequest, AggregatedListServiceAttachmentsRequest, AggregatedListSslCertificatesRequest, + AggregatedListSslPoliciesRequest, AggregatedListSubnetworksRequest, AggregatedListTargetHttpProxiesRequest, AggregatedListTargetHttpsProxiesRequest, @@ -218,8 +219,10 @@ DeleteRegionOperationResponse, DeleteRegionSecurityPolicyRequest, DeleteRegionSslCertificateRequest, + DeleteRegionSslPolicyRequest, DeleteRegionTargetHttpProxyRequest, DeleteRegionTargetHttpsProxyRequest, + DeleteRegionTargetTcpProxyRequest, DeleteRegionUrlMapRequest, DeleteReservationRequest, DeleteResourcePolicyRequest, @@ -259,6 +262,7 @@ DiskInstantiationConfig, DiskList, DiskMoveRequest, + DiskParams, DisksAddResourcePoliciesRequest, DisksRemoveResourcePoliciesRequest, DisksResizeRequest, @@ -333,6 +337,7 @@ GetHealthCheckRequest, GetHealthRegionBackendServiceRequest, GetHealthTargetPoolRequest, + GetIamPolicyBackendServiceRequest, GetIamPolicyDiskRequest, GetIamPolicyFirewallPolicyRequest, GetIamPolicyImageRequest, @@ -343,6 +348,7 @@ GetIamPolicyNetworkFirewallPolicyRequest, GetIamPolicyNodeGroupRequest, GetIamPolicyNodeTemplateRequest, + GetIamPolicyRegionBackendServiceRequest, GetIamPolicyRegionDiskRequest, GetIamPolicyRegionNetworkFirewallPolicyRequest, GetIamPolicyReservationRequest, @@ -391,8 +397,10 @@ GetRegionRequest, GetRegionSecurityPolicyRequest, GetRegionSslCertificateRequest, + GetRegionSslPolicyRequest, GetRegionTargetHttpProxyRequest, GetRegionTargetHttpsProxyRequest, + GetRegionTargetTcpProxyRequest, GetRegionUrlMapRequest, GetReservationRequest, GetResourcePolicyRequest, @@ -515,8 +523,10 @@ InsertRegionNotificationEndpointRequest, InsertRegionSecurityPolicyRequest, InsertRegionSslCertificateRequest, + InsertRegionSslPolicyRequest, InsertRegionTargetHttpProxyRequest, InsertRegionTargetHttpsProxyRequest, + InsertRegionTargetTcpProxyRequest, InsertRegionUrlMapRequest, InsertReservationRequest, InsertResourcePolicyRequest, @@ -541,6 +551,8 @@ InsertVpnTunnelRequest, Instance, InstanceAggregatedList, + InstanceConsumptionData, + InstanceConsumptionInfo, InstanceGroup, InstanceGroupAggregatedList, InstanceGroupList, @@ -630,6 +642,7 @@ ListAddressesRequest, ListAssociationsFirewallPolicyRequest, ListAutoscalersRequest, + ListAvailableFeaturesRegionSslPoliciesRequest, ListAvailableFeaturesSslPoliciesRequest, ListBackendBucketsRequest, ListBackendServicesRequest, @@ -696,8 +709,10 @@ ListRegionSecurityPoliciesRequest, ListRegionsRequest, ListRegionSslCertificatesRequest, + ListRegionSslPoliciesRequest, ListRegionTargetHttpProxiesRequest, ListRegionTargetHttpsProxiesRequest, + ListRegionTargetTcpProxiesRequest, ListRegionUrlMapsRequest, ListReservationsRequest, ListResourcePoliciesRequest, @@ -846,6 +861,7 @@ PatchRegionInstanceGroupManagerRequest, PatchRegionNetworkFirewallPolicyRequest, PatchRegionSecurityPolicyRequest, + PatchRegionSslPolicyRequest, PatchRegionTargetHttpsProxyRequest, PatchRegionUrlMapRequest, PatchRouterRequest, @@ -1005,6 +1021,7 @@ SecurityPolicyAdaptiveProtectionConfig, SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig, SecurityPolicyAdvancedOptionsConfig, + SecurityPolicyAdvancedOptionsConfigJsonCustomConfig, SecurityPolicyDdosProtectionConfig, SecurityPolicyList, SecurityPolicyRecaptchaOptionsConfig, @@ -1040,6 +1057,7 @@ SetDiskAutoDeleteInstanceRequest, SetEdgeSecurityPolicyBackendBucketRequest, SetEdgeSecurityPolicyBackendServiceRequest, + SetIamPolicyBackendServiceRequest, SetIamPolicyDiskRequest, SetIamPolicyFirewallPolicyRequest, SetIamPolicyImageRequest, @@ -1050,6 +1068,7 @@ SetIamPolicyNetworkFirewallPolicyRequest, SetIamPolicyNodeGroupRequest, SetIamPolicyNodeTemplateRequest, + SetIamPolicyRegionBackendServiceRequest, SetIamPolicyRegionDiskRequest, SetIamPolicyRegionNetworkFirewallPolicyRequest, SetIamPolicyReservationRequest, @@ -1059,15 +1078,22 @@ SetIamPolicySubnetworkRequest, SetInstanceTemplateInstanceGroupManagerRequest, SetInstanceTemplateRegionInstanceGroupManagerRequest, + SetLabelsAddressRequest, SetLabelsDiskRequest, SetLabelsExternalVpnGatewayRequest, SetLabelsForwardingRuleRequest, + SetLabelsGlobalAddressRequest, SetLabelsGlobalForwardingRuleRequest, SetLabelsImageRequest, SetLabelsInstanceRequest, + SetLabelsInterconnectAttachmentRequest, + SetLabelsInterconnectRequest, SetLabelsRegionDiskRequest, + SetLabelsSecurityPolicyRequest, SetLabelsSnapshotRequest, + SetLabelsTargetVpnGatewayRequest, SetLabelsVpnGatewayRequest, + SetLabelsVpnTunnelRequest, SetMachineResourcesInstanceRequest, SetMachineTypeInstanceRequest, SetMetadataInstanceRequest, @@ -1118,8 +1144,10 @@ SslCertificateSelfManagedSslCertificate, SslCertificatesScopedList, SSLHealthCheck, + SslPoliciesAggregatedList, SslPoliciesList, SslPoliciesListAvailableFeaturesResponse, + SslPoliciesScopedList, SslPolicy, SslPolicyReference, StartInstanceRequest, @@ -1341,6 +1369,7 @@ "AggregatedListSecurityPoliciesRequest", "AggregatedListServiceAttachmentsRequest", "AggregatedListSslCertificatesRequest", + "AggregatedListSslPoliciesRequest", "AggregatedListSubnetworksRequest", "AggregatedListTargetHttpProxiesRequest", "AggregatedListTargetHttpsProxiesRequest", @@ -1485,8 +1514,10 @@ "DeleteRegionOperationResponse", "DeleteRegionSecurityPolicyRequest", "DeleteRegionSslCertificateRequest", + "DeleteRegionSslPolicyRequest", "DeleteRegionTargetHttpProxyRequest", "DeleteRegionTargetHttpsProxyRequest", + "DeleteRegionTargetTcpProxyRequest", "DeleteRegionUrlMapRequest", "DeleteReservationRequest", "DeleteResourcePolicyRequest", @@ -1526,6 +1557,7 @@ "DiskInstantiationConfig", "DiskList", "DiskMoveRequest", + "DiskParams", "DisksAddResourcePoliciesRequest", "DisksRemoveResourcePoliciesRequest", "DisksResizeRequest", @@ -1600,6 +1632,7 @@ "GetHealthCheckRequest", "GetHealthRegionBackendServiceRequest", "GetHealthTargetPoolRequest", + "GetIamPolicyBackendServiceRequest", "GetIamPolicyDiskRequest", "GetIamPolicyFirewallPolicyRequest", "GetIamPolicyImageRequest", @@ -1610,6 +1643,7 @@ "GetIamPolicyNetworkFirewallPolicyRequest", "GetIamPolicyNodeGroupRequest", "GetIamPolicyNodeTemplateRequest", + "GetIamPolicyRegionBackendServiceRequest", "GetIamPolicyRegionDiskRequest", "GetIamPolicyRegionNetworkFirewallPolicyRequest", "GetIamPolicyReservationRequest", @@ -1658,8 +1692,10 @@ "GetRegionRequest", "GetRegionSecurityPolicyRequest", "GetRegionSslCertificateRequest", + "GetRegionSslPolicyRequest", "GetRegionTargetHttpProxyRequest", "GetRegionTargetHttpsProxyRequest", + "GetRegionTargetTcpProxyRequest", "GetRegionUrlMapRequest", "GetReservationRequest", "GetResourcePolicyRequest", @@ -1782,8 +1818,10 @@ "InsertRegionNotificationEndpointRequest", "InsertRegionSecurityPolicyRequest", "InsertRegionSslCertificateRequest", + "InsertRegionSslPolicyRequest", "InsertRegionTargetHttpProxyRequest", "InsertRegionTargetHttpsProxyRequest", + "InsertRegionTargetTcpProxyRequest", "InsertRegionUrlMapRequest", "InsertReservationRequest", "InsertResourcePolicyRequest", @@ -1808,6 +1846,8 @@ "InsertVpnTunnelRequest", "Instance", "InstanceAggregatedList", + "InstanceConsumptionData", + "InstanceConsumptionInfo", "InstanceGroup", "InstanceGroupAggregatedList", "InstanceGroupList", @@ -1897,6 +1937,7 @@ "ListAddressesRequest", "ListAssociationsFirewallPolicyRequest", "ListAutoscalersRequest", + "ListAvailableFeaturesRegionSslPoliciesRequest", "ListAvailableFeaturesSslPoliciesRequest", "ListBackendBucketsRequest", "ListBackendServicesRequest", @@ -1963,8 +2004,10 @@ "ListRegionSecurityPoliciesRequest", "ListRegionsRequest", "ListRegionSslCertificatesRequest", + "ListRegionSslPoliciesRequest", "ListRegionTargetHttpProxiesRequest", "ListRegionTargetHttpsProxiesRequest", + "ListRegionTargetTcpProxiesRequest", "ListRegionUrlMapsRequest", "ListReservationsRequest", "ListResourcePoliciesRequest", @@ -2113,6 +2156,7 @@ "PatchRegionInstanceGroupManagerRequest", "PatchRegionNetworkFirewallPolicyRequest", "PatchRegionSecurityPolicyRequest", + "PatchRegionSslPolicyRequest", "PatchRegionTargetHttpsProxyRequest", "PatchRegionUrlMapRequest", "PatchRouterRequest", @@ -2272,6 +2316,7 @@ "SecurityPolicyAdaptiveProtectionConfig", "SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig", "SecurityPolicyAdvancedOptionsConfig", + "SecurityPolicyAdvancedOptionsConfigJsonCustomConfig", "SecurityPolicyDdosProtectionConfig", "SecurityPolicyList", "SecurityPolicyRecaptchaOptionsConfig", @@ -2307,6 +2352,7 @@ "SetDiskAutoDeleteInstanceRequest", "SetEdgeSecurityPolicyBackendBucketRequest", "SetEdgeSecurityPolicyBackendServiceRequest", + "SetIamPolicyBackendServiceRequest", "SetIamPolicyDiskRequest", "SetIamPolicyFirewallPolicyRequest", "SetIamPolicyImageRequest", @@ -2317,6 +2363,7 @@ "SetIamPolicyNetworkFirewallPolicyRequest", "SetIamPolicyNodeGroupRequest", "SetIamPolicyNodeTemplateRequest", + "SetIamPolicyRegionBackendServiceRequest", "SetIamPolicyRegionDiskRequest", "SetIamPolicyRegionNetworkFirewallPolicyRequest", "SetIamPolicyReservationRequest", @@ -2326,15 +2373,22 @@ "SetIamPolicySubnetworkRequest", "SetInstanceTemplateInstanceGroupManagerRequest", "SetInstanceTemplateRegionInstanceGroupManagerRequest", + "SetLabelsAddressRequest", "SetLabelsDiskRequest", "SetLabelsExternalVpnGatewayRequest", "SetLabelsForwardingRuleRequest", + "SetLabelsGlobalAddressRequest", "SetLabelsGlobalForwardingRuleRequest", "SetLabelsImageRequest", "SetLabelsInstanceRequest", + "SetLabelsInterconnectAttachmentRequest", + "SetLabelsInterconnectRequest", "SetLabelsRegionDiskRequest", + "SetLabelsSecurityPolicyRequest", "SetLabelsSnapshotRequest", + "SetLabelsTargetVpnGatewayRequest", "SetLabelsVpnGatewayRequest", + "SetLabelsVpnTunnelRequest", "SetMachineResourcesInstanceRequest", "SetMachineTypeInstanceRequest", "SetMetadataInstanceRequest", @@ -2385,8 +2439,10 @@ "SslCertificateSelfManagedSslCertificate", "SslCertificatesScopedList", "SSLHealthCheck", + "SslPoliciesAggregatedList", "SslPoliciesList", "SslPoliciesListAvailableFeaturesResponse", + "SslPoliciesScopedList", "SslPolicy", "SslPolicyReference", "StartInstanceRequest", diff --git a/google/cloud/compute_v1/types/compute.py b/google/cloud/compute_v1/types/compute.py index e45707741..f16653224 100644 --- a/google/cloud/compute_v1/types/compute.py +++ b/google/cloud/compute_v1/types/compute.py @@ -79,6 +79,7 @@ "AggregatedListSecurityPoliciesRequest", "AggregatedListServiceAttachmentsRequest", "AggregatedListSslCertificatesRequest", + "AggregatedListSslPoliciesRequest", "AggregatedListSubnetworksRequest", "AggregatedListTargetHttpProxiesRequest", "AggregatedListTargetHttpsProxiesRequest", @@ -223,8 +224,10 @@ "DeleteRegionOperationResponse", "DeleteRegionSecurityPolicyRequest", "DeleteRegionSslCertificateRequest", + "DeleteRegionSslPolicyRequest", "DeleteRegionTargetHttpProxyRequest", "DeleteRegionTargetHttpsProxyRequest", + "DeleteRegionTargetTcpProxyRequest", "DeleteRegionUrlMapRequest", "DeleteReservationRequest", "DeleteResourcePolicyRequest", @@ -264,6 +267,7 @@ "DiskInstantiationConfig", "DiskList", "DiskMoveRequest", + "DiskParams", "DiskType", "DiskTypeAggregatedList", "DiskTypeList", @@ -339,6 +343,7 @@ "GetHealthCheckRequest", "GetHealthRegionBackendServiceRequest", "GetHealthTargetPoolRequest", + "GetIamPolicyBackendServiceRequest", "GetIamPolicyDiskRequest", "GetIamPolicyFirewallPolicyRequest", "GetIamPolicyImageRequest", @@ -349,6 +354,7 @@ "GetIamPolicyNetworkFirewallPolicyRequest", "GetIamPolicyNodeGroupRequest", "GetIamPolicyNodeTemplateRequest", + "GetIamPolicyRegionBackendServiceRequest", "GetIamPolicyRegionDiskRequest", "GetIamPolicyRegionNetworkFirewallPolicyRequest", "GetIamPolicyReservationRequest", @@ -397,8 +403,10 @@ "GetRegionRequest", "GetRegionSecurityPolicyRequest", "GetRegionSslCertificateRequest", + "GetRegionSslPolicyRequest", "GetRegionTargetHttpProxyRequest", "GetRegionTargetHttpsProxyRequest", + "GetRegionTargetTcpProxyRequest", "GetRegionUrlMapRequest", "GetReservationRequest", "GetResourcePolicyRequest", @@ -520,8 +528,10 @@ "InsertRegionNotificationEndpointRequest", "InsertRegionSecurityPolicyRequest", "InsertRegionSslCertificateRequest", + "InsertRegionSslPolicyRequest", "InsertRegionTargetHttpProxyRequest", "InsertRegionTargetHttpsProxyRequest", + "InsertRegionTargetTcpProxyRequest", "InsertRegionUrlMapRequest", "InsertReservationRequest", "InsertResourcePolicyRequest", @@ -546,6 +556,8 @@ "InsertVpnTunnelRequest", "Instance", "InstanceAggregatedList", + "InstanceConsumptionData", + "InstanceConsumptionInfo", "InstanceGroup", "InstanceGroupAggregatedList", "InstanceGroupList", @@ -635,6 +647,7 @@ "ListAddressesRequest", "ListAssociationsFirewallPolicyRequest", "ListAutoscalersRequest", + "ListAvailableFeaturesRegionSslPoliciesRequest", "ListAvailableFeaturesSslPoliciesRequest", "ListBackendBucketsRequest", "ListBackendServicesRequest", @@ -700,8 +713,10 @@ "ListRegionOperationsRequest", "ListRegionSecurityPoliciesRequest", "ListRegionSslCertificatesRequest", + "ListRegionSslPoliciesRequest", "ListRegionTargetHttpProxiesRequest", "ListRegionTargetHttpsProxiesRequest", + "ListRegionTargetTcpProxiesRequest", "ListRegionUrlMapsRequest", "ListRegionsRequest", "ListReservationsRequest", @@ -851,6 +866,7 @@ "PatchRegionInstanceGroupManagerRequest", "PatchRegionNetworkFirewallPolicyRequest", "PatchRegionSecurityPolicyRequest", + "PatchRegionSslPolicyRequest", "PatchRegionTargetHttpsProxyRequest", "PatchRegionUrlMapRequest", "PatchRouterRequest", @@ -1011,6 +1027,7 @@ "SecurityPolicyAdaptiveProtectionConfig", "SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig", "SecurityPolicyAdvancedOptionsConfig", + "SecurityPolicyAdvancedOptionsConfigJsonCustomConfig", "SecurityPolicyDdosProtectionConfig", "SecurityPolicyList", "SecurityPolicyRecaptchaOptionsConfig", @@ -1046,6 +1063,7 @@ "SetDiskAutoDeleteInstanceRequest", "SetEdgeSecurityPolicyBackendBucketRequest", "SetEdgeSecurityPolicyBackendServiceRequest", + "SetIamPolicyBackendServiceRequest", "SetIamPolicyDiskRequest", "SetIamPolicyFirewallPolicyRequest", "SetIamPolicyImageRequest", @@ -1056,6 +1074,7 @@ "SetIamPolicyNetworkFirewallPolicyRequest", "SetIamPolicyNodeGroupRequest", "SetIamPolicyNodeTemplateRequest", + "SetIamPolicyRegionBackendServiceRequest", "SetIamPolicyRegionDiskRequest", "SetIamPolicyRegionNetworkFirewallPolicyRequest", "SetIamPolicyReservationRequest", @@ -1065,15 +1084,22 @@ "SetIamPolicySubnetworkRequest", "SetInstanceTemplateInstanceGroupManagerRequest", "SetInstanceTemplateRegionInstanceGroupManagerRequest", + "SetLabelsAddressRequest", "SetLabelsDiskRequest", "SetLabelsExternalVpnGatewayRequest", "SetLabelsForwardingRuleRequest", + "SetLabelsGlobalAddressRequest", "SetLabelsGlobalForwardingRuleRequest", "SetLabelsImageRequest", "SetLabelsInstanceRequest", + "SetLabelsInterconnectAttachmentRequest", + "SetLabelsInterconnectRequest", "SetLabelsRegionDiskRequest", + "SetLabelsSecurityPolicyRequest", "SetLabelsSnapshotRequest", + "SetLabelsTargetVpnGatewayRequest", "SetLabelsVpnGatewayRequest", + "SetLabelsVpnTunnelRequest", "SetMachineResourcesInstanceRequest", "SetMachineTypeInstanceRequest", "SetMetadataInstanceRequest", @@ -1123,8 +1149,10 @@ "SslCertificateManagedSslCertificate", "SslCertificateSelfManagedSslCertificate", "SslCertificatesScopedList", + "SslPoliciesAggregatedList", "SslPoliciesList", "SslPoliciesListAvailableFeaturesResponse", + "SslPoliciesScopedList", "SslPolicy", "SslPolicyReference", "StartInstanceRequest", @@ -3054,15 +3082,14 @@ class Address(proto.Message): allocating addresses using automatic NAT IP address allocation. - IPSEC_INTERCONNECT for addresses created from a private IP range that are reserved for a VLAN attachment - in an *IPsec-encrypted Cloud Interconnect* configuration. - These addresses are regional resources. Not currently - available publicly. - ``SHARED_LOADBALANCER_VIP`` for an - internal IP address that is assigned to multiple internal - forwarding rules. - ``PRIVATE_SERVICE_CONNECT`` for a - private network address that is used to configure Private - Service Connect. Only global internal addresses can use this - purpose. Check the Purpose enum for the list of possible - values. + in an *HA VPN over Cloud Interconnect* configuration. These + addresses are regional resources. - + ``SHARED_LOADBALANCER_VIP`` for an internal IP address that + is assigned to multiple internal forwarding rules. - + ``PRIVATE_SERVICE_CONNECT`` for a private network address + that is used to configure Private Service Connect. Only + global internal addresses can use this purpose. Check the + Purpose enum for the list of possible values. This field is a member of `oneof`_ ``_purpose``. region (str): @@ -3142,13 +3169,13 @@ class Purpose(proto.Enum): NAT_AUTO for the regional external IP addresses used by Cloud NAT when allocating addresses using automatic NAT IP address allocation. - IPSEC_INTERCONNECT for addresses created from a private IP range - that are reserved for a VLAN attachment in an *IPsec-encrypted Cloud + that are reserved for a VLAN attachment in an *HA VPN over Cloud Interconnect* configuration. These addresses are regional resources. - Not currently available publicly. - ``SHARED_LOADBALANCER_VIP`` for - an internal IP address that is assigned to multiple internal - forwarding rules. - ``PRIVATE_SERVICE_CONNECT`` for a private - network address that is used to configure Private Service Connect. - Only global internal addresses can use this purpose. + - ``SHARED_LOADBALANCER_VIP`` for an internal IP address that is + assigned to multiple internal forwarding rules. - + ``PRIVATE_SERVICE_CONNECT`` for a private network address that is + used to configure Private Service Connect. Only global internal + addresses can use this purpose. """ UNDEFINED_PURPOSE = 0 DNS_RESOLVER = 476114556 @@ -3463,6 +3490,16 @@ class AdvancedMachineFeatures(proto.Message): processor is assumed. This field is a member of `oneof`_ ``_threads_per_core``. + visible_core_count (int): + The number of physical cores to expose to an + instance. Multiply by the number of threads per + core to compute the total number of virtual CPUs + to expose to the instance. If unset, the number + of cores is inferred from the instance's nominal + CPU count and the underlying platform's SMT + width. + + This field is a member of `oneof`_ ``_visible_core_count``. """ enable_nested_virtualization = proto.Field( @@ -3480,6 +3517,11 @@ class AdvancedMachineFeatures(proto.Message): number=352611671, optional=True, ) + visible_core_count = proto.Field( + proto.INT32, + number=193198684, + optional=True, + ) class AggregatedListAcceleratorTypesRequest(proto.Message): @@ -7291,6 +7333,142 @@ class AggregatedListSslCertificatesRequest(proto.Message): ) +class AggregatedListSslPoliciesRequest(proto.Message): + r"""A request message for SslPolicies.AggregatedList. See the + method description for details. + + Attributes: + filter (str): + A filter expression that filters resources listed in the + response. Most Compute resources support two types of filter + expressions: expressions that support regular expressions + and expressions that follow API improvement proposal + AIP-160. If you want to use AIP-160, your expression must + specify the field name, an operator, and the value that you + want to use for filtering. The value must be a string, a + number, or a boolean. The operator must be either ``=``, + ``!=``, ``>``, ``<``, ``<=``, ``>=`` or ``:``. For example, + if you are filtering Compute Engine instances, you can + exclude instances named ``example-instance`` by specifying + ``name != example-instance``. The ``:`` operator can be used + with string fields to match substrings. For non-string + fields it is equivalent to the ``=`` operator. The ``:*`` + comparison can be used to test whether a key has been + defined. For example, to find all objects with ``owner`` + label use: ``labels.owner:*`` You can also filter nested + fields. For example, you could specify + ``scheduling.automaticRestart = false`` to include instances + only if they are not scheduled for automatic restarts. You + can use filtering on nested fields to filter based on + resource labels. To filter on multiple expressions, provide + each separate expression within parentheses. For example: + ``(scheduling.automaticRestart = true) (cpuPlatform = "Intel Skylake")`` + By default, each expression is an ``AND`` expression. + However, you can include ``AND`` and ``OR`` expressions + explicitly. For example: + ``(cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true)`` + If you want to use a regular expression, use the ``eq`` + (equal) or ``ne`` (not equal) operator against a single + un-parenthesized expression with or without quotes or + against multiple parenthesized expressions. Examples: + ``fieldname eq unquoted literal`` + ``fieldname eq 'single quoted literal'`` + ``fieldname eq "double quoted literal"`` + ``(fieldname1 eq literal) (fieldname2 ne "literal")`` The + literal value is interpreted as a regular expression using + Google RE2 library syntax. The literal value must match the + entire field. For example, to filter for instances that do + not end with name "instance", you would use + ``name ne .*instance``. + + This field is a member of `oneof`_ ``_filter``. + include_all_scopes (bool): + Indicates whether every visible scope for + each scope type (zone, region, global) should be + included in the response. For new resource types + added after this field, the flag has no effect + as new resource types will always include every + visible scope for each scope type in response. + For resource types which predate this field, if + this flag is omitted or false, only scopes of + the scope types where the resource type is + expected to be found will be included. + + This field is a member of `oneof`_ ``_include_all_scopes``. + max_results (int): + The maximum number of results per page that should be + returned. If the number of available results is larger than + ``maxResults``, Compute Engine returns a ``nextPageToken`` + that can be used to get the next page of results in + subsequent list requests. Acceptable values are ``0`` to + ``500``, inclusive. (Default: ``500``) + + This field is a member of `oneof`_ ``_max_results``. + order_by (str): + Sorts list results by a certain order. By default, results + are returned in alphanumerical order based on the resource + name. You can also sort results in descending order based on + the creation timestamp using + ``orderBy="creationTimestamp desc"``. This sorts results + based on the ``creationTimestamp`` field in reverse + chronological order (newest result first). Use this to sort + resources like operations so that the newest operation is + returned first. Currently, only sorting by ``name`` or + ``creationTimestamp desc`` is supported. + + This field is a member of `oneof`_ ``_order_by``. + page_token (str): + Specifies a page token to use. Set ``pageToken`` to the + ``nextPageToken`` returned by a previous list request to get + the next page of results. + + This field is a member of `oneof`_ ``_page_token``. + project (str): + Name of the project scoping this request. + return_partial_success (bool): + Opt-in for partial success behavior which + provides partial results in case of failure. The + default value is false. + + This field is a member of `oneof`_ ``_return_partial_success``. + """ + + filter = proto.Field( + proto.STRING, + number=336120696, + optional=True, + ) + include_all_scopes = proto.Field( + proto.BOOL, + number=391327988, + optional=True, + ) + max_results = proto.Field( + proto.UINT32, + number=54715419, + optional=True, + ) + order_by = proto.Field( + proto.STRING, + number=160562920, + optional=True, + ) + page_token = proto.Field( + proto.STRING, + number=19994697, + optional=True, + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + return_partial_success = proto.Field( + proto.BOOL, + number=517198390, + optional=True, + ) + + class AggregatedListSubnetworksRequest(proto.Message): r"""A request message for Subnetworks.AggregatedList. See the method description for details. @@ -9054,6 +9232,13 @@ class AttachedDisk(proto.Message): The size of the disk in GB. This field is a member of `oneof`_ ``_disk_size_gb``. + force_attach (bool): + [Input Only] Whether to force attach the regional disk even + if it's currently attached to another instance. If you try + to force attach a zonal disk to an instance, you will + receive an error. + + This field is a member of `oneof`_ ``_force_attach``. guest_os_features (Sequence[google.cloud.compute_v1.types.GuestOsFeature]): A list of features to enable on the guest operating system. Applicable only for bootable @@ -9077,13 +9262,12 @@ class AttachedDisk(proto.Message): interface (str): Specifies the disk interface to use for attaching this disk, which is either SCSI or - NVME. The default is SCSI. Persistent disks must - always use SCSI and the request will fail if you - attempt to attach a persistent disk in any other - format than SCSI. Local SSDs can use either NVME - or SCSI. For performance characteristics of SCSI - over NVMe, see Local SSD performance. Check the - Interface enum for the list of possible values. + NVME. For most machine types, the default is + SCSI. Local SSDs can use either NVME or SCSI. In + certain configurations, persistent disks can use + NVMe. For more information, see About persistent + disks. Check the Interface enum for the list of + possible values. This field is a member of `oneof`_ ``_interface``. kind (str): @@ -9138,11 +9322,10 @@ class Architecture(proto.Enum): class Interface(proto.Enum): r"""Specifies the disk interface to use for attaching this disk, - which is either SCSI or NVME. The default is SCSI. Persistent - disks must always use SCSI and the request will fail if you - attempt to attach a persistent disk in any other format than - SCSI. Local SSDs can use either NVME or SCSI. For performance - characteristics of SCSI over NVMe, see Local SSD performance. + which is either SCSI or NVME. For most machine types, the + default is SCSI. Local SSDs can use either NVME or SCSI. In + certain configurations, persistent disks can use NVMe. For more + information, see About persistent disks. """ UNDEFINED_INTERFACE = 0 NVME = 2408800 @@ -9196,6 +9379,11 @@ class Type(proto.Enum): number=316263735, optional=True, ) + force_attach = proto.Field( + proto.BOOL, + number=142758425, + optional=True, + ) guest_os_features = proto.RepeatedField( proto.MESSAGE, number=79294545, @@ -9330,6 +9518,12 @@ class AttachedDiskInitializeParams(proto.Message): see the Extreme persistent disk documentation. This field is a member of `oneof`_ ``_provisioned_iops``. + resource_manager_tags (Mapping[str, str]): + Resource manager tags to be bound to the disk. Tag keys and + values have the same definition as resource manager tags. + Keys must be in the format ``tagKeys/{tag_key_id}``, and + values are in the format ``tagValues/456``. The field is + ignored (both PUT & PATCH) when empty. resource_policies (Sequence[str]): Resource policies applied to this disk for automatic snapshot creations. Specified using @@ -9454,6 +9648,11 @@ class OnUpdateAction(proto.Enum): number=186769108, optional=True, ) + resource_manager_tags = proto.MapField( + proto.STRING, + proto.STRING, + number=377671164, + ) resource_policies = proto.RepeatedField( proto.STRING, number=22220385, @@ -10764,6 +10963,14 @@ class BackendBucket(proto.Message): BackendBucket. This field is a member of `oneof`_ ``_cdn_policy``. + compression_mode (str): + Compress text responses using Brotli or gzip + compression, based on the client's + Accept-Encoding header. Check the + CompressionMode enum for the list of possible + values. + + This field is a member of `oneof`_ ``_compression_mode``. creation_timestamp (str): [Output Only] Creation timestamp in RFC3339 text format. @@ -10813,6 +11020,14 @@ class BackendBucket(proto.Message): This field is a member of `oneof`_ ``_self_link``. """ + class CompressionMode(proto.Enum): + r"""Compress text responses using Brotli or gzip compression, + based on the client's Accept-Encoding header. + """ + UNDEFINED_COMPRESSION_MODE = 0 + AUTOMATIC = 165298699 + DISABLED = 516696700 + bucket_name = proto.Field( proto.STRING, number=283610048, @@ -10824,6 +11039,11 @@ class BackendBucket(proto.Message): optional=True, message="BackendBucketCdnPolicy", ) + compression_mode = proto.Field( + proto.STRING, + number=95520988, + optional=True, + ) creation_timestamp = proto.Field( proto.STRING, number=30525366, @@ -11291,6 +11511,14 @@ class BackendService(proto.Message): circuit_breakers (google.cloud.compute_v1.types.CircuitBreakers): This field is a member of `oneof`_ ``_circuit_breakers``. + compression_mode (str): + Compress text responses using Brotli or gzip + compression, based on the client's + Accept-Encoding header. Check the + CompressionMode enum for the list of possible + values. + + This field is a member of `oneof`_ ``_compression_mode``. connection_draining (google.cloud.compute_v1.types.ConnectionDraining): This field is a member of `oneof`_ ``_connection_draining``. @@ -11589,6 +11817,14 @@ class BackendService(proto.Message): This field is a member of `oneof`_ ``_timeout_sec``. """ + class CompressionMode(proto.Enum): + r"""Compress text responses using Brotli or gzip compression, + based on the client's Accept-Encoding header. + """ + UNDEFINED_COMPRESSION_MODE = 0 + AUTOMATIC = 165298699 + DISABLED = 516696700 + class LoadBalancingScheme(proto.Enum): r"""Specifies the load balancer type. A backend service created for one type of load balancer cannot be used with another. For @@ -11699,6 +11935,11 @@ class SessionAffinity(proto.Enum): optional=True, message="CircuitBreakers", ) + compression_mode = proto.Field( + proto.STRING, + number=95520988, + optional=True, + ) connection_draining = proto.Field( proto.MESSAGE, number=461096747, @@ -12708,9 +12949,9 @@ class BackendServiceLogConfig(proto.Message): Attributes: enable (bool): - This field denotes whether to enable logging - for the load balancer traffic served by this - backend service. + Denotes whether to enable logging for the + load balancer traffic served by this backend + service. The default value is false. This field is a member of `oneof`_ ``_enable``. sample_rate (float): @@ -12719,7 +12960,7 @@ class BackendServiceLogConfig(proto.Message): 1]. This configures the sampling rate of requests to the load balancer where 1.0 means all logged requests are reported and 0.0 means no logged requests are reported. The - default value is 0.0. + default value is 1.0. This field is a member of `oneof`_ ``_sample_rate``. """ @@ -13235,13 +13476,19 @@ class Binding(proto.Message): who is on the internet; with or without a Google account. \* ``allAuthenticatedUsers``: A special identifier that represents anyone who is authenticated with a Google account - or a service account. \* ``user:{emailid}``: An email - address that represents a specific Google account. For - example, ``alice@example.com`` . \* - ``serviceAccount:{emailid}``: An email address that - represents a service account. For example, - ``my-other-app@appspot.gserviceaccount.com``. \* - ``group:{emailid}``: An email address that represents a + or a service account. Does not include identities that come + from external identity providers (IdPs) through identity + federation. \* ``user:{emailid}``: An email address that + represents a specific Google account. For example, + ``alice@example.com`` . \* ``serviceAccount:{emailid}``: An + email address that represents a Google service account. For + example, ``my-other-app@appspot.gserviceaccount.com``. \* + ``serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]``: + An identifier for a `Kubernetes service + account `__. + For example, + ``my-project.svc.id.goog[my-namespace/my-kubernetes-sa]``. + \* ``group:{emailid}``: An email address that represents a Google group. For example, ``admins@example.com``. \* ``deleted:user:{emailid}?uid={uniqueid}``: An email address (plus unique identifier) representing a user that has been @@ -13928,6 +14175,9 @@ class Commitment(proto.Message): a license commitment. This field is a member of `oneof`_ ``_license_resource``. + merge_source_commitments (Sequence[str]): + List of source commitments to be merged into + a new commitment. name (str): Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, @@ -13961,6 +14211,11 @@ class Commitment(proto.Message): [Output Only] Server-defined URL for the resource. This field is a member of `oneof`_ ``_self_link``. + split_source_commitment (str): + Source commitment to be splitted into a new + commitment. + + This field is a member of `oneof`_ ``_split_source_commitment``. start_timestamp (str): [Output Only] Commitment start time in RFC3339 text format. @@ -14085,6 +14340,10 @@ class Type(proto.Enum): optional=True, message="LicenseResourceCommitment", ) + merge_source_commitments = proto.RepeatedField( + proto.STRING, + number=188093761, + ) name = proto.Field( proto.STRING, number=3373707, @@ -14115,6 +14374,11 @@ class Type(proto.Enum): number=456214797, optional=True, ) + split_source_commitment = proto.Field( + proto.STRING, + number=402611156, + optional=True, + ) start_timestamp = proto.Field( proto.STRING, number=83645817, @@ -17481,6 +17745,58 @@ class DeleteRegionSslCertificateRequest(proto.Message): ) +class DeleteRegionSslPolicyRequest(proto.Message): + r"""A request message for RegionSslPolicies.Delete. See the + method description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + ssl_policy (str): + Name of the SSL policy to delete. The name + must be 1-63 characters long, and comply with + RFC1035. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + ssl_policy = proto.Field( + proto.STRING, + number=295190213, + ) + + class DeleteRegionTargetHttpProxyRequest(proto.Message): r"""A request message for RegionTargetHttpProxies.Delete. See the method description for details. @@ -17583,6 +17899,57 @@ class DeleteRegionTargetHttpsProxyRequest(proto.Message): ) +class DeleteRegionTargetTcpProxyRequest(proto.Message): + r"""A request message for RegionTargetTcpProxies.Delete. See the + method description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + target_tcp_proxy (str): + Name of the TargetTcpProxy resource to + delete. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + target_tcp_proxy = proto.Field( + proto.STRING, + number=503065442, + ) + + class DeleteRegionUrlMapRequest(proto.Message): r"""A request message for RegionUrlMaps.Delete. See the method description for details. @@ -19305,6 +19672,11 @@ class Disk(proto.Message): Internal use only. This field is a member of `oneof`_ ``_options``. + params (google.cloud.compute_v1.types.DiskParams): + Input only. [Input Only] Additional params passed with the + request, but not persisted as part of resource payload. + + This field is a member of `oneof`_ ``_params``. physical_block_size_bytes (int): Physical block size of the persistent disk, in bytes. If not present in a request, a default @@ -19588,6 +19960,12 @@ class Status(proto.Enum): number=361137822, optional=True, ) + params = proto.Field( + proto.MESSAGE, + number=78313862, + optional=True, + message="DiskParams", + ) physical_block_size_bytes = proto.Field( proto.INT64, number=420007943, @@ -19976,6 +20354,25 @@ class DiskMoveRequest(proto.Message): ) +class DiskParams(proto.Message): + r"""Additional disk params. + + Attributes: + resource_manager_tags (Mapping[str, str]): + Resource manager tags to be bound to the disk. Tag keys and + values have the same definition as resource manager tags. + Keys must be in the format ``tagKeys/{tag_key_id}``, and + values are in the format ``tagValues/456``. The field is + ignored (both PUT & PATCH) when empty. + """ + + resource_manager_tags = proto.MapField( + proto.STRING, + proto.STRING, + number=377671164, + ) + + class DiskType(proto.Message): r"""Represents a Disk Type resource. Google Compute Engine has two Disk Type resources: \* @@ -21309,10 +21706,9 @@ class Firewall(proto.Message): direction (str): Direction of traffic to which this firewall applies, either ``INGRESS`` or ``EGRESS``. The default is ``INGRESS``. For - ``INGRESS`` traffic, you cannot specify the - destinationRanges field, and for ``EGRESS`` traffic, you - cannot specify the sourceRanges or sourceTags fields. Check - the Direction enum for the list of possible values. + ``EGRESS`` traffic, you cannot specify the sourceTags + fields. Check the Direction enum for the list of possible + values. This field is a member of `oneof`_ ``_direction``. disabled (bool): @@ -21450,9 +21846,7 @@ class Firewall(proto.Message): class Direction(proto.Enum): r"""Direction of traffic to which this firewall applies, either ``INGRESS`` or ``EGRESS``. The default is ``INGRESS``. For - ``INGRESS`` traffic, you cannot specify the destinationRanges field, - and for ``EGRESS`` traffic, you cannot specify the sourceRanges or - sourceTags fields. + ``EGRESS`` traffic, you cannot specify the sourceTags fields. """ UNDEFINED_DIRECTION = 0 EGRESS = 432880501 @@ -21710,7 +22104,8 @@ class FirewallPolicy(proto.Message): Deprecated, please use short name instead. User-provided name of the Organization firewall policy. The name should be unique in the organization in which the firewall policy is - created. This name must be set on creation and cannot be + created. This field is not applicable to network firewall + policies. This name must be set on creation and cannot be changed. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression @@ -21745,13 +22140,14 @@ class FirewallPolicy(proto.Message): This field is a member of `oneof`_ ``_kind``. name (str): - [Output Only] Name of the resource. It is a numeric ID - allocated by GCP which uniquely identifies the Firewall - Policy. + Name of the resource. For Organization Firewall Policies + it's a [Output Only] numeric ID allocated by GCP which + uniquely identifies the Organization Firewall Policy. This field is a member of `oneof`_ ``_name``. parent (str): - [Output Only] The parent of the firewall policy. + [Output Only] The parent of the firewall policy. This field + is not applicable to network firewall policies. This field is a member of `oneof`_ ``_parent``. region (str): @@ -21784,16 +22180,17 @@ class FirewallPolicy(proto.Message): This field is a member of `oneof`_ ``_self_link_with_id``. short_name (str): - User-provided name of the Organization firewall plicy. The + User-provided name of the Organization firewall policy. The name should be unique in the organization in which the - firewall policy is created. This name must be set on - creation and cannot be changed. The name must be 1-63 - characters long, and comply with RFC1035. Specifically, the - name must be 1-63 characters long and match the regular - expression ``[a-z]([-a-z0-9]*[a-z0-9])?`` which means the - first character must be a lowercase letter, and all - following characters must be a dash, lowercase letter, or - digit, except the last character, which cannot be a dash. + firewall policy is created. This field is not applicable to + network firewall policies. This name must be set on creation + and cannot be changed. The name must be 1-63 characters + long, and comply with RFC1035. Specifically, the name must + be 1-63 characters long and match the regular expression + ``[a-z]([-a-z0-9]*[a-z0-9])?`` which means the first + character must be a lowercase letter, and all following + characters must be a dash, lowercase letter, or digit, + except the last character, which cannot be a dash. This field is a member of `oneof`_ ``_short_name``. """ @@ -23953,6 +24350,36 @@ class GetHealthTargetPoolRequest(proto.Message): ) +class GetIamPolicyBackendServiceRequest(proto.Message): + r"""A request message for BackendServices.GetIamPolicy. See the + method description for details. + + Attributes: + options_requested_policy_version (int): + Requested IAM Policy version. + + This field is a member of `oneof`_ ``_options_requested_policy_version``. + project (str): + Project ID for this request. + resource (str): + Name or id of the resource for this request. + """ + + options_requested_policy_version = proto.Field( + proto.INT32, + number=499220029, + optional=True, + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class GetIamPolicyDiskRequest(proto.Message): r"""A request message for Disks.GetIamPolicy. See the method description for details. @@ -24271,6 +24698,42 @@ class GetIamPolicyNodeTemplateRequest(proto.Message): ) +class GetIamPolicyRegionBackendServiceRequest(proto.Message): + r"""A request message for RegionBackendServices.GetIamPolicy. See + the method description for details. + + Attributes: + options_requested_policy_version (int): + Requested IAM Policy version. + + This field is a member of `oneof`_ ``_options_requested_policy_version``. + project (str): + Project ID for this request. + region (str): + The name of the region for this request. + resource (str): + Name or id of the resource for this request. + """ + + options_requested_policy_version = proto.Field( + proto.INT32, + number=499220029, + optional=True, + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class GetIamPolicyRegionDiskRequest(proto.Message): r"""A request message for RegionDisks.GetIamPolicy. See the method description for details. @@ -25672,6 +26135,35 @@ class GetRegionSslCertificateRequest(proto.Message): ) +class GetRegionSslPolicyRequest(proto.Message): + r"""A request message for RegionSslPolicies.Get. See the method + description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + ssl_policy (str): + Name of the SSL policy to update. The name + must be 1-63 characters long, and comply with + RFC1035. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + ssl_policy = proto.Field( + proto.STRING, + number=295190213, + ) + + class GetRegionTargetHttpProxyRequest(proto.Message): r"""A request message for RegionTargetHttpProxies.Get. See the method description for details. @@ -25728,6 +26220,34 @@ class GetRegionTargetHttpsProxyRequest(proto.Message): ) +class GetRegionTargetTcpProxyRequest(proto.Message): + r"""A request message for RegionTargetTcpProxies.Get. See the + method description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + target_tcp_proxy (str): + Name of the TargetTcpProxy resource to + return. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + target_tcp_proxy = proto.Field( + proto.STRING, + number=503065442, + ) + + class GetRegionUrlMapRequest(proto.Message): r"""A request message for RegionUrlMaps.Get. See the method description for details. @@ -29167,9 +29687,9 @@ class HttpRouteRule(proto.Message): cannot contain any weightedBackendServices. Only one of urlRedirect, service or routeAction.weightedBackendService must be set. - UrlMaps for external HTTP(S) load balancers - support only the urlRewrite action within a - route rule's routeAction. + URL maps for Classic external HTTP(S) load + balancers only support the urlRewrite action + within a route rule's routeAction. This field is a member of `oneof`_ ``_route_action``. service (str): @@ -32062,12 +32582,68 @@ class InsertRegionSecurityPolicyRequest(proto.Message): 00000000-0000-0000-0000-000000000000). This field is a member of `oneof`_ ``_request_id``. - security_policy_resource (google.cloud.compute_v1.types.SecurityPolicy): + security_policy_resource (google.cloud.compute_v1.types.SecurityPolicy): + The body resource for this request + validate_only (bool): + If true, the request will not be committed. + + This field is a member of `oneof`_ ``_validate_only``. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + security_policy_resource = proto.Field( + proto.MESSAGE, + number=216159612, + message="SecurityPolicy", + ) + validate_only = proto.Field( + proto.BOOL, + number=242744629, + optional=True, + ) + + +class InsertRegionSslCertificateRequest(proto.Message): + r"""A request message for RegionSslCertificates.Insert. See the + method description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + ssl_certificate_resource (google.cloud.compute_v1.types.SslCertificate): The body resource for this request - validate_only (bool): - If true, the request will not be committed. - - This field is a member of `oneof`_ ``_validate_only``. """ project = proto.Field( @@ -32083,20 +32659,15 @@ class InsertRegionSecurityPolicyRequest(proto.Message): number=37109963, optional=True, ) - security_policy_resource = proto.Field( + ssl_certificate_resource = proto.Field( proto.MESSAGE, - number=216159612, - message="SecurityPolicy", - ) - validate_only = proto.Field( - proto.BOOL, - number=242744629, - optional=True, + number=180709897, + message="SslCertificate", ) -class InsertRegionSslCertificateRequest(proto.Message): - r"""A request message for RegionSslCertificates.Insert. See the +class InsertRegionSslPolicyRequest(proto.Message): + r"""A request message for RegionSslPolicies.Insert. See the method description for details. Attributes: @@ -32122,7 +32693,7 @@ class InsertRegionSslCertificateRequest(proto.Message): 00000000-0000-0000-0000-000000000000). This field is a member of `oneof`_ ``_request_id``. - ssl_certificate_resource (google.cloud.compute_v1.types.SslCertificate): + ssl_policy_resource (google.cloud.compute_v1.types.SslPolicy): The body resource for this request """ @@ -32139,10 +32710,10 @@ class InsertRegionSslCertificateRequest(proto.Message): number=37109963, optional=True, ) - ssl_certificate_resource = proto.Field( + ssl_policy_resource = proto.Field( proto.MESSAGE, - number=180709897, - message="SslCertificate", + number=274891848, + message="SslPolicy", ) @@ -32248,6 +32819,57 @@ class InsertRegionTargetHttpsProxyRequest(proto.Message): ) +class InsertRegionTargetTcpProxyRequest(proto.Message): + r"""A request message for RegionTargetTcpProxies.Insert. See the + method description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + target_tcp_proxy_resource (google.cloud.compute_v1.types.TargetTcpProxy): + The body resource for this request + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + target_tcp_proxy_resource = proto.Field( + proto.MESSAGE, + number=145913931, + message="TargetTcpProxy", + ) + + class InsertRegionUrlMapRequest(proto.Message): r"""A request message for RegionUrlMaps.Insert. See the method description for details. @@ -33915,6 +34537,81 @@ def raw_page(self): ) +class InstanceConsumptionData(proto.Message): + r""" + + Attributes: + consumption_info (google.cloud.compute_v1.types.InstanceConsumptionInfo): + Resources consumed by the instance. + + This field is a member of `oneof`_ ``_consumption_info``. + instance (str): + Server-defined URL for the instance. + + This field is a member of `oneof`_ ``_instance``. + """ + + consumption_info = proto.Field( + proto.MESSAGE, + number=146354898, + optional=True, + message="InstanceConsumptionInfo", + ) + instance = proto.Field( + proto.STRING, + number=18257045, + optional=True, + ) + + +class InstanceConsumptionInfo(proto.Message): + r""" + + Attributes: + guest_cpus (int): + The number of virtual CPUs that are available + to the instance. + + This field is a member of `oneof`_ ``_guest_cpus``. + local_ssd_gb (int): + The amount of local SSD storage available to + the instance, defined in GiB. + + This field is a member of `oneof`_ ``_local_ssd_gb``. + memory_mb (int): + The amount of physical memory available to + the instance, defined in MiB. + + This field is a member of `oneof`_ ``_memory_mb``. + min_node_cpus (int): + The minimal guaranteed number of virtual CPUs + that are reserved. + + This field is a member of `oneof`_ ``_min_node_cpus``. + """ + + guest_cpus = proto.Field( + proto.INT32, + number=393356754, + optional=True, + ) + local_ssd_gb = proto.Field( + proto.INT32, + number=329237578, + optional=True, + ) + memory_mb = proto.Field( + proto.INT32, + number=116001171, + optional=True, + ) + min_node_cpus = proto.Field( + proto.INT32, + number=317231675, + optional=True, + ) + + class InstanceGroup(proto.Message): r"""Represents an Instance Group resource. Instance Groups can be used to configure a target for load balancing. Instance groups @@ -37464,10 +38161,10 @@ class InterconnectAttachment(proto.Message): carries only encrypted traffic that is encrypted by an IPsec device, such as an HA VPN gateway or third-party IPsec VPN. VMs cannot directly send traffic to, or receive traffic - from, such a VLAN attachment. To use *IPsec-encrypted Cloud + from, such a VLAN attachment. To use *HA VPN over Cloud Interconnect*, the VLAN attachment must be created with this - option. Not currently available publicly. Check the - Encryption enum for the list of possible values. + option. Check the Encryption enum for the list of possible + values. This field is a member of `oneof`_ ``_encryption``. google_reference_id (str): @@ -37698,9 +38395,9 @@ class Encryption(proto.Enum): - The VLAN attachment carries only encrypted traffic that is encrypted by an IPsec device, such as an HA VPN gateway or third-party IPsec VPN. VMs cannot directly send traffic to, or - receive traffic from, such a VLAN attachment. To use - *IPsec-encrypted Cloud Interconnect*, the VLAN attachment must be - created with this option. Not currently available publicly. + receive traffic from, such a VLAN attachment. To use *HA VPN over + Cloud Interconnect*, the VLAN attachment must be created with this + option. """ UNDEFINED_ENCRYPTION = 0 IPSEC = 69882282 @@ -39856,8 +40553,133 @@ class ListAutoscalersRequest(proto.Message): default value is false. This field is a member of `oneof`_ ``_return_partial_success``. - zone (str): - Name of the zone for this request. + zone (str): + Name of the zone for this request. + """ + + filter = proto.Field( + proto.STRING, + number=336120696, + optional=True, + ) + max_results = proto.Field( + proto.UINT32, + number=54715419, + optional=True, + ) + order_by = proto.Field( + proto.STRING, + number=160562920, + optional=True, + ) + page_token = proto.Field( + proto.STRING, + number=19994697, + optional=True, + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + return_partial_success = proto.Field( + proto.BOOL, + number=517198390, + optional=True, + ) + zone = proto.Field( + proto.STRING, + number=3744684, + ) + + +class ListAvailableFeaturesRegionSslPoliciesRequest(proto.Message): + r"""A request message for + RegionSslPolicies.ListAvailableFeatures. See the method + description for details. + + Attributes: + filter (str): + A filter expression that filters resources listed in the + response. Most Compute resources support two types of filter + expressions: expressions that support regular expressions + and expressions that follow API improvement proposal + AIP-160. If you want to use AIP-160, your expression must + specify the field name, an operator, and the value that you + want to use for filtering. The value must be a string, a + number, or a boolean. The operator must be either ``=``, + ``!=``, ``>``, ``<``, ``<=``, ``>=`` or ``:``. For example, + if you are filtering Compute Engine instances, you can + exclude instances named ``example-instance`` by specifying + ``name != example-instance``. The ``:`` operator can be used + with string fields to match substrings. For non-string + fields it is equivalent to the ``=`` operator. The ``:*`` + comparison can be used to test whether a key has been + defined. For example, to find all objects with ``owner`` + label use: ``labels.owner:*`` You can also filter nested + fields. For example, you could specify + ``scheduling.automaticRestart = false`` to include instances + only if they are not scheduled for automatic restarts. You + can use filtering on nested fields to filter based on + resource labels. To filter on multiple expressions, provide + each separate expression within parentheses. For example: + ``(scheduling.automaticRestart = true) (cpuPlatform = "Intel Skylake")`` + By default, each expression is an ``AND`` expression. + However, you can include ``AND`` and ``OR`` expressions + explicitly. For example: + ``(cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true)`` + If you want to use a regular expression, use the ``eq`` + (equal) or ``ne`` (not equal) operator against a single + un-parenthesized expression with or without quotes or + against multiple parenthesized expressions. Examples: + ``fieldname eq unquoted literal`` + ``fieldname eq 'single quoted literal'`` + ``fieldname eq "double quoted literal"`` + ``(fieldname1 eq literal) (fieldname2 ne "literal")`` The + literal value is interpreted as a regular expression using + Google RE2 library syntax. The literal value must match the + entire field. For example, to filter for instances that do + not end with name "instance", you would use + ``name ne .*instance``. + + This field is a member of `oneof`_ ``_filter``. + max_results (int): + The maximum number of results per page that should be + returned. If the number of available results is larger than + ``maxResults``, Compute Engine returns a ``nextPageToken`` + that can be used to get the next page of results in + subsequent list requests. Acceptable values are ``0`` to + ``500``, inclusive. (Default: ``500``) + + This field is a member of `oneof`_ ``_max_results``. + order_by (str): + Sorts list results by a certain order. By default, results + are returned in alphanumerical order based on the resource + name. You can also sort results in descending order based on + the creation timestamp using + ``orderBy="creationTimestamp desc"``. This sorts results + based on the ``creationTimestamp`` field in reverse + chronological order (newest result first). Use this to sort + resources like operations so that the newest operation is + returned first. Currently, only sorting by ``name`` or + ``creationTimestamp desc`` is supported. + + This field is a member of `oneof`_ ``_order_by``. + page_token (str): + Specifies a page token to use. Set ``pageToken`` to the + ``nextPageToken`` returned by a previous list request to get + the next page of results. + + This field is a member of `oneof`_ ``_page_token``. + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + return_partial_success (bool): + Opt-in for partial success behavior which + provides partial results in case of failure. The + default value is false. + + This field is a member of `oneof`_ ``_return_partial_success``. """ filter = proto.Field( @@ -39884,15 +40706,15 @@ class ListAutoscalersRequest(proto.Message): proto.STRING, number=227560217, ) + region = proto.Field( + proto.STRING, + number=138946292, + ) return_partial_success = proto.Field( proto.BOOL, number=517198390, optional=True, ) - zone = proto.Field( - proto.STRING, - number=3744684, - ) class ListAvailableFeaturesSslPoliciesRequest(proto.Message): @@ -46996,8 +47818,256 @@ class ListRegionHealthChecksRequest(proto.Message): ) -class ListRegionInstanceGroupManagersRequest(proto.Message): - r"""A request message for RegionInstanceGroupManagers.List. See +class ListRegionInstanceGroupManagersRequest(proto.Message): + r"""A request message for RegionInstanceGroupManagers.List. See + the method description for details. + + Attributes: + filter (str): + A filter expression that filters resources listed in the + response. Most Compute resources support two types of filter + expressions: expressions that support regular expressions + and expressions that follow API improvement proposal + AIP-160. If you want to use AIP-160, your expression must + specify the field name, an operator, and the value that you + want to use for filtering. The value must be a string, a + number, or a boolean. The operator must be either ``=``, + ``!=``, ``>``, ``<``, ``<=``, ``>=`` or ``:``. For example, + if you are filtering Compute Engine instances, you can + exclude instances named ``example-instance`` by specifying + ``name != example-instance``. The ``:`` operator can be used + with string fields to match substrings. For non-string + fields it is equivalent to the ``=`` operator. The ``:*`` + comparison can be used to test whether a key has been + defined. For example, to find all objects with ``owner`` + label use: ``labels.owner:*`` You can also filter nested + fields. For example, you could specify + ``scheduling.automaticRestart = false`` to include instances + only if they are not scheduled for automatic restarts. You + can use filtering on nested fields to filter based on + resource labels. To filter on multiple expressions, provide + each separate expression within parentheses. For example: + ``(scheduling.automaticRestart = true) (cpuPlatform = "Intel Skylake")`` + By default, each expression is an ``AND`` expression. + However, you can include ``AND`` and ``OR`` expressions + explicitly. For example: + ``(cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true)`` + If you want to use a regular expression, use the ``eq`` + (equal) or ``ne`` (not equal) operator against a single + un-parenthesized expression with or without quotes or + against multiple parenthesized expressions. Examples: + ``fieldname eq unquoted literal`` + ``fieldname eq 'single quoted literal'`` + ``fieldname eq "double quoted literal"`` + ``(fieldname1 eq literal) (fieldname2 ne "literal")`` The + literal value is interpreted as a regular expression using + Google RE2 library syntax. The literal value must match the + entire field. For example, to filter for instances that do + not end with name "instance", you would use + ``name ne .*instance``. + + This field is a member of `oneof`_ ``_filter``. + max_results (int): + The maximum number of results per page that should be + returned. If the number of available results is larger than + ``maxResults``, Compute Engine returns a ``nextPageToken`` + that can be used to get the next page of results in + subsequent list requests. Acceptable values are ``0`` to + ``500``, inclusive. (Default: ``500``) + + This field is a member of `oneof`_ ``_max_results``. + order_by (str): + Sorts list results by a certain order. By default, results + are returned in alphanumerical order based on the resource + name. You can also sort results in descending order based on + the creation timestamp using + ``orderBy="creationTimestamp desc"``. This sorts results + based on the ``creationTimestamp`` field in reverse + chronological order (newest result first). Use this to sort + resources like operations so that the newest operation is + returned first. Currently, only sorting by ``name`` or + ``creationTimestamp desc`` is supported. + + This field is a member of `oneof`_ ``_order_by``. + page_token (str): + Specifies a page token to use. Set ``pageToken`` to the + ``nextPageToken`` returned by a previous list request to get + the next page of results. + + This field is a member of `oneof`_ ``_page_token``. + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + return_partial_success (bool): + Opt-in for partial success behavior which + provides partial results in case of failure. The + default value is false. + + This field is a member of `oneof`_ ``_return_partial_success``. + """ + + filter = proto.Field( + proto.STRING, + number=336120696, + optional=True, + ) + max_results = proto.Field( + proto.UINT32, + number=54715419, + optional=True, + ) + order_by = proto.Field( + proto.STRING, + number=160562920, + optional=True, + ) + page_token = proto.Field( + proto.STRING, + number=19994697, + optional=True, + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + return_partial_success = proto.Field( + proto.BOOL, + number=517198390, + optional=True, + ) + + +class ListRegionInstanceGroupsRequest(proto.Message): + r"""A request message for RegionInstanceGroups.List. See the + method description for details. + + Attributes: + filter (str): + A filter expression that filters resources listed in the + response. Most Compute resources support two types of filter + expressions: expressions that support regular expressions + and expressions that follow API improvement proposal + AIP-160. If you want to use AIP-160, your expression must + specify the field name, an operator, and the value that you + want to use for filtering. The value must be a string, a + number, or a boolean. The operator must be either ``=``, + ``!=``, ``>``, ``<``, ``<=``, ``>=`` or ``:``. For example, + if you are filtering Compute Engine instances, you can + exclude instances named ``example-instance`` by specifying + ``name != example-instance``. The ``:`` operator can be used + with string fields to match substrings. For non-string + fields it is equivalent to the ``=`` operator. The ``:*`` + comparison can be used to test whether a key has been + defined. For example, to find all objects with ``owner`` + label use: ``labels.owner:*`` You can also filter nested + fields. For example, you could specify + ``scheduling.automaticRestart = false`` to include instances + only if they are not scheduled for automatic restarts. You + can use filtering on nested fields to filter based on + resource labels. To filter on multiple expressions, provide + each separate expression within parentheses. For example: + ``(scheduling.automaticRestart = true) (cpuPlatform = "Intel Skylake")`` + By default, each expression is an ``AND`` expression. + However, you can include ``AND`` and ``OR`` expressions + explicitly. For example: + ``(cpuPlatform = "Intel Skylake") OR (cpuPlatform = "Intel Broadwell") AND (scheduling.automaticRestart = true)`` + If you want to use a regular expression, use the ``eq`` + (equal) or ``ne`` (not equal) operator against a single + un-parenthesized expression with or without quotes or + against multiple parenthesized expressions. Examples: + ``fieldname eq unquoted literal`` + ``fieldname eq 'single quoted literal'`` + ``fieldname eq "double quoted literal"`` + ``(fieldname1 eq literal) (fieldname2 ne "literal")`` The + literal value is interpreted as a regular expression using + Google RE2 library syntax. The literal value must match the + entire field. For example, to filter for instances that do + not end with name "instance", you would use + ``name ne .*instance``. + + This field is a member of `oneof`_ ``_filter``. + max_results (int): + The maximum number of results per page that should be + returned. If the number of available results is larger than + ``maxResults``, Compute Engine returns a ``nextPageToken`` + that can be used to get the next page of results in + subsequent list requests. Acceptable values are ``0`` to + ``500``, inclusive. (Default: ``500``) + + This field is a member of `oneof`_ ``_max_results``. + order_by (str): + Sorts list results by a certain order. By default, results + are returned in alphanumerical order based on the resource + name. You can also sort results in descending order based on + the creation timestamp using + ``orderBy="creationTimestamp desc"``. This sorts results + based on the ``creationTimestamp`` field in reverse + chronological order (newest result first). Use this to sort + resources like operations so that the newest operation is + returned first. Currently, only sorting by ``name`` or + ``creationTimestamp desc`` is supported. + + This field is a member of `oneof`_ ``_order_by``. + page_token (str): + Specifies a page token to use. Set ``pageToken`` to the + ``nextPageToken`` returned by a previous list request to get + the next page of results. + + This field is a member of `oneof`_ ``_page_token``. + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + return_partial_success (bool): + Opt-in for partial success behavior which + provides partial results in case of failure. The + default value is false. + + This field is a member of `oneof`_ ``_return_partial_success``. + """ + + filter = proto.Field( + proto.STRING, + number=336120696, + optional=True, + ) + max_results = proto.Field( + proto.UINT32, + number=54715419, + optional=True, + ) + order_by = proto.Field( + proto.STRING, + number=160562920, + optional=True, + ) + page_token = proto.Field( + proto.STRING, + number=19994697, + optional=True, + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + return_partial_success = proto.Field( + proto.BOOL, + number=517198390, + optional=True, + ) + + +class ListRegionNetworkEndpointGroupsRequest(proto.Message): + r"""A request message for RegionNetworkEndpointGroups.List. See the method description for details. Attributes: @@ -47076,7 +48146,9 @@ class ListRegionInstanceGroupManagersRequest(proto.Message): project (str): Project ID for this request. region (str): - Name of the region scoping this request. + The name of the region where the network + endpoint group is located. It should comply with + RFC1035. return_partial_success (bool): Opt-in for partial success behavior which provides partial results in case of failure. The @@ -47120,9 +48192,9 @@ class ListRegionInstanceGroupManagersRequest(proto.Message): ) -class ListRegionInstanceGroupsRequest(proto.Message): - r"""A request message for RegionInstanceGroups.List. See the - method description for details. +class ListRegionNetworkFirewallPoliciesRequest(proto.Message): + r"""A request message for RegionNetworkFirewallPolicies.List. See + the method description for details. Attributes: filter (str): @@ -47244,8 +48316,8 @@ class ListRegionInstanceGroupsRequest(proto.Message): ) -class ListRegionNetworkEndpointGroupsRequest(proto.Message): - r"""A request message for RegionNetworkEndpointGroups.List. See +class ListRegionNotificationEndpointsRequest(proto.Message): + r"""A request message for RegionNotificationEndpoints.List. See the method description for details. Attributes: @@ -47324,9 +48396,7 @@ class ListRegionNetworkEndpointGroupsRequest(proto.Message): project (str): Project ID for this request. region (str): - The name of the region where the network - endpoint group is located. It should comply with - RFC1035. + Name of the region scoping this request. return_partial_success (bool): Opt-in for partial success behavior which provides partial results in case of failure. The @@ -47370,9 +48440,9 @@ class ListRegionNetworkEndpointGroupsRequest(proto.Message): ) -class ListRegionNetworkFirewallPoliciesRequest(proto.Message): - r"""A request message for RegionNetworkFirewallPolicies.List. See - the method description for details. +class ListRegionOperationsRequest(proto.Message): + r"""A request message for RegionOperations.List. See the method + description for details. Attributes: filter (str): @@ -47450,7 +48520,7 @@ class ListRegionNetworkFirewallPoliciesRequest(proto.Message): project (str): Project ID for this request. region (str): - Name of the region scoping this request. + Name of the region for this request. return_partial_success (bool): Opt-in for partial success behavior which provides partial results in case of failure. The @@ -47494,9 +48564,9 @@ class ListRegionNetworkFirewallPoliciesRequest(proto.Message): ) -class ListRegionNotificationEndpointsRequest(proto.Message): - r"""A request message for RegionNotificationEndpoints.List. See - the method description for details. +class ListRegionSecurityPoliciesRequest(proto.Message): + r"""A request message for RegionSecurityPolicies.List. See the + method description for details. Attributes: filter (str): @@ -47618,9 +48688,9 @@ class ListRegionNotificationEndpointsRequest(proto.Message): ) -class ListRegionOperationsRequest(proto.Message): - r"""A request message for RegionOperations.List. See the method - description for details. +class ListRegionSslCertificatesRequest(proto.Message): + r"""A request message for RegionSslCertificates.List. See the + method description for details. Attributes: filter (str): @@ -47698,7 +48768,7 @@ class ListRegionOperationsRequest(proto.Message): project (str): Project ID for this request. region (str): - Name of the region for this request. + Name of the region scoping this request. return_partial_success (bool): Opt-in for partial success behavior which provides partial results in case of failure. The @@ -47742,9 +48812,9 @@ class ListRegionOperationsRequest(proto.Message): ) -class ListRegionSecurityPoliciesRequest(proto.Message): - r"""A request message for RegionSecurityPolicies.List. See the - method description for details. +class ListRegionSslPoliciesRequest(proto.Message): + r"""A request message for RegionSslPolicies.List. See the method + description for details. Attributes: filter (str): @@ -47866,8 +48936,8 @@ class ListRegionSecurityPoliciesRequest(proto.Message): ) -class ListRegionSslCertificatesRequest(proto.Message): - r"""A request message for RegionSslCertificates.List. See the +class ListRegionTargetHttpProxiesRequest(proto.Message): + r"""A request message for RegionTargetHttpProxies.List. See the method description for details. Attributes: @@ -47990,8 +49060,8 @@ class ListRegionSslCertificatesRequest(proto.Message): ) -class ListRegionTargetHttpProxiesRequest(proto.Message): - r"""A request message for RegionTargetHttpProxies.List. See the +class ListRegionTargetHttpsProxiesRequest(proto.Message): + r"""A request message for RegionTargetHttpsProxies.List. See the method description for details. Attributes: @@ -48114,8 +49184,8 @@ class ListRegionTargetHttpProxiesRequest(proto.Message): ) -class ListRegionTargetHttpsProxiesRequest(proto.Message): - r"""A request message for RegionTargetHttpsProxies.List. See the +class ListRegionTargetTcpProxiesRequest(proto.Message): + r"""A request message for RegionTargetTcpProxies.List. See the method description for details. Attributes: @@ -51550,7 +52620,7 @@ class LocalizedMessage(proto.Message): locale (str): The locale used following the specification defined at - http://www.rfc-editor.org/rfc/bcp/bcp47.txt. + https://www.rfc-editor.org/rfc/bcp/bcp47.txt. Examples are: "en-US", "fr-CH", "es-MX". This field is a member of `oneof`_ ``_locale``. @@ -53107,9 +54177,12 @@ class Network(proto.Message): This field is a member of `oneof`_ ``_kind``. mtu (int): Maximum Transmission Unit in bytes. The - minimum value for this field is 1460 and the - maximum value is 1500 bytes. If unspecified, - defaults to 1460. + minimum value for this field is 1300 and the + maximum value is 8896. The suggested value is + 1500, which is the default MTU used on the + Internet, or 8896 if you want to use Jumbo + frames. If unspecified, the value defaults to + 1460. This field is a member of `oneof`_ ``_mtu``. name (str): @@ -55074,6 +56147,10 @@ class NodeGroup(proto.Message): [Output Only] Server-defined URL for the resource. This field is a member of `oneof`_ ``_self_link``. + share_settings (google.cloud.compute_v1.types.ShareSettings): + Share-settings for the node group + + This field is a member of `oneof`_ ``_share_settings``. size (int): [Output Only] The total number of nodes in the node group. @@ -55172,6 +56249,12 @@ class Status(proto.Enum): number=456214797, optional=True, ) + share_settings = proto.Field( + proto.MESSAGE, + number=266668163, + optional=True, + message="ShareSettings", + ) size = proto.Field( proto.INT32, number=3530753, @@ -55430,6 +56513,11 @@ class NodeGroupNode(proto.Message): Attributes: accelerators (Sequence[google.cloud.compute_v1.types.AcceleratorConfig]): Accelerators for this node. + consumed_resources (google.cloud.compute_v1.types.InstanceConsumptionInfo): + Node resources that are reserved by all + instances. + + This field is a member of `oneof`_ ``_consumed_resources``. cpu_overcommit_type (str): CPU overcommit. Check the CpuOvercommitType enum for the list of @@ -55438,6 +56526,9 @@ class NodeGroupNode(proto.Message): This field is a member of `oneof`_ ``_cpu_overcommit_type``. disks (Sequence[google.cloud.compute_v1.types.LocalDisk]): Local disk configurations. + instance_consumption_data (Sequence[google.cloud.compute_v1.types.InstanceConsumptionData]): + Instance data that shows consumed resources + on the node. instances (Sequence[str]): Instances scheduled on this node. name (str): @@ -55465,6 +56556,11 @@ class NodeGroupNode(proto.Message): possible values. This field is a member of `oneof`_ ``_status``. + total_resources (google.cloud.compute_v1.types.InstanceConsumptionInfo): + Total amount of available resources on the + node. + + This field is a member of `oneof`_ ``_total_resources``. """ class CpuOvercommitType(proto.Enum): @@ -55488,6 +56584,12 @@ class Status(proto.Enum): number=269577064, message="AcceleratorConfig", ) + consumed_resources = proto.Field( + proto.MESSAGE, + number=334527118, + optional=True, + message="InstanceConsumptionInfo", + ) cpu_overcommit_type = proto.Field( proto.STRING, number=247727959, @@ -55498,6 +56600,11 @@ class Status(proto.Enum): number=95594102, message="LocalDisk", ) + instance_consumption_data = proto.RepeatedField( + proto.MESSAGE, + number=84715576, + message="InstanceConsumptionData", + ) instances = proto.RepeatedField( proto.STRING, number=29097598, @@ -55533,6 +56640,12 @@ class Status(proto.Enum): number=181260274, optional=True, ) + total_resources = proto.Field( + proto.MESSAGE, + number=97406698, + optional=True, + message="InstanceConsumptionInfo", + ) class NodeGroupsAddNodesRequest(proto.Message): @@ -59517,6 +60630,65 @@ class PatchRegionSecurityPolicyRequest(proto.Message): ) +class PatchRegionSslPolicyRequest(proto.Message): + r"""A request message for RegionSslPolicies.Patch. See the method + description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + Name of the region scoping this request. + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + ssl_policy (str): + Name of the SSL policy to update. The name + must be 1-63 characters long, and comply with + RFC1035. + ssl_policy_resource (google.cloud.compute_v1.types.SslPolicy): + The body resource for this request + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + ssl_policy = proto.Field( + proto.STRING, + number=295190213, + ) + ssl_policy_resource = proto.Field( + proto.MESSAGE, + number=274891848, + message="SslPolicy", + ) + + class PatchRegionTargetHttpsProxyRequest(proto.Message): r"""A request message for RegionTargetHttpsProxies.Patch. See the method description for details. @@ -60368,9 +61540,9 @@ class PathMatcher(proto.Message): defaultRouteAction cannot contain any weightedBackendServices. Only one of defaultRouteAction or defaultUrlRedirect must be - set. UrlMaps for external HTTP(S) load balancers - support only the urlRewrite action within a path - matcher's defaultRouteAction. + set. URL maps for Classic external HTTP(S) load + balancers only support the urlRewrite action + within a path matcher's defaultRouteAction. This field is a member of `oneof`_ ``_default_route_action``. default_service (str): @@ -60518,9 +61690,9 @@ class PathRule(proto.Message): set. Conversely if service is set, routeAction cannot contain any weightedBackendServices. Only one of routeAction or urlRedirect must be set. - URL maps for external HTTP(S) load balancers - support only the urlRewrite action within a path - rule's routeAction. + URL maps for Classic external HTTP(S) load + balancers only support the urlRewrite action + within a path rule's routeAction. This field is a member of `oneof`_ ``_route_action``. service (str): @@ -66515,8 +67687,7 @@ class Router(proto.Message): encrypted_interconnect_router (bool): Indicates if a router is dedicated for use with encrypted VLAN attachments - (interconnectAttachments). Not currently - available publicly. + (interconnectAttachments). This field is a member of `oneof`_ ``_encrypted_interconnect_router``. id (int): @@ -69346,6 +70517,11 @@ class SecurityPolicyAdvancedOptionsConfig(proto.Message): r""" Attributes: + json_custom_config (google.cloud.compute_v1.types.SecurityPolicyAdvancedOptionsConfigJsonCustomConfig): + Custom configuration to apply the JSON parsing. Only + applicable when json_parsing is set to STANDARD. + + This field is a member of `oneof`_ ``_json_custom_config``. json_parsing (str): Check the JsonParsing enum for the list of possible values. @@ -69370,6 +70546,12 @@ class LogLevel(proto.Enum): NORMAL = 161067239 VERBOSE = 532219234 + json_custom_config = proto.Field( + proto.MESSAGE, + number=111570105, + optional=True, + message="SecurityPolicyAdvancedOptionsConfigJsonCustomConfig", + ) json_parsing = proto.Field( proto.STRING, number=282493529, @@ -69382,6 +70564,25 @@ class LogLevel(proto.Enum): ) +class SecurityPolicyAdvancedOptionsConfigJsonCustomConfig(proto.Message): + r""" + + Attributes: + content_types (Sequence[str]): + A list of custom Content-Type header values to apply the + JSON parsing. As per RFC 1341, a Content-Type header value + has the following format: Content-Type := type "/" subtype + \*[";" parameter] When configuring a custom Content-Type + header value, only the type/subtype needs to be specified, + and the parameters should be excluded. + """ + + content_types = proto.RepeatedField( + proto.STRING, + number=17428787, + ) + + class SecurityPolicyDdosProtectionConfig(proto.Message): r""" @@ -71219,6 +72420,34 @@ class SetEdgeSecurityPolicyBackendServiceRequest(proto.Message): ) +class SetIamPolicyBackendServiceRequest(proto.Message): + r"""A request message for BackendServices.SetIamPolicy. See the + method description for details. + + Attributes: + global_set_policy_request_resource (google.cloud.compute_v1.types.GlobalSetPolicyRequest): + The body resource for this request + project (str): + Project ID for this request. + resource (str): + Name or id of the resource for this request. + """ + + global_set_policy_request_resource = proto.Field( + proto.MESSAGE, + number=337048498, + message="GlobalSetPolicyRequest", + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class SetIamPolicyDiskRequest(proto.Message): r"""A request message for Disks.SetIamPolicy. See the method description for details. @@ -71365,24 +72594,105 @@ class SetIamPolicyInstanceTemplateRequest(proto.Message): ) -class SetIamPolicyLicenseRequest(proto.Message): - r"""A request message for Licenses.SetIamPolicy. See the method +class SetIamPolicyLicenseRequest(proto.Message): + r"""A request message for Licenses.SetIamPolicy. See the method + description for details. + + Attributes: + global_set_policy_request_resource (google.cloud.compute_v1.types.GlobalSetPolicyRequest): + The body resource for this request + project (str): + Project ID for this request. + resource (str): + Name or id of the resource for this request. + """ + + global_set_policy_request_resource = proto.Field( + proto.MESSAGE, + number=337048498, + message="GlobalSetPolicyRequest", + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + +class SetIamPolicyMachineImageRequest(proto.Message): + r"""A request message for MachineImages.SetIamPolicy. See the + method description for details. + + Attributes: + global_set_policy_request_resource (google.cloud.compute_v1.types.GlobalSetPolicyRequest): + The body resource for this request + project (str): + Project ID for this request. + resource (str): + Name or id of the resource for this request. + """ + + global_set_policy_request_resource = proto.Field( + proto.MESSAGE, + number=337048498, + message="GlobalSetPolicyRequest", + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + +class SetIamPolicyNetworkFirewallPolicyRequest(proto.Message): + r"""A request message for NetworkFirewallPolicies.SetIamPolicy. + See the method description for details. + + Attributes: + global_set_policy_request_resource (google.cloud.compute_v1.types.GlobalSetPolicyRequest): + The body resource for this request + project (str): + Project ID for this request. + resource (str): + Name or id of the resource for this request. + """ + + global_set_policy_request_resource = proto.Field( + proto.MESSAGE, + number=337048498, + message="GlobalSetPolicyRequest", + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + +class SetIamPolicyNodeGroupRequest(proto.Message): + r"""A request message for NodeGroups.SetIamPolicy. See the method description for details. Attributes: - global_set_policy_request_resource (google.cloud.compute_v1.types.GlobalSetPolicyRequest): - The body resource for this request project (str): Project ID for this request. resource (str): Name or id of the resource for this request. + zone (str): + The name of the zone for this request. + zone_set_policy_request_resource (google.cloud.compute_v1.types.ZoneSetPolicyRequest): + The body resource for this request """ - global_set_policy_request_resource = proto.Field( - proto.MESSAGE, - number=337048498, - message="GlobalSetPolicyRequest", - ) project = proto.Field( proto.STRING, number=227560217, @@ -71391,101 +72701,54 @@ class SetIamPolicyLicenseRequest(proto.Message): proto.STRING, number=195806222, ) - - -class SetIamPolicyMachineImageRequest(proto.Message): - r"""A request message for MachineImages.SetIamPolicy. See the - method description for details. - - Attributes: - global_set_policy_request_resource (google.cloud.compute_v1.types.GlobalSetPolicyRequest): - The body resource for this request - project (str): - Project ID for this request. - resource (str): - Name or id of the resource for this request. - """ - - global_set_policy_request_resource = proto.Field( - proto.MESSAGE, - number=337048498, - message="GlobalSetPolicyRequest", - ) - project = proto.Field( + zone = proto.Field( proto.STRING, - number=227560217, + number=3744684, ) - resource = proto.Field( - proto.STRING, - number=195806222, + zone_set_policy_request_resource = proto.Field( + proto.MESSAGE, + number=382082107, + message="ZoneSetPolicyRequest", ) -class SetIamPolicyNetworkFirewallPolicyRequest(proto.Message): - r"""A request message for NetworkFirewallPolicies.SetIamPolicy. - See the method description for details. +class SetIamPolicyNodeTemplateRequest(proto.Message): + r"""A request message for NodeTemplates.SetIamPolicy. See the + method description for details. Attributes: - global_set_policy_request_resource (google.cloud.compute_v1.types.GlobalSetPolicyRequest): - The body resource for this request project (str): Project ID for this request. + region (str): + The name of the region for this request. + region_set_policy_request_resource (google.cloud.compute_v1.types.RegionSetPolicyRequest): + The body resource for this request resource (str): Name or id of the resource for this request. """ - global_set_policy_request_resource = proto.Field( - proto.MESSAGE, - number=337048498, - message="GlobalSetPolicyRequest", - ) project = proto.Field( proto.STRING, number=227560217, ) - resource = proto.Field( + region = proto.Field( proto.STRING, - number=195806222, + number=138946292, ) - - -class SetIamPolicyNodeGroupRequest(proto.Message): - r"""A request message for NodeGroups.SetIamPolicy. See the method - description for details. - - Attributes: - project (str): - Project ID for this request. - resource (str): - Name or id of the resource for this request. - zone (str): - The name of the zone for this request. - zone_set_policy_request_resource (google.cloud.compute_v1.types.ZoneSetPolicyRequest): - The body resource for this request - """ - - project = proto.Field( - proto.STRING, - number=227560217, + region_set_policy_request_resource = proto.Field( + proto.MESSAGE, + number=276489091, + message="RegionSetPolicyRequest", ) resource = proto.Field( proto.STRING, number=195806222, ) - zone = proto.Field( - proto.STRING, - number=3744684, - ) - zone_set_policy_request_resource = proto.Field( - proto.MESSAGE, - number=382082107, - message="ZoneSetPolicyRequest", - ) -class SetIamPolicyNodeTemplateRequest(proto.Message): - r"""A request message for NodeTemplates.SetIamPolicy. See the - method description for details. +class SetIamPolicyRegionBackendServiceRequest(proto.Message): + r"""A request message for RegionBackendServices.SetIamPolicy. See + the method description for details. Attributes: project (str): @@ -71867,6 +73130,63 @@ class SetInstanceTemplateRegionInstanceGroupManagerRequest(proto.Message): ) +class SetLabelsAddressRequest(proto.Message): + r"""A request message for Addresses.SetLabels. See the method + description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + The region for this request. + region_set_labels_request_resource (google.cloud.compute_v1.types.RegionSetLabelsRequest): + The body resource for this request + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + resource (str): + Name or id of the resource for this request. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + region_set_labels_request_resource = proto.Field( + proto.MESSAGE, + number=259357782, + message="RegionSetLabelsRequest", + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class SetLabelsDiskRequest(proto.Message): r"""A request message for Disks.SetLabels. See the method description for details. @@ -72009,6 +73329,34 @@ class SetLabelsForwardingRuleRequest(proto.Message): ) +class SetLabelsGlobalAddressRequest(proto.Message): + r"""A request message for GlobalAddresses.SetLabels. See the + method description for details. + + Attributes: + global_set_labels_request_resource (google.cloud.compute_v1.types.GlobalSetLabelsRequest): + The body resource for this request + project (str): + Project ID for this request. + resource (str): + Name or id of the resource for this request. + """ + + global_set_labels_request_resource = proto.Field( + proto.MESSAGE, + number=319917189, + message="GlobalSetLabelsRequest", + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class SetLabelsGlobalForwardingRuleRequest(proto.Message): r"""A request message for GlobalForwardingRules.SetLabels. See the method description for details. @@ -72122,6 +73470,91 @@ class SetLabelsInstanceRequest(proto.Message): ) +class SetLabelsInterconnectAttachmentRequest(proto.Message): + r"""A request message for InterconnectAttachments.SetLabels. See + the method description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + The region for this request. + region_set_labels_request_resource (google.cloud.compute_v1.types.RegionSetLabelsRequest): + The body resource for this request + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + resource (str): + Name or id of the resource for this request. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + region_set_labels_request_resource = proto.Field( + proto.MESSAGE, + number=259357782, + message="RegionSetLabelsRequest", + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + +class SetLabelsInterconnectRequest(proto.Message): + r"""A request message for Interconnects.SetLabels. See the method + description for details. + + Attributes: + global_set_labels_request_resource (google.cloud.compute_v1.types.GlobalSetLabelsRequest): + The body resource for this request + project (str): + Project ID for this request. + resource (str): + Name or id of the resource for this request. + """ + + global_set_labels_request_resource = proto.Field( + proto.MESSAGE, + number=319917189, + message="GlobalSetLabelsRequest", + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class SetLabelsRegionDiskRequest(proto.Message): r"""A request message for RegionDisks.SetLabels. See the method description for details. @@ -72179,6 +73612,34 @@ class SetLabelsRegionDiskRequest(proto.Message): ) +class SetLabelsSecurityPolicyRequest(proto.Message): + r"""A request message for SecurityPolicies.SetLabels. See the + method description for details. + + Attributes: + global_set_labels_request_resource (google.cloud.compute_v1.types.GlobalSetLabelsRequest): + The body resource for this request + project (str): + Project ID for this request. + resource (str): + Name or id of the resource for this request. + """ + + global_set_labels_request_resource = proto.Field( + proto.MESSAGE, + number=319917189, + message="GlobalSetLabelsRequest", + ) + project = proto.Field( + proto.STRING, + number=227560217, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class SetLabelsSnapshotRequest(proto.Message): r"""A request message for Snapshots.SetLabels. See the method description for details. @@ -72207,6 +73668,63 @@ class SetLabelsSnapshotRequest(proto.Message): ) +class SetLabelsTargetVpnGatewayRequest(proto.Message): + r"""A request message for TargetVpnGateways.SetLabels. See the + method description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + The region for this request. + region_set_labels_request_resource (google.cloud.compute_v1.types.RegionSetLabelsRequest): + The body resource for this request + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + resource (str): + Name or id of the resource for this request. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + region_set_labels_request_resource = proto.Field( + proto.MESSAGE, + number=259357782, + message="RegionSetLabelsRequest", + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class SetLabelsVpnGatewayRequest(proto.Message): r"""A request message for VpnGateways.SetLabels. See the method description for details. @@ -72264,6 +73782,63 @@ class SetLabelsVpnGatewayRequest(proto.Message): ) +class SetLabelsVpnTunnelRequest(proto.Message): + r"""A request message for VpnTunnels.SetLabels. See the method + description for details. + + Attributes: + project (str): + Project ID for this request. + region (str): + The region for this request. + region_set_labels_request_resource (google.cloud.compute_v1.types.RegionSetLabelsRequest): + The body resource for this request + request_id (str): + An optional request ID to identify requests. + Specify a unique request ID so that if you must + retry your request, the server will know to + ignore the request if it has already been + completed. For example, consider a situation + where you make an initial request and the + request times out. If you make the request again + with the same request ID, the server can check + if original operation with the same request ID + was received, and if so, will ignore the second + request. This prevents clients from accidentally + creating duplicate commitments. The request ID + must be a valid UUID with the exception that + zero UUID is not supported ( + 00000000-0000-0000-0000-000000000000). + + This field is a member of `oneof`_ ``_request_id``. + resource (str): + Name or id of the resource for this request. + """ + + project = proto.Field( + proto.STRING, + number=227560217, + ) + region = proto.Field( + proto.STRING, + number=138946292, + ) + region_set_labels_request_resource = proto.Field( + proto.MESSAGE, + number=259357782, + message="RegionSetLabelsRequest", + ) + request_id = proto.Field( + proto.STRING, + number=37109963, + optional=True, + ) + resource = proto.Field( + proto.STRING, + number=195806222, + ) + + class SetMachineResourcesInstanceRequest(proto.Message): r"""A request message for Instances.SetMachineResources. See the method description for details. @@ -73943,6 +75518,7 @@ class ShareType(proto.Enum): r"""Type of sharing for this shared-reservation""" UNDEFINED_SHARE_TYPE = 0 LOCAL = 72607563 + ORGANIZATION = 274978099 SHARE_TYPE_UNSPECIFIED = 494771730 SPECIFIC_PROJECTS = 347838695 @@ -75288,6 +76864,93 @@ class SslCertificatesScopedList(proto.Message): ) +class SslPoliciesAggregatedList(proto.Message): + r""" + + Attributes: + etag (str): + + This field is a member of `oneof`_ ``_etag``. + id (str): + [Output Only] Unique identifier for the resource; defined by + the server. + + This field is a member of `oneof`_ ``_id``. + items (Mapping[str, google.cloud.compute_v1.types.SslPoliciesScopedList]): + A list of SslPoliciesScopedList resources. + kind (str): + [Output Only] Type of resource. Always + compute#sslPolicyAggregatedList for lists of SSL Policies. + + This field is a member of `oneof`_ ``_kind``. + next_page_token (str): + [Output Only] This token allows you to get the next page of + results for list requests. If the number of results is + larger than maxResults, use the nextPageToken as a value for + the query parameter pageToken in the next list request. + Subsequent list requests will have their own nextPageToken + to continue paging through the results. + + This field is a member of `oneof`_ ``_next_page_token``. + self_link (str): + [Output Only] Server-defined URL for this resource. + + This field is a member of `oneof`_ ``_self_link``. + unreachables (Sequence[str]): + [Output Only] Unreachable resources. + warning (google.cloud.compute_v1.types.Warning): + [Output Only] Informational warning message. + + This field is a member of `oneof`_ ``_warning``. + """ + + @property + def raw_page(self): + return self + + etag = proto.Field( + proto.STRING, + number=3123477, + optional=True, + ) + id = proto.Field( + proto.STRING, + number=3355, + optional=True, + ) + items = proto.MapField( + proto.STRING, + proto.MESSAGE, + number=100526016, + message="SslPoliciesScopedList", + ) + kind = proto.Field( + proto.STRING, + number=3292052, + optional=True, + ) + next_page_token = proto.Field( + proto.STRING, + number=79797525, + optional=True, + ) + self_link = proto.Field( + proto.STRING, + number=456214797, + optional=True, + ) + unreachables = proto.RepeatedField( + proto.STRING, + number=243372063, + ) + warning = proto.Field( + proto.MESSAGE, + number=50704284, + optional=True, + message="Warning", + ) + + class SslPoliciesList(proto.Message): r""" @@ -75374,6 +77037,33 @@ class SslPoliciesListAvailableFeaturesResponse(proto.Message): ) +class SslPoliciesScopedList(proto.Message): + r""" + + Attributes: + ssl_policies (Sequence[google.cloud.compute_v1.types.SslPolicy]): + A list of SslPolicies contained in this + scope. + warning (google.cloud.compute_v1.types.Warning): + Informational warning which replaces the list + of SSL policies when the list is empty. + + This field is a member of `oneof`_ ``_warning``. + """ + + ssl_policies = proto.RepeatedField( + proto.MESSAGE, + number=209941027, + message="SslPolicy", + ) + warning = proto.Field( + proto.MESSAGE, + number=50704284, + optional=True, + message="Warning", + ) + + class SslPolicy(proto.Message): r"""Represents an SSL Policy resource. Use SSL policies to control the SSL features, such as versions and cipher suites, @@ -75450,6 +77140,12 @@ class SslPolicy(proto.Message): values. This field is a member of `oneof`_ ``_profile``. + region (str): + [Output Only] URL of the region where the regional SSL + policy resides. This field is not applicable to global SSL + policies. + + This field is a member of `oneof`_ ``_region``. self_link (str): [Output Only] Server-defined URL for the resource. @@ -75531,6 +77227,11 @@ class Profile(proto.Enum): number=227445161, optional=True, ) + region = proto.Field( + proto.STRING, + number=138946292, + optional=True, + ) self_link = proto.Field( proto.STRING, number=456214797, @@ -79012,6 +80713,11 @@ class TargetTcpProxy(proto.Message): values. This field is a member of `oneof`_ ``_proxy_header``. + region (str): + [Output Only] URL of the region where the regional TCP proxy + resides. This field is not applicable to global TCP proxy. + + This field is a member of `oneof`_ ``_region``. self_link (str): [Output Only] Server-defined URL for the resource. @@ -79065,6 +80771,11 @@ class ProxyHeader(proto.Enum): number=160374142, optional=True, ) + region = proto.Field( + proto.STRING, + number=138946292, + optional=True, + ) self_link = proto.Field( proto.STRING, number=456214797, @@ -81606,12 +83317,12 @@ class UrlMap(proto.Message): defaultRouteAction cannot contain any weightedBackendServices. Only one of defaultRouteAction or defaultUrlRedirect must be - set. UrlMaps for external HTTP(S) load balancers - support only the urlRewrite action within - defaultRouteAction. defaultRouteAction has no - effect when the URL map is bound to a target - gRPC proxy that has the validateForProxyless - field set to true. + set. URL maps for Classic external HTTP(S) load + balancers only support the urlRewrite action + within defaultRouteAction. defaultRouteAction + has no effect when the URL map is bound to a + target gRPC proxy that has the + validateForProxyless field set to true. This field is a member of `oneof`_ ``_default_route_action``. default_service (str): @@ -83341,12 +85052,10 @@ class VpnGatewayVpnGatewayInterface(proto.Message): URL of the VLAN attachment (interconnectAttachment) resource for this VPN gateway interface. When the value of this field - is present, the VPN gateway is used for - IPsec-encrypted Cloud Interconnect; all egress - or ingress traffic for this VPN gateway - interface goes through the specified VLAN - attachment resource. Not currently available - publicly. + is present, the VPN gateway is used for HA VPN + over Cloud Interconnect; all egress or ingress + traffic for this VPN gateway interface goes + through the specified VLAN attachment resource. This field is a member of `oneof`_ ``_interconnect_attachment``. ip_address (str): @@ -83356,11 +85065,11 @@ class VpnGatewayVpnGatewayInterface(proto.Message): address. The two IP addresses for a VPN gateway must be all regional external or regional internal IP addresses. There cannot be a mix of regional external IP addresses and - regional internal IP addresses. For IPsec-encrypted Cloud + regional internal IP addresses. For HA VPN over Cloud Interconnect, the IP addresses for both interfaces could either be regional internal IP addresses or regional - external IP addresses. For regular (non IPsec-encrypted - Cloud Interconnect) HA VPN tunnels, the IP address must be a + external IP addresses. For regular (non HA VPN over Cloud + Interconnect) HA VPN tunnels, the IP address must be a regional external IP address. This field is a member of `oneof`_ ``_ip_address``. diff --git a/samples/noxfile.py b/samples/noxfile.py index 29b5bc852..b053ca568 100644 --- a/samples/noxfile.py +++ b/samples/noxfile.py @@ -208,8 +208,10 @@ def _session_tests( session: nox.sessions.Session, post_install: Callable = None ) -> None: # check for presence of tests - test_list = glob.glob("*_test.py") + glob.glob("test_*.py") - test_list.extend(glob.glob("tests")) + test_list = glob.glob("**/*_test.py", recursive=True) + glob.glob( + "**/test_*.py", recursive=True + ) + test_list.extend(glob.glob("**/tests", recursive=True)) if len(test_list) == 0: print("No tests found, skipping directory.") diff --git a/samples/requirements.txt b/samples/requirements.txt index 0f34ab3d8..38d877669 100644 --- a/samples/requirements.txt +++ b/samples/requirements.txt @@ -1,3 +1,3 @@ isort==5.10.1 black==22.8.0 -google-cloud-compute==1.5.1 +google-cloud-compute==1.5.2 diff --git a/scripts/fixup_compute_v1_keywords.py b/scripts/fixup_compute_v1_keywords.py index 57ab3386f..a53eda0f8 100644 --- a/scripts/fixup_compute_v1_keywords.py +++ b/scripts/fixup_compute_v1_keywords.py @@ -79,7 +79,7 @@ class computeCallTransformer(cst.CSTTransformer): 'get_from_family': ('family', 'project', ), 'get_guest_attributes': ('instance', 'project', 'zone', 'query_path', 'variable_key', ), 'get_health': ('backend_service', 'project', 'resource_group_reference_resource', ), - 'get_iam_policy': ('project', 'resource', 'zone', 'options_requested_policy_version', ), + 'get_iam_policy': ('project', 'resource', 'options_requested_policy_version', ), 'get_nat_mapping_info': ('project', 'region', 'router', 'filter', 'max_results', 'order_by', 'page_token', 'return_partial_success', ), 'get_router_status': ('project', 'region', 'router', ), 'get_rule': ('firewall_policy', 'priority', ), @@ -93,7 +93,7 @@ class computeCallTransformer(cst.CSTTransformer): 'invalidate_cache': ('cache_invalidation_rule_resource', 'project', 'url_map', 'request_id', ), 'list': ('project', 'zone', 'filter', 'max_results', 'order_by', 'page_token', 'return_partial_success', ), 'list_associations': ('target_resource', ), - 'list_available_features': ('project', 'filter', 'max_results', 'order_by', 'page_token', 'return_partial_success', ), + 'list_available_features': ('project', 'region', 'filter', 'max_results', 'order_by', 'page_token', 'return_partial_success', ), 'list_errors': ('instance_group_manager', 'project', 'zone', 'filter', 'max_results', 'order_by', 'page_token', 'return_partial_success', ), 'list_instances': ('instance_group', 'instance_groups_list_instances_request_resource', 'project', 'zone', 'filter', 'max_results', 'order_by', 'page_token', 'return_partial_success', ), 'list_managed_instances': ('instance_group_manager', 'project', 'zone', 'filter', 'max_results', 'order_by', 'page_token', 'return_partial_success', ), @@ -132,9 +132,9 @@ class computeCallTransformer(cst.CSTTransformer): 'set_deletion_protection': ('project', 'resource', 'zone', 'deletion_protection', 'request_id', ), 'set_disk_auto_delete': ('auto_delete', 'device_name', 'instance', 'project', 'zone', 'request_id', ), 'set_edge_security_policy': ('backend_bucket', 'project', 'security_policy_reference_resource', 'request_id', ), - 'set_iam_policy': ('project', 'resource', 'zone', 'zone_set_policy_request_resource', ), + 'set_iam_policy': ('global_set_policy_request_resource', 'project', 'resource', ), 'set_instance_template': ('instance_group_manager', 'instance_group_managers_set_instance_template_request_resource', 'project', 'zone', 'request_id', ), - 'set_labels': ('project', 'resource', 'zone', 'zone_set_labels_request_resource', 'request_id', ), + 'set_labels': ('project', 'region', 'region_set_labels_request_resource', 'resource', 'request_id', ), 'set_machine_resources': ('instance', 'instances_set_machine_resources_request_resource', 'project', 'zone', 'request_id', ), 'set_machine_type': ('instance', 'instances_set_machine_type_request_resource', 'project', 'zone', 'request_id', ), 'set_metadata': ('instance', 'metadata_resource', 'project', 'zone', 'request_id', ), diff --git a/setup.py b/setup.py index bf3524785..880c1d517 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,7 @@ import os import setuptools # type: ignore -version = "1.5.2" +version = "1.6.0" package_root = os.path.abspath(os.path.dirname(__file__)) @@ -44,9 +44,9 @@ platforms="Posix; MacOS X; Windows", include_package_data=True, install_requires=( - "google-api-core[grpc] >= 2.9.0, <3.0.0dev", + "google-api-core[grpc] >= 2.10.1, <3.0.0dev", "proto-plus >= 1.22.0, <2.0.0dev", - "protobuf >= 3.20.1, <5.0.0dev", + "protobuf >= 3.20.2, <5.0.0dev", ), python_requires=">=3.7", classifiers=[ diff --git a/testing/constraints-3.7.txt b/testing/constraints-3.7.txt index b3b62664c..0db8ff22c 100644 --- a/testing/constraints-3.7.txt +++ b/testing/constraints-3.7.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.9.0 +google-api-core==2.10.1 proto-plus==1.22.0 -protobuf==3.20.1 +protobuf==3.20.2 diff --git a/tests/unit/gapic/compute_v1/test_accelerator_types.py b/tests/unit/gapic/compute_v1/test_accelerator_types.py index 04d2395b7..5d8febf35 100644 --- a/tests/unit/gapic/compute_v1/test_accelerator_types.py +++ b/tests/unit/gapic/compute_v1/test_accelerator_types.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -771,7 +772,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AcceleratorTypeAggregatedList + post.return_value = compute.AcceleratorTypeAggregatedList() client.aggregated_list( request, @@ -1141,7 +1142,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AcceleratorType + post.return_value = compute.AcceleratorType() client.get( request, @@ -1455,7 +1456,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AcceleratorTypeList + post.return_value = compute.AcceleratorTypeList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_addresses.py b/tests/unit/gapic/compute_v1/test_addresses.py index 129e9cddf..335fb67f0 100644 --- a/tests/unit/gapic/compute_v1/test_addresses.py +++ b/tests/unit/gapic/compute_v1/test_addresses.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -738,7 +739,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AddressAggregatedList + post.return_value = compute.AddressAggregatedList() client.aggregated_list( request, @@ -1123,7 +1124,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1430,7 +1431,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1747,7 +1748,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Address + post.return_value = compute.Address() client.get( request, @@ -2092,7 +2093,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2430,7 +2431,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2749,7 +2750,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AddressList + post.return_value = compute.AddressList() client.list( request, @@ -2906,150 +2907,825 @@ def test_list_rest_pager(transport: str = "rest"): assert page_.raw_page.next_page_token == token -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.AddressesRestTransport( +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsAddressRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = AddressesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - # It is an error to provide a credentials file and a transport instance. - transport = transports.AddressesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = AddressesClient( - client_options={"credentials_file": "credentials.json"}, - 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) - # It is an error to provide an api_key and a transport instance. - transport = transports.AddressesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = AddressesClient( - client_options=options, - transport=transport, + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.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", ) - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = AddressesClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) - # It is an error to provide scopes and a transport instance. - transport = transports.AddressesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = AddressesClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) + 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_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.AddressesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), +def test_set_labels_rest_required_fields(request_type=compute.SetLabelsAddressRequest): + transport_class = transports.AddressesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) ) - client = AddressesClient(transport=transport) - assert client.transport is transport + # verify fields with default values are dropped -@pytest.mark.parametrize( - "transport_class", - [ - transports.AddressesRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + 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 -@pytest.mark.parametrize( - "transport_name", - [ - "rest", - ], -) -def test_transport_kind(transport_name): - transport = AddressesClient.get_transport_class(transport_name)( + 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 = AddressesClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - assert transport.kind == transport_name + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result -def test_addresses_base_transport_error(): - # Passing both a credentials object and credentials_file should raise an error - with pytest.raises(core_exceptions.DuplicateCredentialArgs): - transport = transports.AddressesTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json", - ) + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) -def test_addresses_base_transport(): - # Instantiate the base transport. - with mock.patch( - "google.cloud.compute_v1.services.addresses.transports.AddressesTransport.__init__" - ) as Transport: - Transport.return_value = None - transport = transports.AddressesTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - "aggregated_list", - "delete", - "get", - "insert", - "list", - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) + response = client.set_labels(request) - with pytest.raises(NotImplementedError): - transport.close() + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - # Catch all for all remaining methods and properties - remainder = [ - "kind", - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() +def test_set_labels_rest_unset_required_fields(): + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) -def test_addresses_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.compute_v1.services.addresses.transports.AddressesTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.AddressesTransport( - credentials_file="credentials.json", - quota_project_id="octopus", + 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.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_set_labels" + ) as post, mock.patch.object( + transports.AddressesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsAddressRequest.pb( + compute.SetLabelsAddressRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsAddressRequest() + 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.SetLabelsAddressRequest +): + client = AddressesClient( + 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 = 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", + "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/addresses/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels( + compute.SetLabelsAddressRequest(), + 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 = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsAddressRequest, + dict, + ], +) +def test_set_labels_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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetLabelsAddressRequest, +): + transport_class = transports.AddressesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.AddressesRestTransport( + 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_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_set_labels" + ) as post, mock.patch.object( + transports.AddressesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsAddressRequest.pb( + compute.SetLabelsAddressRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsAddressRequest() + 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.SetLabelsAddressRequest +): + client = AddressesClient( + 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_unary(request) + + +def test_set_labels_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", + "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/regions/{region}/addresses/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels_unary( + compute.SetLabelsAddressRequest(), + 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_unary_rest_error(): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = AddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = AddressesClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = AddressesClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = AddressesClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = AddressesClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.AddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = AddressesClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.AddressesRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + 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): + transport = transports.AddressesTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_addresses_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.compute_v1.services.addresses.transports.AddressesTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.AddressesTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "aggregated_list", + "delete", + "get", + "insert", + "list", + "set_labels", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + 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 + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.compute_v1.services.addresses.transports.AddressesTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.AddressesTransport( + credentials_file="credentials.json", + quota_project_id="octopus", ) load_creds.assert_called_once_with( "credentials.json", @@ -3173,6 +3849,9 @@ def test_addresses_client_transport_session_collision(transport_name): session1 = client1.transport.list._session session2 = client2.transport.list._session assert session1 != session2 + session1 = client1.transport.set_labels._session + session2 = client2.transport.set_labels._session + assert session1 != session2 def test_common_billing_account_path(): diff --git a/tests/unit/gapic/compute_v1/test_autoscalers.py b/tests/unit/gapic/compute_v1/test_autoscalers.py index 605141c74..88ebdda96 100644 --- a/tests/unit/gapic/compute_v1/test_autoscalers.py +++ b/tests/unit/gapic/compute_v1/test_autoscalers.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -744,7 +745,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AutoscalerAggregatedList + post.return_value = compute.AutoscalerAggregatedList() client.aggregated_list( request, @@ -1136,7 +1137,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1449,7 +1450,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1756,7 +1757,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Autoscaler + post.return_value = compute.Autoscaler() client.get( request, @@ -2130,7 +2131,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2528,7 +2529,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2880,7 +2881,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AutoscalerList + post.return_value = compute.AutoscalerList() client.list( request, @@ -3311,7 +3312,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3715,7 +3716,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4143,7 +4144,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -4551,7 +4552,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_backend_buckets.py b/tests/unit/gapic/compute_v1/test_backend_buckets.py index d22fe4a15..dc580587c 100644 --- a/tests/unit/gapic/compute_v1/test_backend_buckets.py +++ b/tests/unit/gapic/compute_v1/test_backend_buckets.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -782,7 +783,7 @@ def test_add_signed_url_key_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_signed_url_key( request, @@ -1096,7 +1097,7 @@ def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_signed_url_key_unary( request, @@ -1424,7 +1425,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1726,7 +1727,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2073,7 +2074,7 @@ def test_delete_signed_url_key_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_signed_url_key( request, @@ -2400,7 +2401,7 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_signed_url_key_unary( request, @@ -2526,6 +2527,7 @@ def test_get_rest(request_type): # Designate an appropriate value for the returned response. return_value = compute.BackendBucket( bucket_name="bucket_name_value", + compression_mode="compression_mode_value", creation_timestamp="creation_timestamp_value", custom_response_headers=["custom_response_headers_value"], description="description_value", @@ -2550,6 +2552,7 @@ def test_get_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.BackendBucket) assert response.bucket_name == "bucket_name_value" + assert response.compression_mode == "compression_mode_value" assert response.creation_timestamp == "creation_timestamp_value" assert response.custom_response_headers == ["custom_response_headers_value"] assert response.description == "description_value" @@ -2700,7 +2703,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendBucket + post.return_value = compute.BackendBucket() client.get( request, @@ -2845,6 +2848,7 @@ def test_insert_rest(request_type): "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -3060,7 +3064,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3112,6 +3116,7 @@ def test_insert_rest_bad_request( "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -3250,6 +3255,7 @@ def test_insert_unary_rest(request_type): "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -3445,7 +3451,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3497,6 +3503,7 @@ def test_insert_unary_rest_bad_request( "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -3785,7 +3792,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendBucketList + post.return_value = compute.BackendBucketList() client.list( request, @@ -3983,6 +3990,7 @@ def test_patch_rest(request_type): "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -4203,7 +4211,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -4255,6 +4263,7 @@ def test_patch_rest_bad_request( "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -4395,6 +4404,7 @@ def test_patch_unary_rest(request_type): "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -4595,7 +4605,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4647,6 +4657,7 @@ def test_patch_unary_rest_bad_request( "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -4971,7 +4982,7 @@ def test_set_edge_security_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_edge_security_policy( request, @@ -5288,7 +5299,7 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_edge_security_policy_unary( request, @@ -5443,6 +5454,7 @@ def test_update_rest(request_type): "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -5663,7 +5675,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -5715,6 +5727,7 @@ def test_update_rest_bad_request( "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -5855,6 +5868,7 @@ def test_update_unary_rest(request_type): "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", @@ -6055,7 +6069,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, @@ -6107,6 +6121,7 @@ def test_update_unary_rest_bad_request( "signed_url_key_names_value2", ], }, + "compression_mode": "compression_mode_value", "creation_timestamp": "creation_timestamp_value", "custom_response_headers": [ "custom_response_headers_value1", diff --git a/tests/unit/gapic/compute_v1/test_backend_services.py b/tests/unit/gapic/compute_v1/test_backend_services.py index 5f887d4df..88e3af6eb 100644 --- a/tests/unit/gapic/compute_v1/test_backend_services.py +++ b/tests/unit/gapic/compute_v1/test_backend_services.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -796,7 +797,7 @@ def test_add_signed_url_key_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_signed_url_key( request, @@ -1110,7 +1111,7 @@ def test_add_signed_url_key_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_signed_url_key_unary( request, @@ -1417,7 +1418,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceAggregatedList + post.return_value = compute.BackendServiceAggregatedList() client.aggregated_list( request, @@ -1806,7 +1807,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -2108,7 +2109,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2455,7 +2456,7 @@ def test_delete_signed_url_key_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_signed_url_key( request, @@ -2783,7 +2784,7 @@ def test_delete_signed_url_key_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_signed_url_key_unary( request, @@ -2910,6 +2911,7 @@ def test_get_rest(request_type): # Designate an appropriate value for the returned response. return_value = compute.BackendService( affinity_cookie_ttl_sec=2432, + compression_mode="compression_mode_value", creation_timestamp="creation_timestamp_value", custom_request_headers=["custom_request_headers_value"], custom_response_headers=["custom_response_headers_value"], @@ -2948,6 +2950,7 @@ def test_get_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.BackendService) assert response.affinity_cookie_ttl_sec == 2432 + assert response.compression_mode == "compression_mode_value" 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"] @@ -3112,7 +3115,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendService + post.return_value = compute.BackendService() client.get( request, @@ -3397,7 +3400,7 @@ def test_get_health_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceGroupHealth + post.return_value = compute.BackendServiceGroupHealth() client.get_health( request, @@ -3506,6 +3509,292 @@ def test_get_health_rest_error(): ) +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyBackendServiceRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = BackendServicesClient( + 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 + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.GetIamPolicyBackendServiceRequest, +): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = BackendServicesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.BackendServicesRestTransport( + 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.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_iam_policy" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.GetIamPolicyBackendServiceRequest.pb( + compute.GetIamPolicyBackendServiceRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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.GetIamPolicyBackendServiceRequest() + 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.GetIamPolicyBackendServiceRequest +): + client = BackendServicesClient( + 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 = 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.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 + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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/backendServices/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_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.get_iam_policy( + compute.GetIamPolicyBackendServiceRequest(), + project="project_value", + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + @pytest.mark.parametrize( "request_type", [ @@ -3583,6 +3872,7 @@ def test_insert_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -3871,7 +4161,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3957,6 +4247,7 @@ def test_insert_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -4202,6 +4493,7 @@ def test_insert_unary_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -4470,7 +4762,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -4556,6 +4848,7 @@ def test_insert_unary_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -4917,7 +5210,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceList + post.return_value = compute.BackendServiceList() client.list( request, @@ -5149,6 +5442,7 @@ def test_patch_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -5442,7 +5736,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -5528,6 +5822,7 @@ def test_patch_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -5775,6 +6070,7 @@ def test_patch_unary_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -6048,7 +6344,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -6134,6 +6430,7 @@ def test_patch_unary_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -6531,7 +6828,7 @@ def test_set_edge_security_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_edge_security_policy( request, @@ -6848,7 +7145,7 @@ def test_set_edge_security_policy_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_edge_security_policy_unary( request, @@ -6960,6 +7257,452 @@ def test_set_edge_security_policy_unary_rest_error(): ) +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicyBackendServiceRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = BackendServicesClient( + 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_value1", "members_value2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value1", + "exempted_members_value2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value1", + "exempted_members_value2", + ], + "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_value1", "values_value2"], + } + ], + "description": "description_value", + "ins": ["ins_value1", "ins_value2"], + "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_value1", "not_ins_value2"], + "permissions": ["permissions_value1", "permissions_value2"], + } + ], + "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 + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetIamPolicyBackendServiceRequest, +): + transport_class = transports.BackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = BackendServicesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.BackendServicesRestTransport( + 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.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_iam_policy" + ) as post, mock.patch.object( + transports.BackendServicesRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetIamPolicyBackendServiceRequest.pb( + compute.SetIamPolicyBackendServiceRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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.SetIamPolicyBackendServiceRequest() + 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.SetIamPolicyBackendServiceRequest +): + client = BackendServicesClient( + 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_value1", "members_value2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value1", + "exempted_members_value2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value1", + "exempted_members_value2", + ], + "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_value1", "values_value2"], + } + ], + "description": "description_value", + "ins": ["ins_value1", "ins_value2"], + "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_value1", "not_ins_value2"], + "permissions": ["permissions_value1", "permissions_value2"], + } + ], + "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 = 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.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 + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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/backendServices/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_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_iam_policy( + compute.SetIamPolicyBackendServiceRequest(), + 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 = BackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + @pytest.mark.parametrize( "request_type", [ @@ -7187,7 +7930,7 @@ def test_set_security_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_security_policy( request, @@ -7503,7 +8246,7 @@ def test_set_security_policy_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_security_policy_unary( request, @@ -7691,6 +8434,7 @@ def test_update_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -7984,7 +8728,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -8070,6 +8814,7 @@ def test_update_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -8317,6 +9062,7 @@ def test_update_unary_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -8590,7 +9336,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, @@ -8676,6 +9422,7 @@ def test_update_unary_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -8962,10 +9709,12 @@ def test_backend_services_base_transport(): "delete_signed_url_key", "get", "get_health", + "get_iam_policy", "insert", "list", "patch", "set_edge_security_policy", + "set_iam_policy", "set_security_policy", "update", ) @@ -9123,6 +9872,9 @@ def test_backend_services_client_transport_session_collision(transport_name): session1 = client1.transport.get_health._session session2 = client2.transport.get_health._session assert session1 != session2 + session1 = client1.transport.get_iam_policy._session + session2 = client2.transport.get_iam_policy._session + assert session1 != session2 session1 = client1.transport.insert._session session2 = client2.transport.insert._session assert session1 != session2 @@ -9135,6 +9887,9 @@ def test_backend_services_client_transport_session_collision(transport_name): session1 = client1.transport.set_edge_security_policy._session session2 = client2.transport.set_edge_security_policy._session assert session1 != session2 + session1 = client1.transport.set_iam_policy._session + session2 = client2.transport.set_iam_policy._session + assert session1 != session2 session1 = client1.transport.set_security_policy._session session2 = client2.transport.set_security_policy._session assert session1 != session2 diff --git a/tests/unit/gapic/compute_v1/test_disk_types.py b/tests/unit/gapic/compute_v1/test_disk_types.py index 388916d04..df489b6fb 100644 --- a/tests/unit/gapic/compute_v1/test_disk_types.py +++ b/tests/unit/gapic/compute_v1/test_disk_types.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -738,7 +739,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskTypeAggregatedList + post.return_value = compute.DiskTypeAggregatedList() client.aggregated_list( request, @@ -1097,7 +1098,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskType + post.return_value = compute.DiskType() client.get( request, @@ -1401,7 +1402,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskTypeList + post.return_value = compute.DiskTypeList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_disks.py b/tests/unit/gapic/compute_v1/test_disks.py index 854ae5174..6be79f3f7 100644 --- a/tests/unit/gapic/compute_v1/test_disks.py +++ b/tests/unit/gapic/compute_v1/test_disks.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -768,7 +769,7 @@ def test_add_resource_policies_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_resource_policies( request, @@ -1089,7 +1090,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_resource_policies_unary( request, @@ -1399,7 +1400,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskAggregatedList + post.return_value = compute.DiskAggregatedList() client.aggregated_list( request, @@ -1837,7 +1838,7 @@ def test_create_snapshot_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.create_snapshot( request, @@ -2232,7 +2233,7 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.create_snapshot_unary( request, @@ -2596,7 +2597,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -2899,7 +2900,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -3242,7 +3243,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Disk + post.return_value = compute.Disk() client.get( request, @@ -3533,7 +3534,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -3679,6 +3680,7 @@ def test_insert_rest(request_type): "location_hint": "location_hint_value", "name": "name_value", "options": "options_value", + "params": {"resource_manager_tags": {}}, "physical_block_size_bytes": 2663, "provisioned_iops": 1740, "region": "region_value", @@ -3914,7 +3916,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3961,6 +3963,7 @@ def test_insert_rest_bad_request( "location_hint": "location_hint_value", "name": "name_value", "options": "options_value", + "params": {"resource_manager_tags": {}}, "physical_block_size_bytes": 2663, "provisioned_iops": 1740, "region": "region_value", @@ -4101,6 +4104,7 @@ def test_insert_unary_rest(request_type): "location_hint": "location_hint_value", "name": "name_value", "options": "options_value", + "params": {"resource_manager_tags": {}}, "physical_block_size_bytes": 2663, "provisioned_iops": 1740, "region": "region_value", @@ -4314,7 +4318,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -4361,6 +4365,7 @@ def test_insert_unary_rest_bad_request( "location_hint": "location_hint_value", "name": "name_value", "options": "options_value", + "params": {"resource_manager_tags": {}}, "physical_block_size_bytes": 2663, "provisioned_iops": 1740, "region": "region_value", @@ -4659,7 +4664,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskList + post.return_value = compute.DiskList() client.list( request, @@ -5046,7 +5051,7 @@ def test_remove_resource_policies_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_resource_policies( request, @@ -5367,7 +5372,7 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_resource_policies_unary( request, @@ -5704,7 +5709,7 @@ def test_resize_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize( request, @@ -6013,7 +6018,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize_unary( request, @@ -6384,7 +6389,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -6802,7 +6807,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -7127,7 +7132,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -7433,7 +7438,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, 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 60f5c58ff..ba4b31af7 100644 --- a/tests/unit/gapic/compute_v1/test_external_vpn_gateways.py +++ b/tests/unit/gapic/compute_v1/test_external_vpn_gateways.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -806,7 +807,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1108,7 +1109,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1402,7 +1403,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ExternalVpnGateway + post.return_value = compute.ExternalVpnGateway() client.get( request, @@ -1735,7 +1736,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2062,7 +2063,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2375,7 +2376,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ExternalVpnGatewayList + post.return_value = compute.ExternalVpnGatewayList() client.list( request, @@ -2756,7 +2757,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -3072,7 +3073,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -3369,7 +3370,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_firewall_policies.py b/tests/unit/gapic/compute_v1/test_firewall_policies.py index caee1b19b..95a5f8ccb 100644 --- a/tests/unit/gapic/compute_v1/test_firewall_policies.py +++ b/tests/unit/gapic/compute_v1/test_firewall_policies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -810,7 +811,7 @@ def test_add_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_association( request, @@ -1137,7 +1138,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_association_unary( request, @@ -1497,7 +1498,7 @@ def test_add_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_rule( request, @@ -1856,7 +1857,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_rule_unary( request, @@ -2213,7 +2214,7 @@ def test_clone_rules_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.clone_rules( request, @@ -2514,7 +2515,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.clone_rules_unary( request, @@ -2822,7 +2823,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -3110,7 +3111,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -3400,7 +3401,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicy + post.return_value = compute.FirewallPolicy() client.get( request, @@ -3678,7 +3679,7 @@ def test_get_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyAssociation + post.return_value = compute.FirewallPolicyAssociation() client.get_association( request, @@ -3952,7 +3953,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -4242,7 +4243,7 @@ def test_get_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyRule + post.return_value = compute.FirewallPolicyRule() client.get_rule( request, @@ -4637,7 +4638,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -5085,7 +5086,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -5344,7 +5345,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyList + post.return_value = compute.FirewallPolicyList() client.list( request, @@ -5529,7 +5530,7 @@ def test_list_associations_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPoliciesListAssociationsResponse + post.return_value = compute.FirewallPoliciesListAssociationsResponse() client.list_associations( request, @@ -5811,7 +5812,7 @@ def test_move_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.move( request, @@ -6131,7 +6132,7 @@ def test_move_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.move_unary( request, @@ -6510,7 +6511,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -6941,7 +6942,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -7372,7 +7373,7 @@ def test_patch_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_rule( request, @@ -7741,7 +7742,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_rule_unary( request, @@ -8098,7 +8099,7 @@ def test_remove_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_association( request, @@ -8399,7 +8400,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_association_unary( request, @@ -8722,7 +8723,7 @@ def test_remove_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_rule( request, @@ -9023,7 +9024,7 @@ def test_remove_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_rule_unary( request, @@ -9379,7 +9380,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -9742,7 +9743,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_firewalls.py b/tests/unit/gapic/compute_v1/test_firewalls.py index 0ef8a012b..03926c416 100644 --- a/tests/unit/gapic/compute_v1/test_firewalls.py +++ b/tests/unit/gapic/compute_v1/test_firewalls.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -757,7 +758,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1053,7 +1054,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1357,7 +1358,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Firewall + post.return_value = compute.Firewall() client.get( request, @@ -1712,7 +1713,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2089,7 +2090,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2422,7 +2423,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallList + post.return_value = compute.FirewallList() client.list( request, @@ -2835,7 +2836,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3219,7 +3220,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3625,7 +3626,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -4009,7 +4010,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_forwarding_rules.py b/tests/unit/gapic/compute_v1/test_forwarding_rules.py index 3e58b88ed..c8c78e5cd 100644 --- a/tests/unit/gapic/compute_v1/test_forwarding_rules.py +++ b/tests/unit/gapic/compute_v1/test_forwarding_rules.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -767,7 +768,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRuleAggregatedList + post.return_value = compute.ForwardingRuleAggregatedList() client.aggregated_list( request, @@ -1165,7 +1166,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1486,7 +1487,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1839,7 +1840,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRule + post.return_value = compute.ForwardingRule() client.get( request, @@ -2217,7 +2218,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2615,7 +2616,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2969,7 +2970,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRuleList + post.return_value = compute.ForwardingRuleList() client.list( request, @@ -3401,7 +3402,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3818,7 +3819,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4213,7 +4214,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -4542,7 +4543,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -4894,7 +4895,7 @@ def test_set_target_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_target( request, @@ -5221,7 +5222,7 @@ def test_set_target_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_target_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_global_addresses.py b/tests/unit/gapic/compute_v1/test_global_addresses.py index 9e7ff9fcd..7f74db72d 100644 --- a/tests/unit/gapic/compute_v1/test_global_addresses.py +++ b/tests/unit/gapic/compute_v1/test_global_addresses.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -788,7 +789,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1090,7 +1091,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1400,7 +1401,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Address + post.return_value = compute.Address() client.get( request, @@ -1738,7 +1739,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2075,7 +2076,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2387,7 +2388,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.AddressList + post.return_value = compute.AddressList() client.list( request, @@ -2542,149 +2543,804 @@ def test_list_rest_pager(transport: str = "rest"): assert page_.raw_page.next_page_token == token -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.GlobalAddressesRestTransport( +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsGlobalAddressRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = GlobalAddressesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - # It is an error to provide a credentials file and a transport instance. - transport = transports.GlobalAddressesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = GlobalAddressesClient( - client_options={"credentials_file": "credentials.json"}, - 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) - # It is an error to provide an api_key and a transport instance. - transport = transports.GlobalAddressesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = GlobalAddressesClient( - client_options=options, - transport=transport, + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.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", ) - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = GlobalAddressesClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) - # It is an error to provide scopes and a transport instance. - transport = transports.GlobalAddressesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = GlobalAddressesClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) + 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_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.GlobalAddressesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsGlobalAddressRequest, +): + transport_class = transports.GlobalAddressesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) ) - client = GlobalAddressesClient(transport=transport) - assert client.transport is transport + # verify fields with default values are dropped -@pytest.mark.parametrize( - "transport_class", - [ - transports.GlobalAddressesRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + 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 -@pytest.mark.parametrize( - "transport_name", - [ - "rest", - ], -) -def test_transport_kind(transport_name): - transport = GlobalAddressesClient.get_transport_class(transport_name)( + 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 = GlobalAddressesClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - assert transport.kind == transport_name + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result -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): - transport = transports.GlobalAddressesTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json", - ) + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) -def test_global_addresses_base_transport(): - # Instantiate the base transport. - with mock.patch( - "google.cloud.compute_v1.services.global_addresses.transports.GlobalAddressesTransport.__init__" - ) as Transport: - Transport.return_value = None - transport = transports.GlobalAddressesTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - "delete", - "get", - "insert", - "list", - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) + response = client.set_labels(request) - with pytest.raises(NotImplementedError): - transport.close() + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - # Catch all for all remaining methods and properties - remainder = [ - "kind", - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() +def test_set_labels_rest_unset_required_fields(): + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) -def test_global_addresses_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.compute_v1.services.global_addresses.transports.GlobalAddressesTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.GlobalAddressesTransport( - credentials_file="credentials.json", - quota_project_id="octopus", + 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.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_set_labels" + ) as post, mock.patch.object( + transports.GlobalAddressesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsGlobalAddressRequest.pb( + compute.SetLabelsGlobalAddressRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsGlobalAddressRequest() + 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.SetLabelsGlobalAddressRequest +): + client = GlobalAddressesClient( + 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 = 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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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/addresses/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels( + compute.SetLabelsGlobalAddressRequest(), + 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 = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsGlobalAddressRequest, + dict, + ], +) +def test_set_labels_unary_rest(request_type): + client = GlobalAddressesClient( + 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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetLabelsGlobalAddressRequest, +): + transport_class = transports.GlobalAddressesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.GlobalAddressesRestTransport( + 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_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_set_labels" + ) as post, mock.patch.object( + transports.GlobalAddressesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsGlobalAddressRequest.pb( + compute.SetLabelsGlobalAddressRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsGlobalAddressRequest() + 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.SetLabelsGlobalAddressRequest +): + client = GlobalAddressesClient( + 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_unary(request) + + +def test_set_labels_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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/global/addresses/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels_unary( + compute.SetLabelsGlobalAddressRequest(), + project="project_value", + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + + +def test_set_labels_unary_rest_error(): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = GlobalAddressesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = GlobalAddressesClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = GlobalAddressesClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = GlobalAddressesClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = GlobalAddressesClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.GlobalAddressesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = GlobalAddressesClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.GlobalAddressesRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + 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): + transport = transports.GlobalAddressesTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_global_addresses_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.compute_v1.services.global_addresses.transports.GlobalAddressesTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.GlobalAddressesTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "delete", + "get", + "insert", + "list", + "set_labels", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + 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 + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.compute_v1.services.global_addresses.transports.GlobalAddressesTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.GlobalAddressesTransport( + credentials_file="credentials.json", + quota_project_id="octopus", ) load_creds.assert_called_once_with( "credentials.json", @@ -2805,6 +3461,9 @@ def test_global_addresses_client_transport_session_collision(transport_name): session1 = client1.transport.list._session session2 = client2.transport.list._session assert session1 != session2 + session1 = client1.transport.set_labels._session + session2 = client2.transport.set_labels._session + assert session1 != session2 def test_common_billing_account_path(): 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 e111cdb10..dedf00cd1 100644 --- a/tests/unit/gapic/compute_v1/test_global_forwarding_rules.py +++ b/tests/unit/gapic/compute_v1/test_global_forwarding_rules.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -806,7 +807,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1108,7 +1109,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1442,7 +1443,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRule + post.return_value = compute.ForwardingRule() client.get( request, @@ -1807,7 +1808,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2198,7 +2199,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2543,7 +2544,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ForwardingRuleList + post.return_value = compute.ForwardingRuleList() client.list( request, @@ -2966,7 +2967,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3364,7 +3365,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3742,7 +3743,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -4058,7 +4059,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -4395,7 +4396,7 @@ def test_set_target_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_target( request, @@ -4703,7 +4704,7 @@ def test_set_target_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_target_unary( request, 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 7254626b5..795f1a7f1 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -829,7 +830,7 @@ def test_attach_network_endpoints_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.attach_network_endpoints( request, @@ -1168,7 +1169,7 @@ def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.attach_network_endpoints_unary( request, @@ -1514,7 +1515,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1817,7 +1818,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2157,7 +2158,7 @@ def test_detach_network_endpoints_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.detach_network_endpoints( request, @@ -2496,7 +2497,7 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.detach_network_endpoints_unary( request, @@ -2826,7 +2827,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroup + post.return_value = compute.NetworkEndpointGroup() client.get( request, @@ -3175,7 +3176,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3535,7 +3536,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3865,7 +3866,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroupList + post.return_value = compute.NetworkEndpointGroupList() client.list( request, @@ -4230,7 +4231,7 @@ def test_list_network_endpoints_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroupsListNetworkEndpoints + post.return_value = compute.NetworkEndpointGroupsListNetworkEndpoints() client.list_network_endpoints( request, diff --git a/tests/unit/gapic/compute_v1/test_global_operations.py b/tests/unit/gapic/compute_v1/test_global_operations.py index 9315c98c5..7785f0b43 100644 --- a/tests/unit/gapic/compute_v1/test_global_operations.py +++ b/tests/unit/gapic/compute_v1/test_global_operations.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -771,7 +772,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.OperationAggregatedList + post.return_value = compute.OperationAggregatedList() client.aggregated_list( request, @@ -1110,7 +1111,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DeleteGlobalOperationResponse + post.return_value = compute.DeleteGlobalOperationResponse() client.delete( request, @@ -1430,7 +1431,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.get( request, @@ -1725,7 +1726,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.OperationList + post.return_value = compute.OperationList() client.list( request, @@ -2098,7 +2099,7 @@ def test_wait_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.wait( request, 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 49453fe5b..98265aea2 100644 --- a/tests/unit/gapic/compute_v1/test_global_organization_operations.py +++ b/tests/unit/gapic/compute_v1/test_global_organization_operations.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -763,7 +764,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DeleteGlobalOrganizationOperationResponse + post.return_value = compute.DeleteGlobalOrganizationOperationResponse() client.delete( request, @@ -1076,7 +1077,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.get( request, @@ -1264,7 +1265,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.OperationList + post.return_value = compute.OperationList() client.list( request, 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 09b4ba57d..d0d51fbb0 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -816,7 +817,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1119,7 +1120,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1424,7 +1425,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefix + post.return_value = compute.PublicDelegatedPrefix() client.get( request, @@ -1770,7 +1771,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2124,7 +2125,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2451,7 +2452,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefixList + post.return_value = compute.PublicDelegatedPrefixList() client.list( request, @@ -2856,7 +2857,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3217,7 +3218,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_health_checks.py b/tests/unit/gapic/compute_v1/test_health_checks.py index b0407e557..f1d1f2999 100644 --- a/tests/unit/gapic/compute_v1/test_health_checks.py +++ b/tests/unit/gapic/compute_v1/test_health_checks.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -744,7 +745,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthChecksAggregatedList + post.return_value = compute.HealthChecksAggregatedList() client.aggregated_list( request, @@ -1133,7 +1134,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1435,7 +1436,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1733,7 +1734,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheck + post.return_value = compute.HealthCheck() client.get( request, @@ -2116,7 +2117,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2543,7 +2544,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2902,7 +2903,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheckList + post.return_value = compute.HealthCheckList() client.list( request, @@ -3343,7 +3344,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3775,7 +3776,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4229,7 +4230,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -4663,7 +4664,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, 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 965622fec..3e00ac70c 100644 --- a/tests/unit/gapic/compute_v1/test_image_family_views.py +++ b/tests/unit/gapic/compute_v1/test_image_family_views.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -751,7 +752,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ImageFamilyView + post.return_value = compute.ImageFamilyView() client.get( request, diff --git a/tests/unit/gapic/compute_v1/test_images.py b/tests/unit/gapic/compute_v1/test_images.py index eb9f56509..8d8a994a4 100644 --- a/tests/unit/gapic/compute_v1/test_images.py +++ b/tests/unit/gapic/compute_v1/test_images.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -754,7 +755,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1050,7 +1051,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1377,7 +1378,7 @@ def test_deprecate_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.deprecate( request, @@ -1697,7 +1698,7 @@ def test_deprecate_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.deprecate_unary( request, @@ -2028,7 +2029,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Image + post.return_value = compute.Image() client.get( request, @@ -2350,7 +2351,7 @@ def test_get_from_family_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Image + post.return_value = compute.Image() client.get_from_family( request, @@ -2634,7 +2635,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -3014,7 +3015,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3426,7 +3427,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3769,7 +3770,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ImageList + post.return_value = compute.ImageList() client.list( request, @@ -4196,7 +4197,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -4606,7 +4607,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -5024,7 +5025,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -5429,7 +5430,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -5741,7 +5742,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -6036,7 +6037,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, 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 7689bf142..de2aa49fb 100644 --- a/tests/unit/gapic/compute_v1/test_instance_group_managers.py +++ b/tests/unit/gapic/compute_v1/test_instance_group_managers.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -820,7 +821,7 @@ def test_abandon_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.abandon_instances( request, @@ -1156,7 +1157,7 @@ def test_abandon_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.abandon_instances_unary( request, @@ -1479,7 +1480,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagerAggregatedList + post.return_value = compute.InstanceGroupManagerAggregatedList() client.aggregated_list( request, @@ -1888,7 +1889,7 @@ def test_apply_updates_to_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.apply_updates_to_instances( request, @@ -2230,7 +2231,7 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.apply_updates_to_instances_unary( request, @@ -2598,7 +2599,7 @@ def test_create_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.create_instances( request, @@ -2948,7 +2949,7 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.create_instances_unary( request, @@ -3308,7 +3309,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -3629,7 +3630,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -3978,7 +3979,7 @@ def test_delete_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_instances( request, @@ -4316,7 +4317,7 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_instances_unary( request, @@ -4675,7 +4676,7 @@ def test_delete_per_instance_configs_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_per_instance_configs( request, @@ -5011,7 +5012,7 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_per_instance_configs_unary( request, @@ -5348,7 +5349,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManager + post.return_value = compute.InstanceGroupManager() client.get( request, @@ -5749,7 +5750,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -6197,7 +6198,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -6582,7 +6583,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagerList + post.return_value = compute.InstanceGroupManagerList() client.list( request, @@ -6952,7 +6953,7 @@ def test_list_errors_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagersListErrorsResponse + post.return_value = compute.InstanceGroupManagersListErrorsResponse() client.list_errors( request, @@ -7342,7 +7343,7 @@ def test_list_managed_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagersListManagedInstancesResponse + post.return_value = compute.InstanceGroupManagersListManagedInstancesResponse() client.list_managed_instances( request, @@ -7733,7 +7734,7 @@ def test_list_per_instance_configs_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp + post.return_value = compute.InstanceGroupManagersListPerInstanceConfigsResp() client.list_per_instance_configs( request, @@ -8208,7 +8209,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -8675,7 +8676,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -9111,7 +9112,7 @@ def test_patch_per_instance_configs_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_per_instance_configs( request, @@ -9467,7 +9468,7 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_per_instance_configs_unary( request, @@ -9836,7 +9837,7 @@ def test_recreate_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.recreate_instances( request, @@ -10172,7 +10173,7 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.recreate_instances_unary( request, @@ -10476,7 +10477,7 @@ def test_resize_rest_required_fields( expected_params = [ ( "size", - 0, + str(0), ), ] actual_params = req.call_args.kwargs["params"] @@ -10548,7 +10549,7 @@ def test_resize_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize( request, @@ -10822,7 +10823,7 @@ def test_resize_unary_rest_required_fields( expected_params = [ ( "size", - 0, + str(0), ), ] actual_params = req.call_args.kwargs["params"] @@ -10894,7 +10895,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize_unary( request, @@ -11244,7 +11245,7 @@ def test_set_instance_template_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_instance_template( request, @@ -11580,7 +11581,7 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_instance_template_unary( request, @@ -11939,7 +11940,7 @@ def test_set_target_pools_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_target_pools( request, @@ -12277,7 +12278,7 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_target_pools_unary( request, @@ -12645,7 +12646,7 @@ def test_update_per_instance_configs_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_per_instance_configs( request, @@ -13001,7 +13002,7 @@ def test_update_per_instance_configs_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_per_instance_configs_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_instance_groups.py b/tests/unit/gapic/compute_v1/test_instance_groups.py index 0b17c2f23..65f1fb4b5 100644 --- a/tests/unit/gapic/compute_v1/test_instance_groups.py +++ b/tests/unit/gapic/compute_v1/test_instance_groups.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -790,7 +791,7 @@ def test_add_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_instances( request, @@ -1125,7 +1126,7 @@ def test_add_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_instances_unary( request, @@ -1445,7 +1446,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupAggregatedList + post.return_value = compute.InstanceGroupAggregatedList() client.aggregated_list( request, @@ -1843,7 +1844,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -2164,7 +2165,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2485,7 +2486,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroup + post.return_value = compute.InstanceGroup() client.get( request, @@ -2834,7 +2835,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3174,7 +3175,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3499,7 +3500,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupList + post.return_value = compute.InstanceGroupList() client.list( request, @@ -3874,7 +3875,7 @@ def test_list_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupsListInstances + post.return_value = compute.InstanceGroupsListInstances() client.list_instances( request, @@ -4297,7 +4298,7 @@ def test_remove_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_instances( request, @@ -4632,7 +4633,7 @@ def test_remove_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_instances_unary( request, @@ -4990,7 +4991,7 @@ def test_set_named_ports_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_named_ports( request, @@ -5327,7 +5328,7 @@ def test_set_named_ports_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_named_ports_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_instance_templates.py b/tests/unit/gapic/compute_v1/test_instance_templates.py index 611ea6123..9e9cf5b90 100644 --- a/tests/unit/gapic/compute_v1/test_instance_templates.py +++ b/tests/unit/gapic/compute_v1/test_instance_templates.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -796,7 +797,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1098,7 +1099,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1390,7 +1391,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceTemplate + post.return_value = compute.InstanceTemplate() client.get( request, @@ -1676,7 +1677,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -1804,6 +1805,7 @@ def test_insert_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -1822,6 +1824,7 @@ def test_insert_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -1834,6 +1837,7 @@ def test_insert_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -2170,7 +2174,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2205,6 +2209,7 @@ def test_insert_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -2223,6 +2228,7 @@ def test_insert_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -2235,6 +2241,7 @@ def test_insert_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -2475,6 +2482,7 @@ def test_insert_unary_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -2493,6 +2501,7 @@ def test_insert_unary_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -2505,6 +2514,7 @@ def test_insert_unary_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -2819,7 +2829,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2854,6 +2864,7 @@ def test_insert_unary_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -2872,6 +2883,7 @@ def test_insert_unary_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -2884,6 +2896,7 @@ def test_insert_unary_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -3291,7 +3304,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceTemplateList + post.return_value = compute.InstanceTemplateList() client.list( request, @@ -3707,7 +3720,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -4077,7 +4090,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_instances.py b/tests/unit/gapic/compute_v1/test_instances.py index 258f2adac..e24f61444 100644 --- a/tests/unit/gapic/compute_v1/test_instances.py +++ b/tests/unit/gapic/compute_v1/test_instances.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -802,7 +803,7 @@ def test_add_access_config_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_access_config( request, @@ -1168,7 +1169,7 @@ def test_add_access_config_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_access_config_unary( request, @@ -1525,7 +1526,7 @@ def test_add_resource_policies_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_resource_policies( request, @@ -1850,7 +1851,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_resource_policies_unary( request, @@ -2164,7 +2165,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceAggregatedList + post.return_value = compute.InstanceAggregatedList() client.aggregated_list( request, @@ -2356,6 +2357,7 @@ def test_attach_disk_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -2368,6 +2370,7 @@ def test_attach_disk_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -2612,7 +2615,7 @@ def test_attach_disk_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.attach_disk( request, @@ -2649,6 +2652,7 @@ def test_attach_disk_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -2661,6 +2665,7 @@ def test_attach_disk_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -2801,6 +2806,7 @@ def test_attach_disk_unary_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -2813,6 +2819,7 @@ def test_attach_disk_unary_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -3035,7 +3042,7 @@ def test_attach_disk_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.attach_disk_unary( request, @@ -3072,6 +3079,7 @@ def test_attach_disk_unary_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -3084,6 +3092,7 @@ def test_attach_disk_unary_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -3218,6 +3227,7 @@ def test_bulk_insert_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -3236,6 +3246,7 @@ def test_bulk_insert_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -3248,6 +3259,7 @@ def test_bulk_insert_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -3580,7 +3592,7 @@ def test_bulk_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.bulk_insert( request, @@ -3611,6 +3623,7 @@ def test_bulk_insert_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -3629,6 +3642,7 @@ def test_bulk_insert_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -3641,6 +3655,7 @@ def test_bulk_insert_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -3872,6 +3887,7 @@ def test_bulk_insert_unary_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -3890,6 +3906,7 @@ def test_bulk_insert_unary_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -3902,6 +3919,7 @@ def test_bulk_insert_unary_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -4212,7 +4230,7 @@ def test_bulk_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.bulk_insert_unary( request, @@ -4243,6 +4261,7 @@ def test_bulk_insert_unary_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -4261,6 +4280,7 @@ def test_bulk_insert_unary_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -4273,6 +4293,7 @@ def test_bulk_insert_unary_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -4703,7 +4724,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -5010,7 +5031,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -5380,7 +5401,7 @@ def test_delete_access_config_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_access_config( request, @@ -5732,7 +5753,7 @@ def test_delete_access_config_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_access_config_unary( request, @@ -6092,7 +6113,7 @@ def test_detach_disk_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.detach_disk( request, @@ -6428,7 +6449,7 @@ def test_detach_disk_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.detach_disk_unary( request, @@ -6765,7 +6786,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Instance + post.return_value = compute.Instance() client.get( request, @@ -7074,7 +7095,7 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstancesGetEffectiveFirewallsResponse + post.return_value = compute.InstancesGetEffectiveFirewallsResponse() client.get_effective_firewalls( request, @@ -7389,7 +7410,7 @@ def test_get_guest_attributes_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.GuestAttributes + post.return_value = compute.GuestAttributes() client.get_guest_attributes( request, @@ -7684,7 +7705,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -7975,7 +7996,7 @@ def test_get_screenshot_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Screenshot + post.return_value = compute.Screenshot() client.get_screenshot( request, @@ -8286,7 +8307,7 @@ def test_get_serial_port_output_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SerialPortOutput + post.return_value = compute.SerialPortOutput() client.get_serial_port_output( request, @@ -8579,7 +8600,7 @@ def test_get_shielded_instance_identity_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ShieldedInstanceIdentity + post.return_value = compute.ShieldedInstanceIdentity() client.get_shielded_instance_identity( request, @@ -8708,6 +8729,7 @@ def test_insert_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -8729,6 +8751,7 @@ def test_insert_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -8741,6 +8764,7 @@ def test_insert_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -9088,7 +9112,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -9117,6 +9141,7 @@ def test_insert_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -9138,6 +9163,7 @@ def test_insert_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -9150,6 +9176,7 @@ def test_insert_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -9390,6 +9417,7 @@ def test_insert_unary_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -9411,6 +9439,7 @@ def test_insert_unary_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -9423,6 +9452,7 @@ def test_insert_unary_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -9748,7 +9778,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -9777,6 +9807,7 @@ def test_insert_unary_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -9798,6 +9829,7 @@ def test_insert_unary_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -9810,6 +9842,7 @@ def test_insert_unary_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -10226,7 +10259,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceList + post.return_value = compute.InstanceList() client.list( request, @@ -10590,7 +10623,7 @@ def test_list_referrers_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceListReferrers + post.return_value = compute.InstanceListReferrers() client.list_referrers( request, @@ -10987,7 +11020,7 @@ def test_remove_resource_policies_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_resource_policies( request, @@ -11312,7 +11345,7 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_resource_policies_unary( request, @@ -11650,7 +11683,7 @@ def test_reset_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.reset( request, @@ -11957,7 +11990,7 @@ def test_reset_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.reset_unary( request, @@ -12286,7 +12319,7 @@ def test_resume_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resume( request, @@ -12593,7 +12626,7 @@ def test_resume_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resume_unary( request, @@ -12887,7 +12920,7 @@ def test_send_diagnostic_interrupt_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SendDiagnosticInterruptInstanceResponse + post.return_value = compute.SendDiagnosticInterruptInstanceResponse() client.send_diagnostic_interrupt( request, @@ -13232,7 +13265,7 @@ def test_set_deletion_protection_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_deletion_protection( request, @@ -13553,7 +13586,7 @@ def test_set_deletion_protection_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_deletion_protection_unary( request, @@ -13847,7 +13880,7 @@ def test_set_disk_auto_delete_rest_required_fields( expected_params = [ ( "autoDelete", - False, + str(False).lower(), ), ( "deviceName", @@ -13923,7 +13956,7 @@ def test_set_disk_auto_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_disk_auto_delete( request, @@ -14199,7 +14232,7 @@ def test_set_disk_auto_delete_unary_rest_required_fields( expected_params = [ ( "autoDelete", - False, + str(False).lower(), ), ( "deviceName", @@ -14275,7 +14308,7 @@ def test_set_disk_auto_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_disk_auto_delete_unary( request, @@ -14651,7 +14684,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -15071,7 +15104,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -15398,7 +15431,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -15748,7 +15781,7 @@ def test_set_machine_resources_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_machine_resources( request, @@ -16077,7 +16110,7 @@ def test_set_machine_resources_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_machine_resources_unary( request, @@ -16426,7 +16459,7 @@ def test_set_machine_type_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_machine_type( request, @@ -16751,7 +16784,7 @@ def test_set_machine_type_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_machine_type_unary( request, @@ -17100,7 +17133,7 @@ def test_set_metadata_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_metadata( request, @@ -17425,7 +17458,7 @@ def test_set_metadata_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_metadata_unary( request, @@ -17770,7 +17803,7 @@ def test_set_min_cpu_platform_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_min_cpu_platform( request, @@ -18095,7 +18128,7 @@ def test_set_min_cpu_platform_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_min_cpu_platform_unary( request, @@ -18455,7 +18488,7 @@ def test_set_scheduling_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_scheduling( request, @@ -18802,7 +18835,7 @@ def test_set_scheduling_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_scheduling_unary( request, @@ -19159,7 +19192,7 @@ def test_set_service_account_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_service_account( request, @@ -19486,7 +19519,7 @@ def test_set_service_account_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_service_account_unary( request, @@ -19842,7 +19875,7 @@ def test_set_shielded_instance_integrity_policy_rest_interceptors(null_intercept ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_shielded_instance_integrity_policy( request, @@ -20180,7 +20213,7 @@ def test_set_shielded_instance_integrity_policy_unary_rest_interceptors( ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_shielded_instance_integrity_policy_unary( request, @@ -20527,7 +20560,7 @@ def test_set_tags_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_tags( request, @@ -20848,7 +20881,7 @@ def test_set_tags_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_tags_unary( request, @@ -21185,7 +21218,7 @@ def test_simulate_maintenance_event_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.simulate_maintenance_event( request, @@ -21495,7 +21528,7 @@ def test_simulate_maintenance_event_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.simulate_maintenance_event_unary( request, @@ -21825,7 +21858,7 @@ def test_start_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.start( request, @@ -22132,7 +22165,7 @@ def test_start_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.start_unary( request, @@ -22481,7 +22514,7 @@ def test_start_with_encryption_key_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.start_with_encryption_key( request, @@ -22840,7 +22873,7 @@ def test_start_with_encryption_key_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.start_with_encryption_key_unary( request, @@ -23201,7 +23234,7 @@ def test_stop_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.stop( request, @@ -23508,7 +23541,7 @@ def test_stop_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.stop_unary( request, @@ -23837,7 +23870,7 @@ def test_suspend_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.suspend( request, @@ -24146,7 +24179,7 @@ def test_suspend_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.suspend_unary( request, @@ -24442,7 +24475,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, @@ -24579,6 +24612,7 @@ def test_update_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -24600,6 +24634,7 @@ def test_update_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -24612,6 +24647,7 @@ def test_update_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -24964,7 +25000,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -24993,6 +25029,7 @@ def test_update_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -25014,6 +25051,7 @@ def test_update_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -25026,6 +25064,7 @@ def test_update_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -25272,6 +25311,7 @@ def test_update_unary_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -25293,6 +25333,7 @@ def test_update_unary_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -25305,6 +25346,7 @@ def test_update_unary_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -25635,7 +25677,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, @@ -25664,6 +25706,7 @@ def test_update_unary_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -25685,6 +25728,7 @@ def test_update_unary_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -25697,6 +25741,7 @@ def test_update_unary_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -26184,7 +26229,7 @@ def test_update_access_config_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_access_config( request, @@ -26550,7 +26595,7 @@ def test_update_access_config_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_access_config_unary( request, @@ -26905,7 +26950,7 @@ def test_update_display_device_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_display_device( request, @@ -27222,7 +27267,7 @@ def test_update_display_device_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_display_device_unary( request, @@ -27617,7 +27662,7 @@ def test_update_network_interface_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_network_interface( request, @@ -28033,7 +28078,7 @@ def test_update_network_interface_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_network_interface_unary( request, @@ -28421,7 +28466,7 @@ def test_update_shielded_instance_config_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_shielded_instance_config( request, @@ -28753,7 +28798,7 @@ def test_update_shielded_instance_config_unary_rest_interceptors(null_intercepto ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_shielded_instance_config_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_interconnect_attachments.py b/tests/unit/gapic/compute_v1/test_interconnect_attachments.py index ac6129d18..4b6e2a1c5 100644 --- a/tests/unit/gapic/compute_v1/test_interconnect_attachments.py +++ b/tests/unit/gapic/compute_v1/test_interconnect_attachments.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -789,7 +790,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectAttachmentAggregatedList + post.return_value = compute.InterconnectAttachmentAggregatedList() client.aggregated_list( request, @@ -1192,7 +1193,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1515,7 +1516,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1888,7 +1889,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectAttachment + post.return_value = compute.InterconnectAttachment() client.get( request, @@ -2281,7 +2282,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2695,7 +2696,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3054,7 +3055,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectAttachmentList + post.return_value = compute.InterconnectAttachmentList() client.list( request, @@ -3495,7 +3496,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3920,7 +3921,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4085,149 +4086,830 @@ def test_patch_unary_rest_error(): ) -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.InterconnectAttachmentsRestTransport( +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsInterconnectAttachmentRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = InterconnectAttachmentsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - # It is an error to provide a credentials file and a transport instance. - transport = transports.InterconnectAttachmentsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = InterconnectAttachmentsClient( - client_options={"credentials_file": "credentials.json"}, - 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) - # It is an error to provide an api_key and a transport instance. - transport = transports.InterconnectAttachmentsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = InterconnectAttachmentsClient( - client_options=options, - transport=transport, + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.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", ) - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = InterconnectAttachmentsClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) - # It is an error to provide scopes and a transport instance. - transport = transports.InterconnectAttachmentsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = InterconnectAttachmentsClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) + 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_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.InterconnectAttachmentsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsInterconnectAttachmentRequest, +): + transport_class = transports.InterconnectAttachmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) ) - client = InterconnectAttachmentsClient(transport=transport) - assert client.transport is transport + # verify fields with default values are dropped -@pytest.mark.parametrize( - "transport_class", - [ - transports.InterconnectAttachmentsRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + 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 -@pytest.mark.parametrize( - "transport_name", - [ - "rest", - ], -) -def test_transport_kind(transport_name): - transport = InterconnectAttachmentsClient.get_transport_class(transport_name)( + 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 = InterconnectAttachmentsClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - assert transport.kind == transport_name + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result -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): - transport = transports.InterconnectAttachmentsTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json", - ) + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) -def test_interconnect_attachments_base_transport(): - # Instantiate the base transport. - with mock.patch( - "google.cloud.compute_v1.services.interconnect_attachments.transports.InterconnectAttachmentsTransport.__init__" - ) as Transport: - Transport.return_value = None - transport = transports.InterconnectAttachmentsTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - "aggregated_list", - "delete", - "get", - "insert", - "list", - "patch", - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) + response = client.set_labels(request) - with pytest.raises(NotImplementedError): - transport.close() + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - # Catch all for all remaining methods and properties - remainder = [ - "kind", - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() +def test_set_labels_rest_unset_required_fields(): + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) -def test_interconnect_attachments_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.compute_v1.services.interconnect_attachments.transports.InterconnectAttachmentsTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.InterconnectAttachmentsTransport( + 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.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_set_labels" + ) as post, mock.patch.object( + transports.InterconnectAttachmentsRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsInterconnectAttachmentRequest.pb( + compute.SetLabelsInterconnectAttachmentRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsInterconnectAttachmentRequest() + 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.SetLabelsInterconnectAttachmentRequest +): + client = InterconnectAttachmentsClient( + 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 = 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", + "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/interconnectAttachments/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels( + compute.SetLabelsInterconnectAttachmentRequest(), + 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 = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsInterconnectAttachmentRequest, + dict, + ], +) +def test_set_labels_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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetLabelsInterconnectAttachmentRequest, +): + transport_class = transports.InterconnectAttachmentsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.InterconnectAttachmentsRestTransport( + 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_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_set_labels" + ) as post, mock.patch.object( + transports.InterconnectAttachmentsRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsInterconnectAttachmentRequest.pb( + compute.SetLabelsInterconnectAttachmentRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsInterconnectAttachmentRequest() + 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.SetLabelsInterconnectAttachmentRequest +): + client = InterconnectAttachmentsClient( + 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_unary(request) + + +def test_set_labels_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", + "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/regions/{region}/interconnectAttachments/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels_unary( + compute.SetLabelsInterconnectAttachmentRequest(), + 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_unary_rest_error(): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = InterconnectAttachmentsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = InterconnectAttachmentsClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = InterconnectAttachmentsClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = InterconnectAttachmentsClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = InterconnectAttachmentsClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.InterconnectAttachmentsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = InterconnectAttachmentsClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.InterconnectAttachmentsRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + 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): + transport = transports.InterconnectAttachmentsTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_interconnect_attachments_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.compute_v1.services.interconnect_attachments.transports.InterconnectAttachmentsTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.InterconnectAttachmentsTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "aggregated_list", + "delete", + "get", + "insert", + "list", + "patch", + "set_labels", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + 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 + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.compute_v1.services.interconnect_attachments.transports.InterconnectAttachmentsTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.InterconnectAttachmentsTransport( credentials_file="credentials.json", quota_project_id="octopus", ) @@ -4356,6 +5038,9 @@ def test_interconnect_attachments_client_transport_session_collision(transport_n session1 = client1.transport.patch._session session2 = client2.transport.patch._session assert session1 != session2 + session1 = client1.transport.set_labels._session + session2 = client2.transport.set_labels._session + assert session1 != session2 def test_common_billing_account_path(): diff --git a/tests/unit/gapic/compute_v1/test_interconnect_locations.py b/tests/unit/gapic/compute_v1/test_interconnect_locations.py index 19996421e..5031c02db 100644 --- a/tests/unit/gapic/compute_v1/test_interconnect_locations.py +++ b/tests/unit/gapic/compute_v1/test_interconnect_locations.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -790,7 +791,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectLocation + post.return_value = compute.InterconnectLocation() client.get( request, @@ -1087,7 +1088,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectLocationList + post.return_value = compute.InterconnectLocationList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_interconnects.py b/tests/unit/gapic/compute_v1/test_interconnects.py index 875d2760d..fb135f3a8 100644 --- a/tests/unit/gapic/compute_v1/test_interconnects.py +++ b/tests/unit/gapic/compute_v1/test_interconnects.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -774,7 +775,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1076,7 +1077,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1392,7 +1393,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Interconnect + post.return_value = compute.Interconnect() client.get( request, @@ -1673,7 +1674,7 @@ def test_get_diagnostics_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectsGetDiagnosticsResponse + post.return_value = compute.InterconnectsGetDiagnosticsResponse() client.get_diagnostics( request, @@ -2040,7 +2041,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2435,7 +2436,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2778,7 +2779,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InterconnectList + post.return_value = compute.InterconnectList() client.list( request, @@ -3203,7 +3204,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3605,7 +3606,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3757,93 +3758,747 @@ def test_patch_unary_rest_error(): ) -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.InterconnectsRestTransport( +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsInterconnectRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = InterconnectsClient( - 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 response. + with mock.patch.object(type(client.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", ) - # It is an error to provide a credentials file and a transport instance. - transport = transports.InterconnectsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = InterconnectsClient( - client_options={"credentials_file": "credentials.json"}, - transport=transport, + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetLabelsInterconnectRequest, +): + transport_class = transports.InterconnectsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, ) + ) - # It is an error to provide an api_key and a transport instance. - transport = transports.InterconnectsRestTransport( + # 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 = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = InterconnectsClient( - client_options=options, - transport=transport, - ) + request = request_type(**request_init) - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = InterconnectsClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) + # 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result - # It is an error to provide scopes and a transport instance. + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.InterconnectsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), + credentials=ga_credentials.AnonymousCredentials ) - with pytest.raises(ValueError): - client = InterconnectsClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, + + unset_fields = transport.set_labels._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "globalSetLabelsRequestResource", + "project", + "resource", + ) ) + ) -def test_transport_instance(): - # A client may be instantiated with a custom transport instance. +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_set_labels_rest_interceptors(null_interceptor): transport = transports.InterconnectsRestTransport( credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.InterconnectsRestInterceptor(), ) client = InterconnectsClient(transport=transport) - assert client.transport is 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_set_labels" + ) as post, mock.patch.object( + transports.InterconnectsRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsInterconnectRequest.pb( + compute.SetLabelsInterconnectRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.Operation.to_json(compute.Operation()) -@pytest.mark.parametrize( - "transport_class", - [ - transports.InterconnectsRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + request = compute.SetLabelsInterconnectRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.Operation() + client.set_labels( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) -@pytest.mark.parametrize( - "transport_name", - [ - "rest", - ], -) -def test_transport_kind(transport_name): - transport = InterconnectsClient.get_transport_class(transport_name)( + pre.assert_called_once() + post.assert_called_once() + + +def test_set_labels_rest_bad_request( + transport: str = "rest", request_type=compute.SetLabelsInterconnectRequest +): + client = InterconnectsClient( credentials=ga_credentials.AnonymousCredentials(), + transport=transport, ) - assert transport.kind == transport_name - + + # 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 = 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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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/interconnects/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels( + compute.SetLabelsInterconnectRequest(), + 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 = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsInterconnectRequest, + dict, + ], +) +def test_set_labels_unary_rest(request_type): + client = InterconnectsClient( + 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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetLabelsInterconnectRequest, +): + transport_class = transports.InterconnectsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.InterconnectsRestTransport( + 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_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_set_labels" + ) as post, mock.patch.object( + transports.InterconnectsRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsInterconnectRequest.pb( + compute.SetLabelsInterconnectRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsInterconnectRequest() + 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.SetLabelsInterconnectRequest +): + client = InterconnectsClient( + 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_unary(request) + + +def test_set_labels_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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/global/interconnects/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels_unary( + compute.SetLabelsInterconnectRequest(), + project="project_value", + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + + +def test_set_labels_unary_rest_error(): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = InterconnectsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = InterconnectsClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = InterconnectsClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = InterconnectsClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = InterconnectsClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.InterconnectsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = InterconnectsClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.InterconnectsRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + 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 @@ -3873,6 +4528,7 @@ def test_interconnects_base_transport(): "insert", "list", "patch", + "set_labels", ) for method in methods: with pytest.raises(NotImplementedError): @@ -4028,6 +4684,9 @@ def test_interconnects_client_transport_session_collision(transport_name): session1 = client1.transport.patch._session session2 = client2.transport.patch._session assert session1 != session2 + session1 = client1.transport.set_labels._session + session2 = client2.transport.set_labels._session + assert session1 != session2 def test_common_billing_account_path(): diff --git a/tests/unit/gapic/compute_v1/test_license_codes.py b/tests/unit/gapic/compute_v1/test_license_codes.py index 0b76f1020..f51fcbccb 100644 --- a/tests/unit/gapic/compute_v1/test_license_codes.py +++ b/tests/unit/gapic/compute_v1/test_license_codes.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -730,7 +731,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.LicenseCode + post.return_value = compute.LicenseCode() client.get( request, @@ -1017,7 +1018,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_licenses.py b/tests/unit/gapic/compute_v1/test_licenses.py index 78e8d80fa..e293f6b62 100644 --- a/tests/unit/gapic/compute_v1/test_licenses.py +++ b/tests/unit/gapic/compute_v1/test_licenses.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -775,7 +776,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1089,7 +1090,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1389,7 +1390,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.License + post.return_value = compute.License() client.get( request, @@ -1673,7 +1674,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -2000,7 +2001,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2316,7 +2317,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2616,7 +2617,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.LicensesListResponse + post.return_value = compute.LicensesListResponse() client.list( request, @@ -3029,7 +3030,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -3397,7 +3398,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_machine_images.py b/tests/unit/gapic/compute_v1/test_machine_images.py index 18ebf2c2e..ef1e8f102 100644 --- a/tests/unit/gapic/compute_v1/test_machine_images.py +++ b/tests/unit/gapic/compute_v1/test_machine_images.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -774,7 +775,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1076,7 +1077,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1374,7 +1375,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.MachineImage + post.return_value = compute.MachineImage() client.get( request, @@ -1660,7 +1661,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -1787,6 +1788,7 @@ def test_insert_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -1805,6 +1807,7 @@ def test_insert_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -1817,6 +1820,7 @@ def test_insert_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -2205,7 +2209,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2239,6 +2243,7 @@ def test_insert_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -2257,6 +2262,7 @@ def test_insert_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -2269,6 +2275,7 @@ def test_insert_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -2552,6 +2559,7 @@ def test_insert_unary_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -2570,6 +2578,7 @@ def test_insert_unary_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -2582,6 +2591,7 @@ def test_insert_unary_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -2950,7 +2960,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2984,6 +2994,7 @@ def test_insert_unary_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -3002,6 +3013,7 @@ def test_insert_unary_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -3014,6 +3026,7 @@ def test_insert_unary_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -3465,7 +3478,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.MachineImageList + post.return_value = compute.MachineImageList() client.list( request, @@ -3881,7 +3894,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -4251,7 +4264,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_machine_types.py b/tests/unit/gapic/compute_v1/test_machine_types.py index ebb36adda..fef19054d 100644 --- a/tests/unit/gapic/compute_v1/test_machine_types.py +++ b/tests/unit/gapic/compute_v1/test_machine_types.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -742,7 +743,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.MachineTypeAggregatedList + post.return_value = compute.MachineTypeAggregatedList() client.aggregated_list( request, @@ -1112,7 +1113,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.MachineType + post.return_value = compute.MachineType() client.get( request, @@ -1422,7 +1423,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.MachineTypeList + post.return_value = compute.MachineTypeList() client.list( request, 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 2289022f9..8a7b5cdcf 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -799,7 +800,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEdgeSecurityServiceAggregatedList + post.return_value = compute.NetworkEdgeSecurityServiceAggregatedList() client.aggregated_list( request, @@ -1208,7 +1209,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1535,7 +1536,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1860,7 +1861,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEdgeSecurityService + post.return_value = compute.NetworkEdgeSecurityService() client.get( request, @@ -2218,7 +2219,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2563,7 +2564,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2946,7 +2947,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3316,7 +3317,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, 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 a29772180..69466ad3b 100644 --- a/tests/unit/gapic/compute_v1/test_network_endpoint_groups.py +++ b/tests/unit/gapic/compute_v1/test_network_endpoint_groups.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -785,7 +786,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroupAggregatedList + post.return_value = compute.NetworkEndpointGroupAggregatedList() client.aggregated_list( request, @@ -1199,7 +1200,7 @@ def test_attach_network_endpoints_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.attach_network_endpoints( request, @@ -1555,7 +1556,7 @@ def test_attach_network_endpoints_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.attach_network_endpoints_unary( request, @@ -1920,7 +1921,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -2241,7 +2242,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2597,7 +2598,7 @@ def test_detach_network_endpoints_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.detach_network_endpoints( request, @@ -2953,7 +2954,7 @@ def test_detach_network_endpoints_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.detach_network_endpoints_unary( request, @@ -3300,7 +3301,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroup + post.return_value = compute.NetworkEndpointGroup() client.get( request, @@ -3664,7 +3665,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -4030,7 +4031,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -4370,7 +4371,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroupList + post.return_value = compute.NetworkEndpointGroupList() client.list( request, @@ -4749,7 +4750,7 @@ def test_list_network_endpoints_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroupsListNetworkEndpoints + post.return_value = compute.NetworkEndpointGroupsListNetworkEndpoints() client.list_network_endpoints( request, @@ -5132,7 +5133,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, 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 87933ec25..cb2532bec 100644 --- a/tests/unit/gapic/compute_v1/test_network_firewall_policies.py +++ b/tests/unit/gapic/compute_v1/test_network_firewall_policies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -827,7 +828,7 @@ def test_add_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_association( request, @@ -1162,7 +1163,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_association_unary( request, @@ -1542,7 +1543,7 @@ def test_add_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_rule( request, @@ -1920,7 +1921,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_rule_unary( request, @@ -2288,7 +2289,7 @@ def test_clone_rules_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.clone_rules( request, @@ -2600,7 +2601,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.clone_rules_unary( request, @@ -2924,7 +2925,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -3226,7 +3227,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -3530,7 +3531,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicy + post.return_value = compute.FirewallPolicy() client.get( request, @@ -3822,7 +3823,7 @@ def test_get_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyAssociation + post.return_value = compute.FirewallPolicyAssociation() client.get_association( request, @@ -4109,7 +4110,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -4414,7 +4415,7 @@ def test_get_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyRule + post.return_value = compute.FirewallPolicyRule() client.get_rule( request, @@ -4795,7 +4796,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -5226,7 +5227,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -5593,7 +5594,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyList + post.return_value = compute.FirewallPolicyList() client.list( request, @@ -6032,7 +6033,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -6470,7 +6471,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -6908,7 +6909,7 @@ def test_patch_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_rule( request, @@ -7284,7 +7285,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_rule_unary( request, @@ -7652,7 +7653,7 @@ def test_remove_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_association( request, @@ -7965,7 +7966,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_association_unary( request, @@ -8300,7 +8301,7 @@ def test_remove_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_rule( request, @@ -8612,7 +8613,7 @@ def test_remove_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_rule_unary( request, @@ -8975,7 +8976,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -9346,7 +9347,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_networks.py b/tests/unit/gapic/compute_v1/test_networks.py index 074882917..838e3c25e 100644 --- a/tests/unit/gapic/compute_v1/test_networks.py +++ b/tests/unit/gapic/compute_v1/test_networks.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -782,7 +783,7 @@ def test_add_peering_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_peering( request, @@ -1128,7 +1129,7 @@ def test_add_peering_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_peering_unary( request, @@ -1471,7 +1472,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1767,7 +1768,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2074,7 +2075,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Network + post.return_value = compute.Network() client.get( request, @@ -2355,7 +2356,7 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworksGetEffectiveFirewallsResponse + post.return_value = compute.NetworksGetEffectiveFirewallsResponse() client.get_effective_firewalls( request, @@ -2705,7 +2706,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3067,7 +3068,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3390,7 +3391,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkList + post.return_value = compute.NetworkList() client.list( request, @@ -3752,7 +3753,7 @@ def test_list_peering_routes_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ExchangedPeeringRoutesList + post.return_value = compute.ExchangedPeeringRoutesList() client.list_peering_routes( request, @@ -4164,7 +4165,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -4534,7 +4535,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4896,7 +4897,7 @@ def test_remove_peering_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_peering( request, @@ -5206,7 +5207,7 @@ def test_remove_peering_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_peering_unary( request, @@ -5535,7 +5536,7 @@ def test_switch_to_custom_mode_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.switch_to_custom_mode( request, @@ -5835,7 +5836,7 @@ def test_switch_to_custom_mode_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.switch_to_custom_mode_unary( request, @@ -6175,7 +6176,7 @@ def test_update_peering_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_peering( request, @@ -6515,7 +6516,7 @@ def test_update_peering_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_peering_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_node_groups.py b/tests/unit/gapic/compute_v1/test_node_groups.py index 58972c2f4..ce0507fc9 100644 --- a/tests/unit/gapic/compute_v1/test_node_groups.py +++ b/tests/unit/gapic/compute_v1/test_node_groups.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -775,7 +776,7 @@ def test_add_nodes_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_nodes( request, @@ -1102,7 +1103,7 @@ def test_add_nodes_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_nodes_unary( request, @@ -1418,7 +1419,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeGroupAggregatedList + post.return_value = compute.NodeGroupAggregatedList() client.aggregated_list( request, @@ -1805,7 +1806,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -2114,7 +2115,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2454,7 +2455,7 @@ def test_delete_nodes_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_nodes( request, @@ -2781,7 +2782,7 @@ def test_delete_nodes_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_nodes_unary( request, @@ -3101,7 +3102,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeGroup + post.return_value = compute.NodeGroup() client.get( request, @@ -3398,7 +3399,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -3541,6 +3542,7 @@ def test_insert_rest(request_type): "name": "name_value", "node_template": "node_template_value", "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, "size": 443, "status": "status_value", "zone": "zone_value", @@ -3703,7 +3705,7 @@ def test_insert_rest_required_fields(request_type=compute.InsertNodeGroupRequest expected_params = [ ( "initialNodeCount", - 0, + str(0), ), ] actual_params = req.call_args.kwargs["params"] @@ -3773,7 +3775,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3817,6 +3819,7 @@ def test_insert_rest_bad_request( "name": "name_value", "node_template": "node_template_value", "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, "size": 443, "status": "status_value", "zone": "zone_value", @@ -3942,6 +3945,7 @@ def test_insert_unary_rest(request_type): "name": "name_value", "node_template": "node_template_value", "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, "size": 443, "status": "status_value", "zone": "zone_value", @@ -4082,7 +4086,7 @@ def test_insert_unary_rest_required_fields(request_type=compute.InsertNodeGroupR expected_params = [ ( "initialNodeCount", - 0, + str(0), ), ] actual_params = req.call_args.kwargs["params"] @@ -4152,7 +4156,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -4196,6 +4200,7 @@ def test_insert_unary_rest_bad_request( "name": "name_value", "node_template": "node_template_value", "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, "size": 443, "status": "status_value", "zone": "zone_value", @@ -4486,7 +4491,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeGroupList + post.return_value = compute.NodeGroupList() client.list( request, @@ -4852,7 +4857,7 @@ def test_list_nodes_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeGroupsListNodes + post.return_value = compute.NodeGroupsListNodes() client.list_nodes( request, @@ -5054,6 +5059,7 @@ def test_patch_rest(request_type): "name": "name_value", "node_template": "node_template_value", "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, "size": 443, "status": "status_value", "zone": "zone_value", @@ -5268,7 +5274,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -5312,6 +5318,7 @@ def test_patch_rest_bad_request( "name": "name_value", "node_template": "node_template_value", "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, "size": 443, "status": "status_value", "zone": "zone_value", @@ -5441,6 +5448,7 @@ def test_patch_unary_rest(request_type): "name": "name_value", "node_template": "node_template_value", "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, "size": 443, "status": "status_value", "zone": "zone_value", @@ -5633,7 +5641,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -5677,6 +5685,7 @@ def test_patch_unary_rest_bad_request( "name": "name_value", "node_template": "node_template_value", "self_link": "self_link_value", + "share_settings": {"project_map": {}, "share_type": "share_type_value"}, "size": 443, "status": "status_value", "zone": "zone_value", @@ -6037,7 +6046,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -6460,7 +6469,7 @@ def test_set_node_template_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_node_template( request, @@ -6787,7 +6796,7 @@ def test_set_node_template_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_node_template_unary( request, @@ -7094,7 +7103,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_node_templates.py b/tests/unit/gapic/compute_v1/test_node_templates.py index fe37a8101..2f76efb6e 100644 --- a/tests/unit/gapic/compute_v1/test_node_templates.py +++ b/tests/unit/gapic/compute_v1/test_node_templates.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -753,7 +754,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeTemplateAggregatedList + post.return_value = compute.NodeTemplateAggregatedList() client.aggregated_list( request, @@ -1151,7 +1152,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1472,7 +1473,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1787,7 +1788,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeTemplate + post.return_value = compute.NodeTemplate() client.get( request, @@ -2088,7 +2089,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -2444,7 +2445,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2806,7 +2807,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3142,7 +3143,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeTemplateList + post.return_value = compute.NodeTemplateList() client.list( request, @@ -3565,7 +3566,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -3946,7 +3947,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_node_types.py b/tests/unit/gapic/compute_v1/test_node_types.py index fc34e9105..a3912b293 100644 --- a/tests/unit/gapic/compute_v1/test_node_types.py +++ b/tests/unit/gapic/compute_v1/test_node_types.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -738,7 +739,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeTypeAggregatedList + post.return_value = compute.NodeTypeAggregatedList() client.aggregated_list( request, @@ -1099,7 +1100,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeType + post.return_value = compute.NodeType() client.get( request, @@ -1403,7 +1404,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NodeTypeList + post.return_value = compute.NodeTypeList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_packet_mirrorings.py b/tests/unit/gapic/compute_v1/test_packet_mirrorings.py index e012c60ee..76e211e88 100644 --- a/tests/unit/gapic/compute_v1/test_packet_mirrorings.py +++ b/tests/unit/gapic/compute_v1/test_packet_mirrorings.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -773,7 +774,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PacketMirroringAggregatedList + post.return_value = compute.PacketMirroringAggregatedList() client.aggregated_list( request, @@ -1171,7 +1172,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1492,7 +1493,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1807,7 +1808,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PacketMirroring + post.return_value = compute.PacketMirroring() client.get( request, @@ -2166,7 +2167,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2530,7 +2531,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2869,7 +2870,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PacketMirroringList + post.return_value = compute.PacketMirroringList() client.list( request, @@ -3282,7 +3283,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3665,7 +3666,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4002,7 +4003,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_projects.py b/tests/unit/gapic/compute_v1/test_projects.py index c861effb4..70f17b72d 100644 --- a/tests/unit/gapic/compute_v1/test_projects.py +++ b/tests/unit/gapic/compute_v1/test_projects.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -749,7 +750,7 @@ def test_disable_xpn_host_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.disable_xpn_host( request, @@ -1034,7 +1035,7 @@ def test_disable_xpn_host_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.disable_xpn_host_unary( request, @@ -1353,7 +1354,7 @@ def test_disable_xpn_resource_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.disable_xpn_resource( request, @@ -1660,7 +1661,7 @@ def test_disable_xpn_resource_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.disable_xpn_resource_unary( request, @@ -1977,7 +1978,7 @@ def test_enable_xpn_host_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.enable_xpn_host( request, @@ -2262,7 +2263,7 @@ def test_enable_xpn_host_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.enable_xpn_host_unary( request, @@ -2581,7 +2582,7 @@ def test_enable_xpn_resource_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.enable_xpn_resource( request, @@ -2888,7 +2889,7 @@ def test_enable_xpn_resource_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.enable_xpn_resource_unary( request, @@ -3175,7 +3176,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Project + post.return_value = compute.Project() client.get( request, @@ -3455,7 +3456,7 @@ def test_get_xpn_host_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Project + post.return_value = compute.Project() client.get_xpn_host( request, @@ -3743,7 +3744,7 @@ def test_get_xpn_resources_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ProjectsGetXpnResources + post.return_value = compute.ProjectsGetXpnResources() client.get_xpn_resources( request, @@ -4097,7 +4098,7 @@ def test_list_xpn_hosts_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.XpnHostList + post.return_value = compute.XpnHostList() client.list_xpn_hosts( request, @@ -4480,7 +4481,7 @@ def test_move_disk_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.move_disk( request, @@ -4786,7 +4787,7 @@ def test_move_disk_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.move_disk_unary( request, @@ -5116,7 +5117,7 @@ def test_move_instance_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.move_instance( request, @@ -5424,7 +5425,7 @@ def test_move_instance_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.move_instance_unary( request, @@ -5755,7 +5756,7 @@ def test_set_common_instance_metadata_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_common_instance_metadata( request, @@ -6063,7 +6064,7 @@ def test_set_common_instance_metadata_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_common_instance_metadata_unary( request, @@ -6393,7 +6394,7 @@ def test_set_default_network_tier_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_default_network_tier( request, @@ -6700,7 +6701,7 @@ def test_set_default_network_tier_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_default_network_tier_unary( request, @@ -7030,7 +7031,7 @@ def test_set_usage_export_bucket_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_usage_export_bucket( request, @@ -7339,7 +7340,7 @@ def test_set_usage_export_bucket_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_usage_export_bucket_unary( request, 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 a87dc202e..0f39cc074 100644 --- a/tests/unit/gapic/compute_v1/test_public_advertised_prefixes.py +++ b/tests/unit/gapic/compute_v1/test_public_advertised_prefixes.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -814,7 +815,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1118,7 +1119,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1422,7 +1423,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicAdvertisedPrefix + post.return_value = compute.PublicAdvertisedPrefix() client.get( request, @@ -1765,7 +1766,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2112,7 +2113,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2435,7 +2436,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicAdvertisedPrefixList + post.return_value = compute.PublicAdvertisedPrefixList() client.list( request, @@ -2840,7 +2841,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3196,7 +3197,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, 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 ba26ba247..4542bf07d 100644 --- a/tests/unit/gapic/compute_v1/test_public_delegated_prefixes.py +++ b/tests/unit/gapic/compute_v1/test_public_delegated_prefixes.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -787,7 +788,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefixAggregatedList + post.return_value = compute.PublicDelegatedPrefixAggregatedList() client.aggregated_list( request, @@ -1188,7 +1189,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1509,7 +1510,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1832,7 +1833,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefix + post.return_value = compute.PublicDelegatedPrefix() client.get( request, @@ -2193,7 +2194,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2553,7 +2554,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2890,7 +2891,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.PublicDelegatedPrefixList + post.return_value = compute.PublicDelegatedPrefixList() client.list( request, @@ -3305,7 +3306,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3684,7 +3685,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_region_autoscalers.py b/tests/unit/gapic/compute_v1/test_region_autoscalers.py index 63a5b2b65..e452966dc 100644 --- a/tests/unit/gapic/compute_v1/test_region_autoscalers.py +++ b/tests/unit/gapic/compute_v1/test_region_autoscalers.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -801,7 +802,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1114,7 +1115,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1423,7 +1424,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Autoscaler + post.return_value = compute.Autoscaler() client.get( request, @@ -1799,7 +1800,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2197,7 +2198,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2551,7 +2552,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionAutoscalerList + post.return_value = compute.RegionAutoscalerList() client.list( request, @@ -2984,7 +2985,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3392,7 +3393,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3822,7 +3823,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -4230,7 +4231,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, 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 0d7ee320b..477234755 100644 --- a/tests/unit/gapic/compute_v1/test_region_backend_services.py +++ b/tests/unit/gapic/compute_v1/test_region_backend_services.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -815,7 +816,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1136,7 +1137,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1274,6 +1275,7 @@ def test_get_rest(request_type): # Designate an appropriate value for the returned response. return_value = compute.BackendService( affinity_cookie_ttl_sec=2432, + compression_mode="compression_mode_value", creation_timestamp="creation_timestamp_value", custom_request_headers=["custom_request_headers_value"], custom_response_headers=["custom_response_headers_value"], @@ -1312,6 +1314,7 @@ def test_get_rest(request_type): # Establish that the response is the type that we expect. assert isinstance(response, compute.BackendService) assert response.affinity_cookie_ttl_sec == 2432 + assert response.compression_mode == "compression_mode_value" 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"] @@ -1481,7 +1484,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendService + post.return_value = compute.BackendService() client.get( request, @@ -1785,7 +1788,7 @@ def test_get_health_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceGroupHealth + post.return_value = compute.BackendServiceGroupHealth() client.get_health( request, @@ -1904,6 +1907,304 @@ def test_get_health_rest_error(): ) +@pytest.mark.parametrize( + "request_type", + [ + compute.GetIamPolicyRegionBackendServiceRequest, + dict, + ], +) +def test_get_iam_policy_rest(request_type): + client = RegionBackendServicesClient( + 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 + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.GetIamPolicyRegionBackendServiceRequest, +): + transport_class = transports.RegionBackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = RegionBackendServicesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionBackendServicesRestTransport( + 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.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_get_iam_policy" + ) as post, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "pre_get_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.GetIamPolicyRegionBackendServiceRequest.pb( + compute.GetIamPolicyRegionBackendServiceRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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.GetIamPolicyRegionBackendServiceRequest() + 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.GetIamPolicyRegionBackendServiceRequest, +): + client = RegionBackendServicesClient( + 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 = 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.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 + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/backendServices/{resource}/getIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_get_iam_policy_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_iam_policy( + compute.GetIamPolicyRegionBackendServiceRequest(), + project="project_value", + region="region_value", + resource="resource_value", + ) + + +def test_get_iam_policy_rest_error(): + client = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + @pytest.mark.parametrize( "request_type", [ @@ -1981,6 +2282,7 @@ def test_insert_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -2276,7 +2578,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2362,6 +2664,7 @@ def test_insert_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -2609,6 +2912,7 @@ def test_insert_unary_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -2882,7 +3186,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2968,6 +3272,7 @@ def test_insert_unary_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -3342,7 +3647,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.BackendServiceList + post.return_value = compute.BackendServiceList() client.list( request, @@ -3580,6 +3885,7 @@ def test_patch_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -3880,7 +4186,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3970,6 +4276,7 @@ def test_patch_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -4227,6 +4534,7 @@ def test_patch_unary_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -4505,7 +4813,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4595,6 +4903,7 @@ def test_patch_unary_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -4771,6 +5080,464 @@ def test_patch_unary_rest_error(): ) +@pytest.mark.parametrize( + "request_type", + [ + compute.SetIamPolicyRegionBackendServiceRequest, + dict, + ], +) +def test_set_iam_policy_rest(request_type): + client = RegionBackendServicesClient( + 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_value1", "members_value2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value1", + "exempted_members_value2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value1", + "exempted_members_value2", + ], + "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_value1", "values_value2"], + } + ], + "description": "description_value", + "ins": ["ins_value1", "ins_value2"], + "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_value1", "not_ins_value2"], + "permissions": ["permissions_value1", "permissions_value2"], + } + ], + "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 + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetIamPolicyRegionBackendServiceRequest, +): + transport_class = transports.RegionBackendServicesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = RegionBackendServicesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionBackendServicesRestTransport( + 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.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_set_iam_policy" + ) as post, mock.patch.object( + transports.RegionBackendServicesRestInterceptor, "pre_set_iam_policy" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetIamPolicyRegionBackendServiceRequest.pb( + compute.SetIamPolicyRegionBackendServiceRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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.SetIamPolicyRegionBackendServiceRequest() + 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.SetIamPolicyRegionBackendServiceRequest, +): + client = RegionBackendServicesClient( + 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_value1", "members_value2"], + "role": "role_value", + } + ], + "etag": "etag_value", + "policy": { + "audit_configs": [ + { + "audit_log_configs": [ + { + "exempted_members": [ + "exempted_members_value1", + "exempted_members_value2", + ], + "ignore_child_exemptions": True, + "log_type": "log_type_value", + } + ], + "exempted_members": [ + "exempted_members_value1", + "exempted_members_value2", + ], + "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_value1", "values_value2"], + } + ], + "description": "description_value", + "ins": ["ins_value1", "ins_value2"], + "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_value1", "not_ins_value2"], + "permissions": ["permissions_value1", "permissions_value2"], + } + ], + "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 = 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.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 + pb_return_value = compute.Policy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/backendServices/{resource}/setIamPolicy" + % client.transport._host, + args[1], + ) + + +def test_set_iam_policy_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.set_iam_policy( + compute.SetIamPolicyRegionBackendServiceRequest(), + 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 = RegionBackendServicesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + @pytest.mark.parametrize( "request_type", [ @@ -4852,6 +5619,7 @@ def test_update_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -5152,7 +5920,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -5242,6 +6010,7 @@ def test_update_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -5499,6 +6268,7 @@ def test_update_unary_rest(request_type): "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -5777,7 +6547,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, @@ -5867,6 +6637,7 @@ def test_update_unary_rest_bad_request( "max_requests_per_connection": 2902, "max_retries": 1187, }, + "compression_mode": "compression_mode_value", "connection_draining": {"draining_timeout_sec": 2124}, "connection_tracking_policy": { "connection_persistence_on_unhealthy_backends": "connection_persistence_on_unhealthy_backends_value", @@ -6156,9 +6927,11 @@ def test_region_backend_services_base_transport(): "delete", "get", "get_health", + "get_iam_policy", "insert", "list", "patch", + "set_iam_policy", "update", ) for method in methods: @@ -6306,6 +7079,9 @@ def test_region_backend_services_client_transport_session_collision(transport_na session1 = client1.transport.get_health._session session2 = client2.transport.get_health._session assert session1 != session2 + session1 = client1.transport.get_iam_policy._session + session2 = client2.transport.get_iam_policy._session + assert session1 != session2 session1 = client1.transport.insert._session session2 = client2.transport.insert._session assert session1 != session2 @@ -6315,6 +7091,9 @@ def test_region_backend_services_client_transport_session_collision(transport_na session1 = client1.transport.patch._session session2 = client2.transport.patch._session assert session1 != session2 + session1 = client1.transport.set_iam_policy._session + session2 = client2.transport.set_iam_policy._session + assert session1 != session2 session1 = client1.transport.update._session session2 = client2.transport.update._session assert session1 != session2 diff --git a/tests/unit/gapic/compute_v1/test_region_commitments.py b/tests/unit/gapic/compute_v1/test_region_commitments.py index ebba39e81..92a4e0a61 100644 --- a/tests/unit/gapic/compute_v1/test_region_commitments.py +++ b/tests/unit/gapic/compute_v1/test_region_commitments.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -773,7 +774,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.CommitmentAggregatedList + post.return_value = compute.CommitmentAggregatedList() client.aggregated_list( request, @@ -968,10 +969,12 @@ def test_get_rest(request_type): end_timestamp="end_timestamp_value", id=205, kind="kind_value", + merge_source_commitments=["merge_source_commitments_value"], name="name_value", plan="plan_value", region="region_value", self_link="self_link_value", + split_source_commitment="split_source_commitment_value", start_timestamp="start_timestamp_value", status="status_value", status_message="status_message_value", @@ -997,10 +1000,12 @@ def test_get_rest(request_type): assert response.end_timestamp == "end_timestamp_value" assert response.id == 205 assert response.kind == "kind_value" + assert response.merge_source_commitments == ["merge_source_commitments_value"] assert response.name == "name_value" assert response.plan == "plan_value" assert response.region == "region_value" assert response.self_link == "self_link_value" + assert response.split_source_commitment == "split_source_commitment_value" assert response.start_timestamp == "start_timestamp_value" assert response.status == "status_value" assert response.status_message == "status_message_value" @@ -1149,7 +1154,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Commitment + post.return_value = compute.Commitment() client.get( request, @@ -1285,6 +1290,10 @@ def test_insert_rest(request_type): "cores_per_license": "cores_per_license_value", "license_": "license__value", }, + "merge_source_commitments": [ + "merge_source_commitments_value1", + "merge_source_commitments_value2", + ], "name": "name_value", "plan": "plan_value", "region": "region_value", @@ -1331,6 +1340,7 @@ def test_insert_rest(request_type): } ], "self_link": "self_link_value", + "split_source_commitment": "split_source_commitment_value", "start_timestamp": "start_timestamp_value", "status": "status_value", "status_message": "status_message_value", @@ -1545,7 +1555,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -1582,6 +1592,10 @@ def test_insert_rest_bad_request( "cores_per_license": "cores_per_license_value", "license_": "license__value", }, + "merge_source_commitments": [ + "merge_source_commitments_value1", + "merge_source_commitments_value2", + ], "name": "name_value", "plan": "plan_value", "region": "region_value", @@ -1628,6 +1642,7 @@ def test_insert_rest_bad_request( } ], "self_link": "self_link_value", + "split_source_commitment": "split_source_commitment_value", "start_timestamp": "start_timestamp_value", "status": "status_value", "status_message": "status_message_value", @@ -1741,6 +1756,10 @@ def test_insert_unary_rest(request_type): "cores_per_license": "cores_per_license_value", "license_": "license__value", }, + "merge_source_commitments": [ + "merge_source_commitments_value1", + "merge_source_commitments_value2", + ], "name": "name_value", "plan": "plan_value", "region": "region_value", @@ -1787,6 +1806,7 @@ def test_insert_unary_rest(request_type): } ], "self_link": "self_link_value", + "split_source_commitment": "split_source_commitment_value", "start_timestamp": "start_timestamp_value", "status": "status_value", "status_message": "status_message_value", @@ -1979,7 +1999,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2016,6 +2036,10 @@ def test_insert_unary_rest_bad_request( "cores_per_license": "cores_per_license_value", "license_": "license__value", }, + "merge_source_commitments": [ + "merge_source_commitments_value1", + "merge_source_commitments_value2", + ], "name": "name_value", "plan": "plan_value", "region": "region_value", @@ -2062,6 +2086,7 @@ def test_insert_unary_rest_bad_request( } ], "self_link": "self_link_value", + "split_source_commitment": "split_source_commitment_value", "start_timestamp": "start_timestamp_value", "status": "status_value", "status_message": "status_message_value", @@ -2349,7 +2374,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.CommitmentList + post.return_value = compute.CommitmentList() client.list( request, @@ -2534,6 +2559,10 @@ def test_update_rest(request_type): "cores_per_license": "cores_per_license_value", "license_": "license__value", }, + "merge_source_commitments": [ + "merge_source_commitments_value1", + "merge_source_commitments_value2", + ], "name": "name_value", "plan": "plan_value", "region": "region_value", @@ -2580,6 +2609,7 @@ def test_update_rest(request_type): } ], "self_link": "self_link_value", + "split_source_commitment": "split_source_commitment_value", "start_timestamp": "start_timestamp_value", "status": "status_value", "status_message": "status_message_value", @@ -2811,7 +2841,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -2848,6 +2878,10 @@ def test_update_rest_bad_request( "cores_per_license": "cores_per_license_value", "license_": "license__value", }, + "merge_source_commitments": [ + "merge_source_commitments_value1", + "merge_source_commitments_value2", + ], "name": "name_value", "plan": "plan_value", "region": "region_value", @@ -2894,6 +2928,7 @@ def test_update_rest_bad_request( } ], "self_link": "self_link_value", + "split_source_commitment": "split_source_commitment_value", "start_timestamp": "start_timestamp_value", "status": "status_value", "status_message": "status_message_value", @@ -3013,6 +3048,10 @@ def test_update_unary_rest(request_type): "cores_per_license": "cores_per_license_value", "license_": "license__value", }, + "merge_source_commitments": [ + "merge_source_commitments_value1", + "merge_source_commitments_value2", + ], "name": "name_value", "plan": "plan_value", "region": "region_value", @@ -3059,6 +3098,7 @@ def test_update_unary_rest(request_type): } ], "self_link": "self_link_value", + "split_source_commitment": "split_source_commitment_value", "start_timestamp": "start_timestamp_value", "status": "status_value", "status_message": "status_message_value", @@ -3268,7 +3308,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, @@ -3305,6 +3345,10 @@ def test_update_unary_rest_bad_request( "cores_per_license": "cores_per_license_value", "license_": "license__value", }, + "merge_source_commitments": [ + "merge_source_commitments_value1", + "merge_source_commitments_value2", + ], "name": "name_value", "plan": "plan_value", "region": "region_value", @@ -3351,6 +3395,7 @@ def test_update_unary_rest_bad_request( } ], "self_link": "self_link_value", + "split_source_commitment": "split_source_commitment_value", "start_timestamp": "start_timestamp_value", "status": "status_value", "status_message": "status_message_value", 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 29adfdd42..32dde5797 100644 --- a/tests/unit/gapic/compute_v1/test_region_disk_types.py +++ b/tests/unit/gapic/compute_v1/test_region_disk_types.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -765,7 +766,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskType + post.return_value = compute.DiskType() client.get( request, @@ -1075,7 +1076,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionDiskTypeList + post.return_value = compute.RegionDiskTypeList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_region_disks.py b/tests/unit/gapic/compute_v1/test_region_disks.py index 5c5426758..7d87c60d8 100644 --- a/tests/unit/gapic/compute_v1/test_region_disks.py +++ b/tests/unit/gapic/compute_v1/test_region_disks.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -777,7 +778,7 @@ def test_add_resource_policies_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_resource_policies( request, @@ -1100,7 +1101,7 @@ def test_add_resource_policies_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_resource_policies_unary( request, @@ -1479,7 +1480,7 @@ def test_create_snapshot_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.create_snapshot( request, @@ -1866,7 +1867,7 @@ def test_create_snapshot_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.create_snapshot_unary( request, @@ -2234,7 +2235,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -2543,7 +2544,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2888,7 +2889,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Disk + post.return_value = compute.Disk() client.get( request, @@ -3181,7 +3182,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -3327,6 +3328,7 @@ def test_insert_rest(request_type): "location_hint": "location_hint_value", "name": "name_value", "options": "options_value", + "params": {"resource_manager_tags": {}}, "physical_block_size_bytes": 2663, "provisioned_iops": 1740, "region": "region_value", @@ -3566,7 +3568,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3613,6 +3615,7 @@ def test_insert_rest_bad_request( "location_hint": "location_hint_value", "name": "name_value", "options": "options_value", + "params": {"resource_manager_tags": {}}, "physical_block_size_bytes": 2663, "provisioned_iops": 1740, "region": "region_value", @@ -3753,6 +3756,7 @@ def test_insert_unary_rest(request_type): "location_hint": "location_hint_value", "name": "name_value", "options": "options_value", + "params": {"resource_manager_tags": {}}, "physical_block_size_bytes": 2663, "provisioned_iops": 1740, "region": "region_value", @@ -3972,7 +3976,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -4019,6 +4023,7 @@ def test_insert_unary_rest_bad_request( "location_hint": "location_hint_value", "name": "name_value", "options": "options_value", + "params": {"resource_manager_tags": {}}, "physical_block_size_bytes": 2663, "provisioned_iops": 1740, "region": "region_value", @@ -4319,7 +4324,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DiskList + post.return_value = compute.DiskList() client.list( request, @@ -4708,7 +4713,7 @@ def test_remove_resource_policies_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_resource_policies( request, @@ -5032,7 +5037,7 @@ def test_remove_resource_policies_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_resource_policies_unary( request, @@ -5374,7 +5379,7 @@ def test_resize_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize( request, @@ -5693,7 +5698,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize_unary( request, @@ -6070,7 +6075,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -6494,7 +6499,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -6823,7 +6828,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -7131,7 +7136,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, 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 ddb7a825f..fae25b09c 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -823,7 +824,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1144,7 +1145,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1470,7 +1471,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheckService + post.return_value = compute.HealthCheckService() client.get( request, @@ -1826,7 +1827,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2176,7 +2177,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2508,7 +2509,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheckServicesList + post.return_value = compute.HealthCheckServicesList() client.list( request, @@ -2918,7 +2919,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3287,7 +3288,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, 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 63157b9cc..3ac5d25dc 100644 --- a/tests/unit/gapic/compute_v1/test_region_health_checks.py +++ b/tests/unit/gapic/compute_v1/test_region_health_checks.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -807,7 +808,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1128,7 +1129,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1447,7 +1448,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheck + post.return_value = compute.HealthCheck() client.get( request, @@ -1847,7 +1848,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2281,7 +2282,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2651,7 +2652,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.HealthCheckList + post.return_value = compute.HealthCheckList() client.list( request, @@ -3103,7 +3104,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3556,7 +3557,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4031,7 +4032,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -4484,7 +4485,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, 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 f8fc5f1cc..abe1c1f20 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -828,7 +829,7 @@ def test_abandon_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.abandon_instances( request, @@ -1164,7 +1165,7 @@ def test_abandon_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.abandon_instances_unary( request, @@ -1527,7 +1528,7 @@ def test_apply_updates_to_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.apply_updates_to_instances( request, @@ -1871,7 +1872,7 @@ def test_apply_updates_to_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.apply_updates_to_instances_unary( request, @@ -2239,7 +2240,7 @@ def test_create_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.create_instances( request, @@ -2589,7 +2590,7 @@ def test_create_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.create_instances_unary( request, @@ -2949,7 +2950,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -3271,7 +3272,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -3621,7 +3622,7 @@ def test_delete_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_instances( request, @@ -3959,7 +3960,7 @@ def test_delete_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_instances_unary( request, @@ -4320,7 +4321,7 @@ def test_delete_per_instance_configs_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_per_instance_configs( request, @@ -4658,7 +4659,7 @@ def test_delete_per_instance_configs_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_per_instance_configs_unary( request, @@ -4997,7 +4998,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroupManager + post.return_value = compute.InstanceGroupManager() client.get( request, @@ -5398,7 +5399,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -5847,7 +5848,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -6233,7 +6234,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupManagerList + post.return_value = compute.RegionInstanceGroupManagerList() client.list( request, @@ -6605,7 +6606,7 @@ def test_list_errors_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupManagersListErrorsResponse + post.return_value = compute.RegionInstanceGroupManagersListErrorsResponse() client.list_errors( request, @@ -6999,7 +7000,7 @@ def test_list_managed_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupManagersListInstancesResponse + post.return_value = compute.RegionInstanceGroupManagersListInstancesResponse() client.list_managed_instances( request, @@ -7395,7 +7396,7 @@ def test_list_per_instance_configs_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp + post.return_value = compute.RegionInstanceGroupManagersListInstanceConfigsResp() client.list_per_instance_configs( request, @@ -7870,7 +7871,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -8337,7 +8338,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -8775,7 +8776,7 @@ def test_patch_per_instance_configs_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_per_instance_configs( request, @@ -9133,7 +9134,7 @@ def test_patch_per_instance_configs_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_per_instance_configs_unary( request, @@ -9502,7 +9503,7 @@ def test_recreate_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.recreate_instances( request, @@ -9838,7 +9839,7 @@ def test_recreate_instances_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.recreate_instances_unary( request, @@ -10142,7 +10143,7 @@ def test_resize_rest_required_fields( expected_params = [ ( "size", - 0, + str(0), ), ] actual_params = req.call_args.kwargs["params"] @@ -10214,7 +10215,7 @@ def test_resize_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize( request, @@ -10489,7 +10490,7 @@ def test_resize_unary_rest_required_fields( expected_params = [ ( "size", - 0, + str(0), ), ] actual_params = req.call_args.kwargs["params"] @@ -10561,7 +10562,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize_unary( request, @@ -10914,7 +10915,7 @@ def test_set_instance_template_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_instance_template( request, @@ -11252,7 +11253,7 @@ def test_set_instance_template_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_instance_template_unary( request, @@ -11611,7 +11612,7 @@ def test_set_target_pools_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_target_pools( request, @@ -11949,7 +11950,7 @@ def test_set_target_pools_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_target_pools_unary( request, @@ -12321,7 +12322,7 @@ def test_update_per_instance_configs_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_per_instance_configs( request, @@ -12683,7 +12684,7 @@ def test_update_per_instance_configs_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_per_instance_configs_unary( request, 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 1f47863aa..178198d83 100644 --- a/tests/unit/gapic/compute_v1/test_region_instance_groups.py +++ b/tests/unit/gapic/compute_v1/test_region_instance_groups.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -793,7 +794,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.InstanceGroup + post.return_value = compute.InstanceGroup() client.get( request, @@ -1109,7 +1110,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupList + post.return_value = compute.RegionInstanceGroupList() client.list( request, @@ -1485,7 +1486,7 @@ def test_list_instances_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionInstanceGroupsListInstances + post.return_value = compute.RegionInstanceGroupsListInstances() client.list_instances( request, @@ -1911,7 +1912,7 @@ def test_set_named_ports_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_named_ports( request, @@ -2249,7 +2250,7 @@ def test_set_named_ports_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_named_ports_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_region_instances.py b/tests/unit/gapic/compute_v1/test_region_instances.py index 8ae7c72d6..11420ce90 100644 --- a/tests/unit/gapic/compute_v1/test_region_instances.py +++ b/tests/unit/gapic/compute_v1/test_region_instances.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -589,6 +590,7 @@ def test_bulk_insert_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -607,6 +609,7 @@ def test_bulk_insert_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -619,6 +622,7 @@ def test_bulk_insert_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -953,7 +957,7 @@ def test_bulk_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.bulk_insert( request, @@ -984,6 +988,7 @@ def test_bulk_insert_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -1002,6 +1007,7 @@ def test_bulk_insert_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -1014,6 +1020,7 @@ def test_bulk_insert_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -1245,6 +1252,7 @@ def test_bulk_insert_unary_rest(request_type): "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -1263,6 +1271,7 @@ def test_bulk_insert_unary_rest(request_type): "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -1275,6 +1284,7 @@ def test_bulk_insert_unary_rest(request_type): "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", @@ -1587,7 +1597,7 @@ def test_bulk_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.bulk_insert_unary( request, @@ -1618,6 +1628,7 @@ def test_bulk_insert_unary_rest_bad_request( "enable_nested_virtualization": True, "enable_uefi_networking": True, "threads_per_core": 1689, + "visible_core_count": 1918, }, "can_ip_forward": True, "confidential_instance_config": {"enable_confidential_compute": True}, @@ -1636,6 +1647,7 @@ def test_bulk_insert_unary_rest_bad_request( "sha256": "sha256_value", }, "disk_size_gb": 1261, + "force_attach": True, "guest_os_features": [{"type_": "type__value"}], "index": 536, "initialize_params": { @@ -1648,6 +1660,7 @@ def test_bulk_insert_unary_rest_bad_request( "licenses": ["licenses_value1", "licenses_value2"], "on_update_action": "on_update_action_value", "provisioned_iops": 1740, + "resource_manager_tags": {}, "resource_policies": [ "resource_policies_value1", "resource_policies_value2", 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 68fa9c3f4..3e910d182 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -823,7 +824,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1145,7 +1146,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1473,7 +1474,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroup + post.return_value = compute.NetworkEndpointGroup() client.get( request, @@ -1837,7 +1838,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2204,7 +2205,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2545,7 +2546,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NetworkEndpointGroupList + post.return_value = compute.NetworkEndpointGroupList() client.list( request, 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 ec9bb3617..3e358273e 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -844,7 +845,7 @@ def test_add_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_association( request, @@ -1198,7 +1199,7 @@ def test_add_association_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_association_unary( request, @@ -1597,7 +1598,7 @@ def test_add_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_rule( request, @@ -1995,7 +1996,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_rule_unary( request, @@ -2383,7 +2384,7 @@ def test_clone_rules_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.clone_rules( request, @@ -2715,7 +2716,7 @@ def test_clone_rules_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.clone_rules_unary( request, @@ -3059,7 +3060,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -3381,7 +3382,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -3707,7 +3708,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicy + post.return_value = compute.FirewallPolicy() client.get( request, @@ -4018,7 +4019,7 @@ def test_get_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyAssociation + post.return_value = compute.FirewallPolicyAssociation() client.get_association( request, @@ -4340,7 +4341,7 @@ def test_get_effective_firewalls_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = ( - compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse + compute.RegionNetworkFirewallPoliciesGetEffectiveFirewallsResponse() ) client.get_effective_firewalls( @@ -4641,7 +4642,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -4961,7 +4962,7 @@ def test_get_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyRule + post.return_value = compute.FirewallPolicyRule() client.get_rule( request, @@ -5358,7 +5359,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -5797,7 +5798,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -6176,7 +6177,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.FirewallPolicyList + post.return_value = compute.FirewallPolicyList() client.list( request, @@ -6627,7 +6628,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -7085,7 +7086,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -7543,7 +7544,7 @@ def test_patch_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_rule( request, @@ -7939,7 +7940,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_rule_unary( request, @@ -8329,7 +8330,7 @@ def test_remove_association_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_association( request, @@ -8663,7 +8664,7 @@ def test_remove_association_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_association_unary( request, @@ -9017,7 +9018,7 @@ def test_remove_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_rule( request, @@ -9349,7 +9350,7 @@ def test_remove_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_rule_unary( request, @@ -9728,7 +9729,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -10112,7 +10113,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, 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 2594e4e3d..cfaa0c571 100644 --- a/tests/unit/gapic/compute_v1/test_region_notification_endpoints.py +++ b/tests/unit/gapic/compute_v1/test_region_notification_endpoints.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -823,7 +824,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1145,7 +1146,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1459,7 +1460,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NotificationEndpoint + post.return_value = compute.NotificationEndpoint() client.get( request, @@ -1811,7 +1812,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2154,7 +2155,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2483,7 +2484,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.NotificationEndpointList + post.return_value = compute.NotificationEndpointList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_region_operations.py b/tests/unit/gapic/compute_v1/test_region_operations.py index b41004a2b..1d677e41e 100644 --- a/tests/unit/gapic/compute_v1/test_region_operations.py +++ b/tests/unit/gapic/compute_v1/test_region_operations.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -752,7 +753,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DeleteRegionOperationResponse + post.return_value = compute.DeleteRegionOperationResponse() client.delete( request, @@ -1083,7 +1084,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.get( request, @@ -1393,7 +1394,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.OperationList + post.return_value = compute.OperationList() client.list( request, @@ -1773,7 +1774,7 @@ def test_wait_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.wait( request, 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 4a9f9b1fa..1eb59a5e8 100644 --- a/tests/unit/gapic/compute_v1/test_region_security_policies.py +++ b/tests/unit/gapic/compute_v1/test_region_security_policies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -817,7 +818,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1138,7 +1139,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1453,7 +1454,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicy + post.return_value = compute.SecurityPolicy() client.get( request, @@ -1588,6 +1589,9 @@ def test_insert_rest(request_type): } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -1868,7 +1872,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -1900,6 +1904,9 @@ def test_insert_rest_bad_request( } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -2076,6 +2083,9 @@ def test_insert_unary_rest(request_type): } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -2334,7 +2344,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2366,6 +2376,9 @@ def test_insert_unary_rest_bad_request( } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -2721,7 +2734,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicyList + post.return_value = compute.SecurityPolicyList() client.list( request, @@ -2905,6 +2918,9 @@ def test_patch_rest(request_type): } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -3180,7 +3196,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3216,6 +3232,9 @@ def test_patch_rest_bad_request( } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -3402,6 +3421,9 @@ def test_patch_unary_rest(request_type): } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -3655,7 +3677,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3691,6 +3713,9 @@ def test_patch_unary_rest_bad_request( } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, 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 c4f8d0731..d4f5e5314 100644 --- a/tests/unit/gapic/compute_v1/test_region_ssl_certificates.py +++ b/tests/unit/gapic/compute_v1/test_region_ssl_certificates.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -815,7 +816,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1136,7 +1137,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1457,7 +1458,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslCertificate + post.return_value = compute.SslCertificate() client.get( request, @@ -1819,7 +1820,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2181,7 +2182,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2519,7 +2520,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslCertificateList + post.return_value = compute.SslCertificateList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_region_ssl_policies.py b/tests/unit/gapic/compute_v1/test_region_ssl_policies.py new file mode 100644 index 000000000..329618e63 --- /dev/null +++ b/tests/unit/gapic/compute_v1/test_region_ssl_policies.py @@ -0,0 +1,4132 @@ +# -*- coding: utf-8 -*- +# 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 os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import grpc +from grpc.experimental import aio +from collections.abc import Iterable +from google.protobuf import json_format +import json +import math +import pytest +from proto.marshal.rules.dates import DurationRule, TimestampRule +from proto.marshal.rules import wrappers +from requests import Response +from requests import Request, PreparedRequest +from requests.sessions import Session +from google.protobuf import json_format + +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 +from google.api_core import path_template +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.compute_v1.services.region_ssl_policies import RegionSslPoliciesClient +from google.cloud.compute_v1.services.region_ssl_policies import pagers +from google.cloud.compute_v1.services.region_ssl_policies import transports +from google.cloud.compute_v1.types import compute +from google.oauth2 import service_account +import google.auth + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return ( + "foo.googleapis.com" + if ("localhost" in client.DEFAULT_ENDPOINT) + else client.DEFAULT_ENDPOINT + ) + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert RegionSslPoliciesClient._get_default_mtls_endpoint(None) is None + assert ( + RegionSslPoliciesClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + RegionSslPoliciesClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + RegionSslPoliciesClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + RegionSslPoliciesClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + RegionSslPoliciesClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (RegionSslPoliciesClient, "rest"), + ], +) +def test_region_ssl_policies_client_from_service_account_info( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_info" + ) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + "compute.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://compute.googleapis.com" + ) + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.RegionSslPoliciesRestTransport, "rest"), + ], +) +def test_region_ssl_policies_client_service_account_always_use_jwt( + transport_class, transport_name +): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (RegionSslPoliciesClient, "rest"), + ], +) +def test_region_ssl_policies_client_from_service_account_file( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_file" + ) as factory: + factory.return_value = creds + client = client_class.from_service_account_file( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + "compute.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://compute.googleapis.com" + ) + + +def test_region_ssl_policies_client_get_transport_class(): + transport = RegionSslPoliciesClient.get_transport_class() + available_transports = [ + transports.RegionSslPoliciesRestTransport, + ] + assert transport in available_transports + + transport = RegionSslPoliciesClient.get_transport_class("rest") + assert transport == transports.RegionSslPoliciesRestTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (RegionSslPoliciesClient, transports.RegionSslPoliciesRestTransport, "rest"), + ], +) +@mock.patch.object( + RegionSslPoliciesClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(RegionSslPoliciesClient), +) +def test_region_ssl_policies_client_client_options( + client_class, transport_class, transport_name +): + # Check that if channel is provided we won't create a new one. + with mock.patch.object(RegionSslPoliciesClient, "get_transport_class") as gtc: + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object(RegionSslPoliciesClient, "get_transport_class") as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + RegionSslPoliciesClient, + transports.RegionSslPoliciesRestTransport, + "rest", + "true", + ), + ( + RegionSslPoliciesClient, + transports.RegionSslPoliciesRestTransport, + "rest", + "false", + ), + ], +) +@mock.patch.object( + RegionSslPoliciesClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(RegionSslPoliciesClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_region_ssl_policies_client_mtls_env_auto( + client_class, transport_class, transport_name, use_client_cert_env +): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + options = client_options.ClientOptions( + client_cert_source=client_cert_source_callback + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + ): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize("client_class", [RegionSslPoliciesClient]) +@mock.patch.object( + RegionSslPoliciesClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(RegionSslPoliciesClient), +) +def test_region_ssl_policies_client_get_mtls_endpoint_and_cert_source(client_class): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + ): + ( + api_endpoint, + cert_source, + ) = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + (RegionSslPoliciesClient, transports.RegionSslPoliciesRestTransport, "rest"), + ], +) +def test_region_ssl_policies_client_client_options_scopes( + client_class, transport_class, transport_name +): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + RegionSslPoliciesClient, + transports.RegionSslPoliciesRestTransport, + "rest", + None, + ), + ], +) +def test_region_ssl_policies_client_client_options_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteRegionSslPolicyRequest, + dict, + ], +) +def test_delete_rest(request_type): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_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", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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, 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.DeleteRegionSslPolicyRequest): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["ssl_policy"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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["sslPolicy"] = "ssl_policy_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 "sslPolicy" in jsonified_request + assert jsonified_request["sslPolicy"] == "ssl_policy_value" + + client = RegionSslPoliciesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "sslPolicy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_rest_interceptors(null_interceptor): + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.DeleteRegionSslPolicyRequest.pb( + compute.DeleteRegionSslPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.DeleteRegionSslPolicyRequest() + 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.DeleteRegionSslPolicyRequest +): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_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.delete(request) + + +def test_delete_rest_flattened(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/sslPolicies/{ssl_policy}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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.DeleteRegionSslPolicyRequest(), + project="project_value", + region="region_value", + ssl_policy="ssl_policy_value", + ) + + +def test_delete_rest_error(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteRegionSslPolicyRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_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", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.DeleteRegionSslPolicyRequest, +): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["ssl_policy"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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["sslPolicy"] = "ssl_policy_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 "sslPolicy" in jsonified_request + assert jsonified_request["sslPolicy"] == "ssl_policy_value" + + client = RegionSslPoliciesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "sslPolicy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.DeleteRegionSslPolicyRequest.pb( + compute.DeleteRegionSslPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.DeleteRegionSslPolicyRequest() + 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.DeleteRegionSslPolicyRequest +): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_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.delete_unary(request) + + +def test_delete_unary_rest_flattened(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/sslPolicies/{ssl_policy}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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.DeleteRegionSslPolicyRequest(), + project="project_value", + region="region_value", + ssl_policy="ssl_policy_value", + ) + + +def test_delete_unary_rest_error(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRegionSslPolicyRequest, + dict, + ], +) +def test_get_rest(request_type): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_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.SslPolicy( + creation_timestamp="creation_timestamp_value", + custom_features=["custom_features_value"], + description="description_value", + enabled_features=["enabled_features_value"], + fingerprint="fingerprint_value", + id=205, + kind="kind_value", + min_tls_version="min_tls_version_value", + name="name_value", + profile="profile_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 + pb_return_value = compute.SslPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.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.region == "region_value" + assert response.self_link == "self_link_value" + + +def test_get_rest_required_fields(request_type=compute.GetRegionSslPolicyRequest): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["ssl_policy"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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["sslPolicy"] = "ssl_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 "sslPolicy" in jsonified_request + assert jsonified_request["sslPolicy"] == "ssl_policy_value" + + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + 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 + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.SslPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "sslPolicy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.GetRegionSslPolicyRequest.pb( + compute.GetRegionSslPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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()) + + request = compute.GetRegionSslPolicyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SslPolicy() + + 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.GetRegionSslPolicyRequest +): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_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 = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake 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() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "ssl_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_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 + pb_return_value = compute.SslPolicy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/sslPolicies/{ssl_policy}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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.GetRegionSslPolicyRequest(), + project="project_value", + region="region_value", + ssl_policy="ssl_policy_value", + ) + + +def test_get_rest_error(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionSslPolicyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value1", "custom_features_value2"], + "description": "description_value", + "enabled_features": ["enabled_features_value1", "enabled_features_value2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "region": "region_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.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.InsertRegionSslPolicyRequest): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = RegionSslPoliciesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "sslPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.InsertRegionSslPolicyRequest.pb( + compute.InsertRegionSslPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.InsertRegionSslPolicyRequest() + 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.InsertRegionSslPolicyRequest +): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value1", "custom_features_value2"], + "description": "description_value", + "enabled_features": ["enabled_features_value1", "enabled_features_value2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "region": "region_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(request) + + +def test_insert_rest_flattened(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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", + 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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/sslPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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.InsertRegionSslPolicyRequest(), + project="project_value", + region="region_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionSslPolicyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value1", "custom_features_value2"], + "description": "description_value", + "enabled_features": ["enabled_features_value1", "enabled_features_value2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "region": "region_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.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.InsertRegionSslPolicyRequest, +): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = RegionSslPoliciesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "sslPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.InsertRegionSslPolicyRequest.pb( + compute.InsertRegionSslPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.InsertRegionSslPolicyRequest() + 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.InsertRegionSslPolicyRequest +): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value1", "custom_features_value2"], + "description": "description_value", + "enabled_features": ["enabled_features_value1", "enabled_features_value2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "region": "region_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 = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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", + 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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/sslPolicies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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.InsertRegionSslPolicyRequest(), + project="project_value", + region="region_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionSslPoliciesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionSslPoliciesClient( + 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.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 + pb_return_value = compute.SslPoliciesList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.ListRegionSslPoliciesRequest): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = RegionSslPoliciesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.SslPoliciesList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + 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.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.ListRegionSslPoliciesRequest.pb( + compute.ListRegionSslPoliciesRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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.ListRegionSslPoliciesRequest() + 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.ListRegionSslPoliciesRequest +): + client = RegionSslPoliciesClient( + 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 = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake 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", "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 + pb_return_value = compute.SslPoliciesList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/sslPolicies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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.ListRegionSslPoliciesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionSslPoliciesClient( + 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=[ + compute.SslPolicy(), + ], + next_page_token="ghi", + ), + compute.SslPoliciesList( + items=[ + compute.SslPolicy(), + compute.SslPolicy(), + ], + ), + ) + # 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", "region": "sample2"} + + 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.ListAvailableFeaturesRegionSslPoliciesRequest, + dict, + ], +) +def test_list_available_features_rest(request_type): + client = RegionSslPoliciesClient( + 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.SslPoliciesListAvailableFeaturesResponse( + features=["features_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.SslPoliciesListAvailableFeaturesResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_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.ListAvailableFeaturesRegionSslPoliciesRequest, +): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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" + jsonified_request["region"] = "region_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" + assert "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + + client = RegionSslPoliciesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.SslPoliciesListAvailableFeaturesResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + 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", + "region", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_list_available_features_rest_interceptors(null_interceptor): + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_list_available_features" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_list_available_features" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.ListAvailableFeaturesRegionSslPoliciesRequest.pb( + compute.ListAvailableFeaturesRegionSslPoliciesRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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.ListAvailableFeaturesRegionSslPoliciesRequest() + 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.ListAvailableFeaturesRegionSslPoliciesRequest, +): + client = RegionSslPoliciesClient( + 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_available_features(request) + + +def test_list_available_features_rest_flattened(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake 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", "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 + pb_return_value = compute.SslPoliciesListAvailableFeaturesResponse.pb( + return_value + ) + json_return_value = json_format.MessageToJson(pb_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}/regions/{region}/sslPolicies/listAvailableFeatures" + % client.transport._host, + args[1], + ) + + +def test_list_available_features_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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_available_features( + compute.ListAvailableFeaturesRegionSslPoliciesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_available_features_rest_error(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionSslPolicyRequest, + dict, + ], +) +def test_patch_rest(request_type): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_policy": "sample3"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value1", "custom_features_value2"], + "description": "description_value", + "enabled_features": ["enabled_features_value1", "enabled_features_value2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "region": "region_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.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.PatchRegionSslPolicyRequest): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["ssl_policy"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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["sslPolicy"] = "ssl_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 "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "sslPolicy" in jsonified_request + assert jsonified_request["sslPolicy"] == "ssl_policy_value" + + client = RegionSslPoliciesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "sslPolicy", + "sslPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_rest_interceptors(null_interceptor): + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.PatchRegionSslPolicyRequest.pb( + compute.PatchRegionSslPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.PatchRegionSslPolicyRequest() + 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.PatchRegionSslPolicyRequest +): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_policy": "sample3"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value1", "custom_features_value2"], + "description": "description_value", + "enabled_features": ["enabled_features_value1", "enabled_features_value2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "region": "region_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.patch(request) + + +def test_patch_rest_flattened(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/sslPolicies/{ssl_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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.PatchRegionSslPolicyRequest(), + project="project_value", + region="region_value", + ssl_policy="ssl_policy_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_patch_rest_error(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.PatchRegionSslPolicyRequest, + dict, + ], +) +def test_patch_unary_rest(request_type): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_policy": "sample3"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value1", "custom_features_value2"], + "description": "description_value", + "enabled_features": ["enabled_features_value1", "enabled_features_value2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "region": "region_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.Operation( + client_operation_id="client_operation_id_value", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.PatchRegionSslPolicyRequest, +): + transport_class = transports.RegionSslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["ssl_policy"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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["sslPolicy"] = "ssl_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 "region" in jsonified_request + assert jsonified_request["region"] == "region_value" + assert "sslPolicy" in jsonified_request + assert jsonified_request["sslPolicy"] == "ssl_policy_value" + + client = RegionSslPoliciesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "patch", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.patch._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "sslPolicy", + "sslPolicyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_patch_unary_rest_interceptors(null_interceptor): + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionSslPoliciesRestInterceptor(), + ) + client = RegionSslPoliciesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "post_patch" + ) as post, mock.patch.object( + transports.RegionSslPoliciesRestInterceptor, "pre_patch" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.PatchRegionSslPolicyRequest.pb( + compute.PatchRegionSslPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.PatchRegionSslPolicyRequest() + 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.PatchRegionSslPolicyRequest +): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2", "ssl_policy": "sample3"} + request_init["ssl_policy_resource"] = { + "creation_timestamp": "creation_timestamp_value", + "custom_features": ["custom_features_value1", "custom_features_value2"], + "description": "description_value", + "enabled_features": ["enabled_features_value1", "enabled_features_value2"], + "fingerprint": "fingerprint_value", + "id": 205, + "kind": "kind_value", + "min_tls_version": "min_tls_version_value", + "name": "name_value", + "profile": "profile_value", + "region": "region_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.patch_unary(request) + + +def test_patch_unary_rest_flattened(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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_policy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/sslPolicies/{ssl_policy}" + % client.transport._host, + args[1], + ) + + +def test_patch_unary_rest_flattened_error(transport: str = "rest"): + client = RegionSslPoliciesClient( + credentials=ga_credentials.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.PatchRegionSslPolicyRequest(), + project="project_value", + region="region_value", + ssl_policy="ssl_policy_value", + ssl_policy_resource=compute.SslPolicy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_patch_unary_rest_error(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = RegionSslPoliciesClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = RegionSslPoliciesClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = RegionSslPoliciesClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = RegionSslPoliciesClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.RegionSslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = RegionSslPoliciesClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.RegionSslPoliciesRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionSslPoliciesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + +def test_region_ssl_policies_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.RegionSslPoliciesTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_region_ssl_policies_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.compute_v1.services.region_ssl_policies.transports.RegionSslPoliciesTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.RegionSslPoliciesTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "delete", + "get", + "insert", + "list", + "list_available_features", + "patch", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + 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_policies_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.compute_v1.services.region_ssl_policies.transports.RegionSslPoliciesTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.RegionSslPoliciesTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=( + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/cloud-platform", + ), + quota_project_id="octopus", + ) + + +def test_region_ssl_policies_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( + "google.cloud.compute_v1.services.region_ssl_policies.transports.RegionSslPoliciesTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.RegionSslPoliciesTransport() + adc.assert_called_once() + + +def test_region_ssl_policies_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + RegionSslPoliciesClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=( + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/cloud-platform", + ), + quota_project_id=None, + ) + + +def test_region_ssl_policies_http_transport_client_cert_source_for_mtls(): + cred = ga_credentials.AnonymousCredentials() + with mock.patch( + "google.auth.transport.requests.AuthorizedSession.configure_mtls_channel" + ) as mock_configure_mtls_channel: + transports.RegionSslPoliciesRestTransport( + credentials=cred, client_cert_source_for_mtls=client_cert_source_callback + ) + mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_region_ssl_policies_host_no_port(transport_name): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="compute.googleapis.com" + ), + transport=transport_name, + ) + assert client.transport._host == ( + "compute.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://compute.googleapis.com" + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_region_ssl_policies_host_with_port(transport_name): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="compute.googleapis.com:8000" + ), + transport=transport_name, + ) + assert client.transport._host == ( + "compute.googleapis.com:8000" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://compute.googleapis.com:8000" + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_region_ssl_policies_client_transport_session_collision(transport_name): + creds1 = ga_credentials.AnonymousCredentials() + creds2 = ga_credentials.AnonymousCredentials() + client1 = RegionSslPoliciesClient( + credentials=creds1, + transport=transport_name, + ) + client2 = RegionSslPoliciesClient( + credentials=creds2, + transport=transport_name, + ) + session1 = client1.transport.delete._session + session2 = client2.transport.delete._session + assert session1 != session2 + session1 = client1.transport.get._session + session2 = client2.transport.get._session + assert session1 != session2 + session1 = client1.transport.insert._session + session2 = client2.transport.insert._session + assert session1 != session2 + session1 = client1.transport.list._session + session2 = client2.transport.list._session + assert session1 != session2 + session1 = client1.transport.list_available_features._session + session2 = client2.transport.list_available_features._session + assert session1 != session2 + session1 = client1.transport.patch._session + session2 = client2.transport.patch._session + assert session1 != session2 + + +def test_common_billing_account_path(): + billing_account = "squid" + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = RegionSslPoliciesClient.common_billing_account_path(billing_account) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "clam", + } + path = RegionSslPoliciesClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = RegionSslPoliciesClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "whelk" + expected = "folders/{folder}".format( + folder=folder, + ) + actual = RegionSslPoliciesClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "octopus", + } + path = RegionSslPoliciesClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = RegionSslPoliciesClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "oyster" + expected = "organizations/{organization}".format( + organization=organization, + ) + actual = RegionSslPoliciesClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "nudibranch", + } + path = RegionSslPoliciesClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = RegionSslPoliciesClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "cuttlefish" + expected = "projects/{project}".format( + project=project, + ) + actual = RegionSslPoliciesClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "mussel", + } + path = RegionSslPoliciesClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = RegionSslPoliciesClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "winkle" + location = "nautilus" + expected = "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + actual = RegionSslPoliciesClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "scallop", + "location": "abalone", + } + path = RegionSslPoliciesClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = RegionSslPoliciesClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.RegionSslPoliciesTransport, "_prep_wrapped_messages" + ) as prep: + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.RegionSslPoliciesTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = RegionSslPoliciesClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + +def test_transport_close(): + transports = { + "rest": "_session", + } + + for transport, close_name in transports.items(): + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "rest", + ] + for transport in transports: + client = RegionSslPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + (RegionSslPoliciesClient, transports.RegionSslPoliciesRestTransport), + ], +) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) 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 46b3364ec..ae80e73e4 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -817,7 +818,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1138,7 +1139,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1455,7 +1456,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxy + post.return_value = compute.TargetHttpProxy() client.get( request, @@ -1803,7 +1804,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2137,7 +2138,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2461,7 +2462,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxyList + post.return_value = compute.TargetHttpProxyList() client.list( request, @@ -2852,7 +2853,7 @@ def test_set_url_map_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_url_map( request, @@ -3179,7 +3180,7 @@ def test_set_url_map_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_url_map_unary( request, 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 90bcd0867..e8eb091cc 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 @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -821,7 +822,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1142,7 +1143,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1473,7 +1474,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxy + post.return_value = compute.TargetHttpsProxy() client.get( request, @@ -1827,7 +1828,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2173,7 +2174,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2503,7 +2504,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxyList + post.return_value = compute.TargetHttpsProxyList() client.list( request, @@ -2911,7 +2912,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3276,7 +3277,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3648,7 +3649,7 @@ def test_set_ssl_certificates_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_certificates( request, @@ -3984,7 +3985,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_certificates_unary( request, @@ -4340,7 +4341,7 @@ def test_set_url_map_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_url_map( request, @@ -4667,7 +4668,7 @@ def test_set_url_map_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_url_map_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_region_target_tcp_proxies.py b/tests/unit/gapic/compute_v1/test_region_target_tcp_proxies.py new file mode 100644 index 000000000..417af150c --- /dev/null +++ b/tests/unit/gapic/compute_v1/test_region_target_tcp_proxies.py @@ -0,0 +1,3073 @@ +# -*- coding: utf-8 -*- +# 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 os + +# try/except added for compatibility with python < 3.8 +try: + from unittest import mock + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER + import mock + +import grpc +from grpc.experimental import aio +from collections.abc import Iterable +from google.protobuf import json_format +import json +import math +import pytest +from proto.marshal.rules.dates import DurationRule, TimestampRule +from proto.marshal.rules import wrappers +from requests import Response +from requests import Request, PreparedRequest +from requests.sessions import Session +from google.protobuf import json_format + +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 +from google.api_core import path_template +from google.auth import credentials as ga_credentials +from google.auth.exceptions import MutualTLSChannelError +from google.cloud.compute_v1.services.region_target_tcp_proxies import ( + RegionTargetTcpProxiesClient, +) +from google.cloud.compute_v1.services.region_target_tcp_proxies import pagers +from google.cloud.compute_v1.services.region_target_tcp_proxies import transports +from google.cloud.compute_v1.types import compute +from google.oauth2 import service_account +import google.auth + + +def client_cert_source_callback(): + return b"cert bytes", b"key bytes" + + +# If default endpoint is localhost, then default mtls endpoint will be the same. +# This method modifies the default endpoint so the client can produce a different +# mtls endpoint for endpoint testing purposes. +def modify_default_endpoint(client): + return ( + "foo.googleapis.com" + if ("localhost" in client.DEFAULT_ENDPOINT) + else client.DEFAULT_ENDPOINT + ) + + +def test__get_default_mtls_endpoint(): + api_endpoint = "example.googleapis.com" + api_mtls_endpoint = "example.mtls.googleapis.com" + sandbox_endpoint = "example.sandbox.googleapis.com" + sandbox_mtls_endpoint = "example.mtls.sandbox.googleapis.com" + non_googleapi = "api.example.com" + + assert RegionTargetTcpProxiesClient._get_default_mtls_endpoint(None) is None + assert ( + RegionTargetTcpProxiesClient._get_default_mtls_endpoint(api_endpoint) + == api_mtls_endpoint + ) + assert ( + RegionTargetTcpProxiesClient._get_default_mtls_endpoint(api_mtls_endpoint) + == api_mtls_endpoint + ) + assert ( + RegionTargetTcpProxiesClient._get_default_mtls_endpoint(sandbox_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + RegionTargetTcpProxiesClient._get_default_mtls_endpoint(sandbox_mtls_endpoint) + == sandbox_mtls_endpoint + ) + assert ( + RegionTargetTcpProxiesClient._get_default_mtls_endpoint(non_googleapi) + == non_googleapi + ) + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (RegionTargetTcpProxiesClient, "rest"), + ], +) +def test_region_target_tcp_proxies_client_from_service_account_info( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_info" + ) as factory: + factory.return_value = creds + info = {"valid": True} + client = client_class.from_service_account_info(info, transport=transport_name) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + "compute.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://compute.googleapis.com" + ) + + +@pytest.mark.parametrize( + "transport_class,transport_name", + [ + (transports.RegionTargetTcpProxiesRestTransport, "rest"), + ], +) +def test_region_target_tcp_proxies_client_service_account_always_use_jwt( + transport_class, transport_name +): + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=True) + use_jwt.assert_called_once_with(True) + + with mock.patch.object( + service_account.Credentials, "with_always_use_jwt_access", create=True + ) as use_jwt: + creds = service_account.Credentials(None, None, None) + transport = transport_class(credentials=creds, always_use_jwt_access=False) + use_jwt.assert_not_called() + + +@pytest.mark.parametrize( + "client_class,transport_name", + [ + (RegionTargetTcpProxiesClient, "rest"), + ], +) +def test_region_target_tcp_proxies_client_from_service_account_file( + client_class, transport_name +): + creds = ga_credentials.AnonymousCredentials() + with mock.patch.object( + service_account.Credentials, "from_service_account_file" + ) as factory: + factory.return_value = creds + client = client_class.from_service_account_file( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + client = client_class.from_service_account_json( + "dummy/file/path.json", transport=transport_name + ) + assert client.transport._credentials == creds + assert isinstance(client, client_class) + + assert client.transport._host == ( + "compute.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://compute.googleapis.com" + ) + + +def test_region_target_tcp_proxies_client_get_transport_class(): + transport = RegionTargetTcpProxiesClient.get_transport_class() + available_transports = [ + transports.RegionTargetTcpProxiesRestTransport, + ] + assert transport in available_transports + + transport = RegionTargetTcpProxiesClient.get_transport_class("rest") + assert transport == transports.RegionTargetTcpProxiesRestTransport + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + RegionTargetTcpProxiesClient, + transports.RegionTargetTcpProxiesRestTransport, + "rest", + ), + ], +) +@mock.patch.object( + RegionTargetTcpProxiesClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(RegionTargetTcpProxiesClient), +) +def test_region_target_tcp_proxies_client_client_options( + client_class, transport_class, transport_name +): + # Check that if channel is provided we won't create a new one. + with mock.patch.object(RegionTargetTcpProxiesClient, "get_transport_class") as gtc: + transport = transport_class(credentials=ga_credentials.AnonymousCredentials()) + client = client_class(transport=transport) + gtc.assert_not_called() + + # Check that if channel is provided via str we will create a new one. + with mock.patch.object(RegionTargetTcpProxiesClient, "get_transport_class") as gtc: + client = client_class(transport=transport_name) + gtc.assert_called() + + # Check the case api_endpoint is provided. + options = client_options.ClientOptions(api_endpoint="squid.clam.whelk") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name, client_options=options) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host="squid.clam.whelk", + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT is + # "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_MTLS_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case api_endpoint is not provided and GOOGLE_API_USE_MTLS_ENDPOINT has + # unsupported value. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "Unsupported"}): + with pytest.raises(MutualTLSChannelError): + client = client_class(transport=transport_name) + + # Check the case GOOGLE_API_USE_CLIENT_CERTIFICATE has unsupported value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "Unsupported"} + ): + with pytest.raises(ValueError): + client = client_class(transport=transport_name) + + # Check the case quota_project_id is provided + options = client_options.ClientOptions(quota_project_id="octopus") + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id="octopus", + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + # Check the case api_endpoint is provided + options = client_options.ClientOptions( + api_audience="https://language.googleapis.com" + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience="https://language.googleapis.com", + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,use_client_cert_env", + [ + ( + RegionTargetTcpProxiesClient, + transports.RegionTargetTcpProxiesRestTransport, + "rest", + "true", + ), + ( + RegionTargetTcpProxiesClient, + transports.RegionTargetTcpProxiesRestTransport, + "rest", + "false", + ), + ], +) +@mock.patch.object( + RegionTargetTcpProxiesClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(RegionTargetTcpProxiesClient), +) +@mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "auto"}) +def test_region_target_tcp_proxies_client_mtls_env_auto( + client_class, transport_class, transport_name, use_client_cert_env +): + # This tests the endpoint autoswitch behavior. Endpoint is autoswitched to the default + # mtls endpoint, if GOOGLE_API_USE_CLIENT_CERTIFICATE is "true" and client cert exists. + + # Check the case client_cert_source is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + options = client_options.ClientOptions( + client_cert_source=client_cert_source_callback + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + + if use_client_cert_env == "false": + expected_client_cert_source = None + expected_host = client.DEFAULT_ENDPOINT + else: + expected_client_cert_source = client_cert_source_callback + expected_host = client.DEFAULT_MTLS_ENDPOINT + + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case ADC client cert is provided. Whether client cert is used depends on + # GOOGLE_API_USE_CLIENT_CERTIFICATE value. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=client_cert_source_callback, + ): + if use_client_cert_env == "false": + expected_host = client.DEFAULT_ENDPOINT + expected_client_cert_source = None + else: + expected_host = client.DEFAULT_MTLS_ENDPOINT + expected_client_cert_source = client_cert_source_callback + + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=expected_host, + scopes=None, + client_cert_source_for_mtls=expected_client_cert_source, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + # Check the case client_cert_source and ADC client cert are not provided. + with mock.patch.dict( + os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": use_client_cert_env} + ): + with mock.patch.object(transport_class, "__init__") as patched: + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + patched.return_value = None + client = client_class(transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize("client_class", [RegionTargetTcpProxiesClient]) +@mock.patch.object( + RegionTargetTcpProxiesClient, + "DEFAULT_ENDPOINT", + modify_default_endpoint(RegionTargetTcpProxiesClient), +) +def test_region_target_tcp_proxies_client_get_mtls_endpoint_and_cert_source( + client_class, +): + mock_client_cert_source = mock.Mock() + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "true". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source == mock_client_cert_source + + # Test the case GOOGLE_API_USE_CLIENT_CERTIFICATE is "false". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "false"}): + mock_client_cert_source = mock.Mock() + mock_api_endpoint = "foo" + options = client_options.ClientOptions( + client_cert_source=mock_client_cert_source, api_endpoint=mock_api_endpoint + ) + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source( + options + ) + assert api_endpoint == mock_api_endpoint + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "never". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "never"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "always". + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_MTLS_ENDPOINT": "always"}): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert doesn't exist. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=False, + ): + api_endpoint, cert_source = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_ENDPOINT + assert cert_source is None + + # Test the case GOOGLE_API_USE_MTLS_ENDPOINT is "auto" and default cert exists. + with mock.patch.dict(os.environ, {"GOOGLE_API_USE_CLIENT_CERTIFICATE": "true"}): + with mock.patch( + "google.auth.transport.mtls.has_default_client_cert_source", + return_value=True, + ): + with mock.patch( + "google.auth.transport.mtls.default_client_cert_source", + return_value=mock_client_cert_source, + ): + ( + api_endpoint, + cert_source, + ) = client_class.get_mtls_endpoint_and_cert_source() + assert api_endpoint == client_class.DEFAULT_MTLS_ENDPOINT + assert cert_source == mock_client_cert_source + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name", + [ + ( + RegionTargetTcpProxiesClient, + transports.RegionTargetTcpProxiesRestTransport, + "rest", + ), + ], +) +def test_region_target_tcp_proxies_client_client_options_scopes( + client_class, transport_class, transport_name +): + # Check the case scopes are provided. + options = client_options.ClientOptions( + scopes=["1", "2"], + ) + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=["1", "2"], + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "client_class,transport_class,transport_name,grpc_helpers", + [ + ( + RegionTargetTcpProxiesClient, + transports.RegionTargetTcpProxiesRestTransport, + "rest", + None, + ), + ], +) +def test_region_target_tcp_proxies_client_client_options_credentials_file( + client_class, transport_class, transport_name, grpc_helpers +): + # Check the case credentials file is provided. + options = client_options.ClientOptions(credentials_file="credentials.json") + + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options, transport=transport_name) + patched.assert_called_once_with( + credentials=None, + credentials_file="credentials.json", + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteRegionTargetTcpProxyRequest, + dict, + ], +) +def test_delete_rest(request_type): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_tcp_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", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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, 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.DeleteRegionTargetTcpProxyRequest, +): + transport_class = transports.RegionTargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_tcp_proxy"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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["targetTcpProxy"] = "target_tcp_proxy_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 "targetTcpProxy" in jsonified_request + assert jsonified_request["targetTcpProxy"] == "target_tcp_proxy_value" + + client = RegionTargetTcpProxiesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetTcpProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_rest_interceptors(null_interceptor): + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetTcpProxiesRestInterceptor(), + ) + client = RegionTargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.DeleteRegionTargetTcpProxyRequest.pb( + compute.DeleteRegionTargetTcpProxyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.DeleteRegionTargetTcpProxyRequest() + 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.DeleteRegionTargetTcpProxyRequest +): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_tcp_proxy": "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 = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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_tcp_proxy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/targetTcpProxies/{target_tcp_proxy}" + % client.transport._host, + args[1], + ) + + +def test_delete_rest_flattened_error(transport: str = "rest"): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.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.DeleteRegionTargetTcpProxyRequest(), + project="project_value", + region="region_value", + target_tcp_proxy="target_tcp_proxy_value", + ) + + +def test_delete_rest_error(): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.DeleteRegionTargetTcpProxyRequest, + dict, + ], +) +def test_delete_unary_rest(request_type): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_tcp_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", + creation_timestamp="creation_timestamp_value", + description="description_value", + end_time="end_time_value", + http_error_message="http_error_message_value", + http_error_status_code=2374, + id=205, + insert_time="insert_time_value", + kind="kind_value", + name="name_value", + operation_group_id="operation_group_id_value", + operation_type="operation_type_value", + progress=885, + region="region_value", + self_link="self_link_value", + start_time="start_time_value", + status=compute.Operation.Status.DONE, + status_message="status_message_value", + target_id=947, + target_link="target_link_value", + user="user_value", + zone="zone_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.DeleteRegionTargetTcpProxyRequest, +): + transport_class = transports.RegionTargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_tcp_proxy"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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["targetTcpProxy"] = "target_tcp_proxy_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 "targetTcpProxy" in jsonified_request + assert jsonified_request["targetTcpProxy"] == "target_tcp_proxy_value" + + client = RegionTargetTcpProxiesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "delete", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.delete._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetTcpProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_delete_unary_rest_interceptors(null_interceptor): + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetTcpProxiesRestInterceptor(), + ) + client = RegionTargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "post_delete" + ) as post, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "pre_delete" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.DeleteRegionTargetTcpProxyRequest.pb( + compute.DeleteRegionTargetTcpProxyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.DeleteRegionTargetTcpProxyRequest() + 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.DeleteRegionTargetTcpProxyRequest +): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_tcp_proxy": "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 = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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_tcp_proxy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/targetTcpProxies/{target_tcp_proxy}" + % client.transport._host, + args[1], + ) + + +def test_delete_unary_rest_flattened_error(transport: str = "rest"): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.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.DeleteRegionTargetTcpProxyRequest(), + project="project_value", + region="region_value", + target_tcp_proxy="target_tcp_proxy_value", + ) + + +def test_delete_unary_rest_error(): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.GetRegionTargetTcpProxyRequest, + dict, + ], +) +def test_get_rest(request_type): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_tcp_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.TargetTcpProxy( + creation_timestamp="creation_timestamp_value", + description="description_value", + id=205, + kind="kind_value", + name="name_value", + proxy_bind=True, + proxy_header="proxy_header_value", + region="region_value", + self_link="self_link_value", + service="service_value", + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.TargetTcpProxy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.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.region == "region_value" + assert response.self_link == "self_link_value" + assert response.service == "service_value" + + +def test_get_rest_required_fields(request_type=compute.GetRegionTargetTcpProxyRequest): + transport_class = transports.RegionTargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["target_tcp_proxy"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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["targetTcpProxy"] = "target_tcp_proxy_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 "targetTcpProxy" in jsonified_request + assert jsonified_request["targetTcpProxy"] == "target_tcp_proxy_value" + + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + request = request_type(**request_init) + + # Designate an appropriate value for the returned response. + 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 + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.TargetTcpProxy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.get._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(()) + & set( + ( + "project", + "region", + "targetTcpProxy", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_get_rest_interceptors(null_interceptor): + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetTcpProxiesRestInterceptor(), + ) + client = RegionTargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "post_get" + ) as post, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "pre_get" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.GetRegionTargetTcpProxyRequest.pb( + compute.GetRegionTargetTcpProxyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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() + ) + + request = compute.GetRegionTargetTcpProxyRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.TargetTcpProxy() + + 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.GetRegionTargetTcpProxyRequest +): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = { + "project": "sample1", + "region": "sample2", + "target_tcp_proxy": "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 = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake 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() + + # get arguments that satisfy an http rule for this method + sample_request = { + "project": "sample1", + "region": "sample2", + "target_tcp_proxy": "sample3", + } + + # get truthy value for each flattened field + mock_args = dict( + project="project_value", + region="region_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 + pb_return_value = compute.TargetTcpProxy.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/targetTcpProxies/{target_tcp_proxy}" + % client.transport._host, + args[1], + ) + + +def test_get_rest_flattened_error(transport: str = "rest"): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.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.GetRegionTargetTcpProxyRequest(), + project="project_value", + region="region_value", + target_tcp_proxy="target_tcp_proxy_value", + ) + + +def test_get_rest_error(): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionTargetTcpProxyRequest, + dict, + ], +) +def test_insert_rest(request_type): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + 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", + "region": "region_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.InsertRegionTargetTcpProxyRequest, +): + transport_class = transports.RegionTargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = RegionTargetTcpProxiesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetTcpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_rest_interceptors(null_interceptor): + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetTcpProxiesRestInterceptor(), + ) + client = RegionTargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.InsertRegionTargetTcpProxyRequest.pb( + compute.InsertRegionTargetTcpProxyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.InsertRegionTargetTcpProxyRequest() + 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.InsertRegionTargetTcpProxyRequest +): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + 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", + "region": "region_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 = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/targetTcpProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_rest_flattened_error(transport: str = "rest"): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.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.InsertRegionTargetTcpProxyRequest(), + project="project_value", + region="region_value", + target_tcp_proxy_resource=compute.TargetTcpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_rest_error(): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.InsertRegionTargetTcpProxyRequest, + dict, + ], +) +def test_insert_unary_rest(request_type): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + 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", + "region": "region_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.InsertRegionTargetTcpProxyRequest, +): + transport_class = transports.RegionTargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = RegionTargetTcpProxiesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.insert._get_unset_required_fields({}) + assert set(unset_fields) == ( + set(("requestId",)) + & set( + ( + "project", + "region", + "targetTcpProxyResource", + ) + ) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_insert_unary_rest_interceptors(null_interceptor): + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetTcpProxiesRestInterceptor(), + ) + client = RegionTargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "post_insert" + ) as post, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "pre_insert" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.InsertRegionTargetTcpProxyRequest.pb( + compute.InsertRegionTargetTcpProxyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.InsertRegionTargetTcpProxyRequest() + 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.InsertRegionTargetTcpProxyRequest +): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # send a request that will satisfy transcoding + request_init = {"project": "sample1", "region": "sample2"} + 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", + "region": "region_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 = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake a 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_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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/targetTcpProxies" + % client.transport._host, + args[1], + ) + + +def test_insert_unary_rest_flattened_error(transport: str = "rest"): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.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.InsertRegionTargetTcpProxyRequest(), + project="project_value", + region="region_value", + target_tcp_proxy_resource=compute.TargetTcpProxy( + creation_timestamp="creation_timestamp_value" + ), + ) + + +def test_insert_unary_rest_error(): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.ListRegionTargetTcpProxiesRequest, + dict, + ], +) +def test_list_rest(request_type): + client = RegionTargetTcpProxiesClient( + 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.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 + pb_return_value = compute.TargetTcpProxyList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.ListRegionTargetTcpProxiesRequest, +): + transport_class = transports.RegionTargetTcpProxiesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = RegionTargetTcpProxiesClient( + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.TargetTcpProxyList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.RegionTargetTcpProxiesRestTransport( + 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.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + interceptor=None + if null_interceptor + else transports.RegionTargetTcpProxiesRestInterceptor(), + ) + client = RegionTargetTcpProxiesClient(transport=transport) + with mock.patch.object( + type(client.transport._session), "request" + ) as req, mock.patch.object( + path_template, "transcode" + ) as transcode, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "post_list" + ) as post, mock.patch.object( + transports.RegionTargetTcpProxiesRestInterceptor, "pre_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.ListRegionTargetTcpProxiesRequest.pb( + compute.ListRegionTargetTcpProxiesRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + 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.ListRegionTargetTcpProxiesRequest() + 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.ListRegionTargetTcpProxiesRequest +): + client = RegionTargetTcpProxiesClient( + 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 = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport="rest", + ) + + # Mock the http request call within the method and fake 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", "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 + pb_return_value = compute.TargetTcpProxyList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/targetTcpProxies" + % client.transport._host, + args[1], + ) + + +def test_list_rest_flattened_error(transport: str = "rest"): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.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.ListRegionTargetTcpProxiesRequest(), + project="project_value", + region="region_value", + ) + + +def test_list_rest_pager(transport: str = "rest"): + client = RegionTargetTcpProxiesClient( + 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", "region": "sample2"} + + 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 + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = RegionTargetTcpProxiesClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = RegionTargetTcpProxiesClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = RegionTargetTcpProxiesClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = RegionTargetTcpProxiesClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.RegionTargetTcpProxiesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = RegionTargetTcpProxiesClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.RegionTargetTcpProxiesRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport_class() + adc.assert_called_once() + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_transport_kind(transport_name): + transport = RegionTargetTcpProxiesClient.get_transport_class(transport_name)( + credentials=ga_credentials.AnonymousCredentials(), + ) + assert transport.kind == transport_name + + +def test_region_target_tcp_proxies_base_transport_error(): + # Passing both a credentials object and credentials_file should raise an error + with pytest.raises(core_exceptions.DuplicateCredentialArgs): + transport = transports.RegionTargetTcpProxiesTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_region_target_tcp_proxies_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.compute_v1.services.region_target_tcp_proxies.transports.RegionTargetTcpProxiesTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.RegionTargetTcpProxiesTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "delete", + "get", + "insert", + "list", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + 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_tcp_proxies_base_transport_with_credentials_file(): + # Instantiate the base transport with a credentials file + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.compute_v1.services.region_target_tcp_proxies.transports.RegionTargetTcpProxiesTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.RegionTargetTcpProxiesTransport( + credentials_file="credentials.json", + quota_project_id="octopus", + ) + load_creds.assert_called_once_with( + "credentials.json", + scopes=None, + default_scopes=( + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/cloud-platform", + ), + quota_project_id="octopus", + ) + + +def test_region_target_tcp_proxies_base_transport_with_adc(): + # Test the default credentials are used if credentials and credentials_file are None. + with mock.patch.object(google.auth, "default", autospec=True) as adc, mock.patch( + "google.cloud.compute_v1.services.region_target_tcp_proxies.transports.RegionTargetTcpProxiesTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.RegionTargetTcpProxiesTransport() + adc.assert_called_once() + + +def test_region_target_tcp_proxies_auth_adc(): + # If no credentials are provided, we should use ADC credentials. + with mock.patch.object(google.auth, "default", autospec=True) as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + RegionTargetTcpProxiesClient() + adc.assert_called_once_with( + scopes=None, + default_scopes=( + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/cloud-platform", + ), + quota_project_id=None, + ) + + +def test_region_target_tcp_proxies_http_transport_client_cert_source_for_mtls(): + cred = ga_credentials.AnonymousCredentials() + with mock.patch( + "google.auth.transport.requests.AuthorizedSession.configure_mtls_channel" + ) as mock_configure_mtls_channel: + transports.RegionTargetTcpProxiesRestTransport( + credentials=cred, client_cert_source_for_mtls=client_cert_source_callback + ) + mock_configure_mtls_channel.assert_called_once_with(client_cert_source_callback) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_region_target_tcp_proxies_host_no_port(transport_name): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="compute.googleapis.com" + ), + transport=transport_name, + ) + assert client.transport._host == ( + "compute.googleapis.com:443" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://compute.googleapis.com" + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_region_target_tcp_proxies_host_with_port(transport_name): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + client_options=client_options.ClientOptions( + api_endpoint="compute.googleapis.com:8000" + ), + transport=transport_name, + ) + assert client.transport._host == ( + "compute.googleapis.com:8000" + if transport_name in ["grpc", "grpc_asyncio"] + else "https://compute.googleapis.com:8000" + ) + + +@pytest.mark.parametrize( + "transport_name", + [ + "rest", + ], +) +def test_region_target_tcp_proxies_client_transport_session_collision(transport_name): + creds1 = ga_credentials.AnonymousCredentials() + creds2 = ga_credentials.AnonymousCredentials() + client1 = RegionTargetTcpProxiesClient( + credentials=creds1, + transport=transport_name, + ) + client2 = RegionTargetTcpProxiesClient( + credentials=creds2, + transport=transport_name, + ) + session1 = client1.transport.delete._session + session2 = client2.transport.delete._session + assert session1 != session2 + session1 = client1.transport.get._session + session2 = client2.transport.get._session + assert session1 != session2 + session1 = client1.transport.insert._session + session2 = client2.transport.insert._session + assert session1 != session2 + session1 = client1.transport.list._session + session2 = client2.transport.list._session + assert session1 != session2 + + +def test_common_billing_account_path(): + billing_account = "squid" + expected = "billingAccounts/{billing_account}".format( + billing_account=billing_account, + ) + actual = RegionTargetTcpProxiesClient.common_billing_account_path(billing_account) + assert expected == actual + + +def test_parse_common_billing_account_path(): + expected = { + "billing_account": "clam", + } + path = RegionTargetTcpProxiesClient.common_billing_account_path(**expected) + + # Check that the path construction is reversible. + actual = RegionTargetTcpProxiesClient.parse_common_billing_account_path(path) + assert expected == actual + + +def test_common_folder_path(): + folder = "whelk" + expected = "folders/{folder}".format( + folder=folder, + ) + actual = RegionTargetTcpProxiesClient.common_folder_path(folder) + assert expected == actual + + +def test_parse_common_folder_path(): + expected = { + "folder": "octopus", + } + path = RegionTargetTcpProxiesClient.common_folder_path(**expected) + + # Check that the path construction is reversible. + actual = RegionTargetTcpProxiesClient.parse_common_folder_path(path) + assert expected == actual + + +def test_common_organization_path(): + organization = "oyster" + expected = "organizations/{organization}".format( + organization=organization, + ) + actual = RegionTargetTcpProxiesClient.common_organization_path(organization) + assert expected == actual + + +def test_parse_common_organization_path(): + expected = { + "organization": "nudibranch", + } + path = RegionTargetTcpProxiesClient.common_organization_path(**expected) + + # Check that the path construction is reversible. + actual = RegionTargetTcpProxiesClient.parse_common_organization_path(path) + assert expected == actual + + +def test_common_project_path(): + project = "cuttlefish" + expected = "projects/{project}".format( + project=project, + ) + actual = RegionTargetTcpProxiesClient.common_project_path(project) + assert expected == actual + + +def test_parse_common_project_path(): + expected = { + "project": "mussel", + } + path = RegionTargetTcpProxiesClient.common_project_path(**expected) + + # Check that the path construction is reversible. + actual = RegionTargetTcpProxiesClient.parse_common_project_path(path) + assert expected == actual + + +def test_common_location_path(): + project = "winkle" + location = "nautilus" + expected = "projects/{project}/locations/{location}".format( + project=project, + location=location, + ) + actual = RegionTargetTcpProxiesClient.common_location_path(project, location) + assert expected == actual + + +def test_parse_common_location_path(): + expected = { + "project": "scallop", + "location": "abalone", + } + path = RegionTargetTcpProxiesClient.common_location_path(**expected) + + # Check that the path construction is reversible. + actual = RegionTargetTcpProxiesClient.parse_common_location_path(path) + assert expected == actual + + +def test_client_with_default_client_info(): + client_info = gapic_v1.client_info.ClientInfo() + + with mock.patch.object( + transports.RegionTargetTcpProxiesTransport, "_prep_wrapped_messages" + ) as prep: + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + with mock.patch.object( + transports.RegionTargetTcpProxiesTransport, "_prep_wrapped_messages" + ) as prep: + transport_class = RegionTargetTcpProxiesClient.get_transport_class() + transport = transport_class( + credentials=ga_credentials.AnonymousCredentials(), + client_info=client_info, + ) + prep.assert_called_once_with(client_info) + + +def test_transport_close(): + transports = { + "rest": "_session", + } + + for transport, close_name in transports.items(): + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + with mock.patch.object( + type(getattr(client.transport, close_name)), "close" + ) as close: + with client: + close.assert_not_called() + close.assert_called_once() + + +def test_client_ctx(): + transports = [ + "rest", + ] + for transport in transports: + client = RegionTargetTcpProxiesClient( + credentials=ga_credentials.AnonymousCredentials(), transport=transport + ) + # Test client calls underlying transport. + with mock.patch.object(type(client.transport), "close") as close: + close.assert_not_called() + with client: + pass + close.assert_called() + + +@pytest.mark.parametrize( + "client_class,transport_class", + [ + (RegionTargetTcpProxiesClient, transports.RegionTargetTcpProxiesRestTransport), + ], +) +def test_api_key_credentials(client_class, transport_class): + with mock.patch.object( + google.auth._default, "get_api_key_credentials", create=True + ) as get_api_key_credentials: + mock_cred = mock.Mock() + get_api_key_credentials.return_value = mock_cred + options = client_options.ClientOptions() + options.api_key = "api_key" + with mock.patch.object(transport_class, "__init__") as patched: + patched.return_value = None + client = client_class(client_options=options) + patched.assert_called_once_with( + credentials=mock_cred, + credentials_file=None, + host=client.DEFAULT_ENDPOINT, + scopes=None, + client_cert_source_for_mtls=None, + quota_project_id=None, + client_info=transports.base.DEFAULT_CLIENT_INFO, + always_use_jwt_access=True, + api_audience=None, + ) 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 8a57eea38..0272f35df 100644 --- a/tests/unit/gapic/compute_v1/test_region_url_maps.py +++ b/tests/unit/gapic/compute_v1/test_region_url_maps.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -779,7 +780,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1092,7 +1093,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1395,7 +1396,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMap + post.return_value = compute.UrlMap() client.get( request, @@ -1894,7 +1895,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2542,7 +2543,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3019,7 +3020,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMapList + post.return_value = compute.UrlMapList() client.list( request, @@ -3572,7 +3573,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -4231,7 +4232,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4910,7 +4911,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -5569,7 +5570,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, @@ -6210,7 +6211,7 @@ def test_validate_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMapsValidateResponse + post.return_value = compute.UrlMapsValidateResponse() client.validate( request, diff --git a/tests/unit/gapic/compute_v1/test_regions.py b/tests/unit/gapic/compute_v1/test_regions.py index aeb040d37..3a49cfa56 100644 --- a/tests/unit/gapic/compute_v1/test_regions.py +++ b/tests/unit/gapic/compute_v1/test_regions.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -724,7 +725,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Region + post.return_value = compute.Region() client.get( request, @@ -1013,7 +1014,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RegionList + post.return_value = compute.RegionList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_reservations.py b/tests/unit/gapic/compute_v1/test_reservations.py index c13b023f3..7667ced6a 100644 --- a/tests/unit/gapic/compute_v1/test_reservations.py +++ b/tests/unit/gapic/compute_v1/test_reservations.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -744,7 +745,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ReservationAggregatedList + post.return_value = compute.ReservationAggregatedList() client.aggregated_list( request, @@ -1136,7 +1137,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1449,7 +1450,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1756,7 +1757,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Reservation + post.return_value = compute.Reservation() client.get( request, @@ -2053,7 +2054,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -2414,7 +2415,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2782,7 +2783,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3119,7 +3120,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ReservationList + post.return_value = compute.ReservationList() client.list( request, @@ -3504,7 +3505,7 @@ def test_resize_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize( request, @@ -3827,7 +3828,7 @@ def test_resize_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.resize_unary( request, @@ -4208,7 +4209,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -4589,7 +4590,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, @@ -4976,7 +4977,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -5367,7 +5368,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_resource_policies.py b/tests/unit/gapic/compute_v1/test_resource_policies.py index 739caca77..7dc62e661 100644 --- a/tests/unit/gapic/compute_v1/test_resource_policies.py +++ b/tests/unit/gapic/compute_v1/test_resource_policies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -775,7 +776,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ResourcePolicyAggregatedList + post.return_value = compute.ResourcePolicyAggregatedList() client.aggregated_list( request, @@ -1173,7 +1174,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1494,7 +1495,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1807,7 +1808,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ResourcePolicy + post.return_value = compute.ResourcePolicy() client.get( request, @@ -2108,7 +2109,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -2502,7 +2503,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2940,7 +2941,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3316,7 +3317,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ResourcePolicyList + post.return_value = compute.ResourcePolicyList() client.list( request, @@ -3739,7 +3740,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -4120,7 +4121,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_routers.py b/tests/unit/gapic/compute_v1/test_routers.py index 67f236959..f6e0d6dcf 100644 --- a/tests/unit/gapic/compute_v1/test_routers.py +++ b/tests/unit/gapic/compute_v1/test_routers.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -735,7 +736,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RouterAggregatedList + post.return_value = compute.RouterAggregatedList() client.aggregated_list( request, @@ -1120,7 +1121,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1427,7 +1428,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1728,7 +1729,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Router + post.return_value = compute.Router() client.get( request, @@ -2043,7 +2044,7 @@ def test_get_nat_mapping_info_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VmEndpointNatMappingsList + post.return_value = compute.VmEndpointNatMappingsList() client.get_nat_mapping_info( request, @@ -2393,7 +2394,7 @@ def test_get_router_status_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RouterStatusResponse + post.return_value = compute.RouterStatusResponse() client.get_router_status( request, @@ -2832,7 +2833,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3362,7 +3363,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3779,7 +3780,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RouterList + post.return_value = compute.RouterList() client.list( request, @@ -4272,7 +4273,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -4813,7 +4814,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -5331,7 +5332,7 @@ def test_preview_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RoutersPreviewResponse + post.return_value = compute.RoutersPreviewResponse() client.preview( request, @@ -5894,7 +5895,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -6435,7 +6436,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_routes.py b/tests/unit/gapic/compute_v1/test_routes.py index c1dd531be..21375b6fc 100644 --- a/tests/unit/gapic/compute_v1/test_routes.py +++ b/tests/unit/gapic/compute_v1/test_routes.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -754,7 +755,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1050,7 +1051,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1360,7 +1361,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Route + post.return_value = compute.Route() client.get( request, @@ -1706,7 +1707,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2064,7 +2065,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2387,7 +2388,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.RouteList + post.return_value = compute.RouteList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_security_policies.py b/tests/unit/gapic/compute_v1/test_security_policies.py index 0d8be1793..3b0c5afba 100644 --- a/tests/unit/gapic/compute_v1/test_security_policies.py +++ b/tests/unit/gapic/compute_v1/test_security_policies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -839,7 +840,7 @@ def test_add_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_rule( request, @@ -1231,7 +1232,7 @@ def test_add_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_rule_unary( request, @@ -1581,7 +1582,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPoliciesAggregatedList + post.return_value = compute.SecurityPoliciesAggregatedList() client.aggregated_list( request, @@ -1970,7 +1971,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -2272,7 +2273,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -2568,7 +2569,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicy + post.return_value = compute.SecurityPolicy() client.get( request, @@ -2860,7 +2861,7 @@ def test_get_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicyRule + post.return_value = compute.SecurityPolicyRule() client.get_rule( request, @@ -2985,6 +2986,9 @@ def test_insert_rest(request_type): } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -3258,7 +3262,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3290,6 +3294,9 @@ def test_insert_rest_bad_request( } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -3464,6 +3471,9 @@ def test_insert_unary_rest(request_type): } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -3717,7 +3727,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3749,6 +3759,9 @@ def test_insert_unary_rest_bad_request( } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -4091,7 +4104,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SecurityPolicyList + post.return_value = compute.SecurityPolicyList() client.list( request, @@ -4449,7 +4462,7 @@ def test_list_preconfigured_expression_sets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = ( - compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse + compute.SecurityPoliciesListPreconfiguredExpressionSetsResponse() ) client.list_preconfigured_expression_sets( @@ -4580,6 +4593,9 @@ def test_patch_rest(request_type): } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -4848,7 +4864,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -4880,6 +4896,9 @@ def test_patch_rest_bad_request( } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -5056,6 +5075,9 @@ def test_patch_unary_rest(request_type): } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -5304,7 +5326,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -5336,6 +5358,9 @@ def test_patch_unary_rest_bad_request( } }, "advanced_options_config": { + "json_custom_config": { + "content_types": ["content_types_value1", "content_types_value2"] + }, "json_parsing": "json_parsing_value", "log_level": "log_level_value", }, @@ -5764,7 +5789,7 @@ def test_patch_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_rule( request, @@ -6166,7 +6191,7 @@ def test_patch_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_rule_unary( request, @@ -6537,7 +6562,7 @@ def test_remove_rule_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_rule( request, @@ -6839,7 +6864,7 @@ def test_remove_rule_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_rule_unary( request, @@ -6941,147 +6966,802 @@ def test_remove_rule_unary_rest_error(): ) -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.SecurityPoliciesRestTransport( +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsSecurityPolicyRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = SecurityPoliciesClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - # It is an error to provide a credentials file and a transport instance. - transport = transports.SecurityPoliciesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityPoliciesClient( - client_options={"credentials_file": "credentials.json"}, - 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) - # It is an error to provide an api_key and a transport instance. - transport = transports.SecurityPoliciesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityPoliciesClient( - client_options=options, - transport=transport, + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.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", ) - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = SecurityPoliciesClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) - # It is an error to provide scopes and a transport instance. - transport = transports.SecurityPoliciesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = SecurityPoliciesClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) + 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_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.SecurityPoliciesRestTransport( - credentials=ga_credentials.AnonymousCredentials(), +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsSecurityPolicyRequest, +): + transport_class = transports.SecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) ) - client = SecurityPoliciesClient(transport=transport) - assert client.transport is transport + # verify fields with default values are dropped -@pytest.mark.parametrize( - "transport_class", - [ - transports.SecurityPoliciesRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + 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 -@pytest.mark.parametrize( - "transport_name", - [ - "rest", - ], -) -def test_transport_kind(transport_name): - transport = SecurityPoliciesClient.get_transport_class(transport_name)( + 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 = SecurityPoliciesClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - assert transport.kind == transport_name + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result -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): - transport = transports.SecurityPoliciesTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json", - ) + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) -def test_security_policies_base_transport(): - # Instantiate the base transport. - with mock.patch( - "google.cloud.compute_v1.services.security_policies.transports.SecurityPoliciesTransport.__init__" - ) as Transport: - Transport.return_value = None - transport = transports.SecurityPoliciesTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - "add_rule", - "aggregated_list", - "delete", - "get", - "get_rule", - "insert", - "list", - "list_preconfigured_expression_sets", - "patch", - "patch_rule", - "remove_rule", - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) + response = client.set_labels(request) - with pytest.raises(NotImplementedError): - transport.close() + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - # Catch all for all remaining methods and properties - remainder = [ - "kind", - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() +def test_set_labels_rest_unset_required_fields(): + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) -def test_security_policies_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object( + 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.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_set_labels" + ) as post, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsSecurityPolicyRequest.pb( + compute.SetLabelsSecurityPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsSecurityPolicyRequest() + 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.SetLabelsSecurityPolicyRequest +): + client = SecurityPoliciesClient( + 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 = 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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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/securityPolicies/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels( + compute.SetLabelsSecurityPolicyRequest(), + 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 = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsSecurityPolicyRequest, + dict, + ], +) +def test_set_labels_unary_rest(request_type): + client = SecurityPoliciesClient( + 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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetLabelsSecurityPolicyRequest, +): + transport_class = transports.SecurityPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SecurityPoliciesRestTransport( + 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_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_set_labels" + ) as post, mock.patch.object( + transports.SecurityPoliciesRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsSecurityPolicyRequest.pb( + compute.SetLabelsSecurityPolicyRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsSecurityPolicyRequest() + 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.SetLabelsSecurityPolicyRequest +): + client = SecurityPoliciesClient( + 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_unary(request) + + +def test_set_labels_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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/global/securityPolicies/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels_unary( + compute.SetLabelsSecurityPolicyRequest(), + project="project_value", + resource="resource_value", + global_set_labels_request_resource=compute.GlobalSetLabelsRequest( + label_fingerprint="label_fingerprint_value" + ), + ) + + +def test_set_labels_unary_rest_error(): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityPoliciesClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityPoliciesClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = SecurityPoliciesClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = SecurityPoliciesClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = SecurityPoliciesClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.SecurityPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = SecurityPoliciesClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.SecurityPoliciesRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + 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): + transport = transports.SecurityPoliciesTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_security_policies_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.compute_v1.services.security_policies.transports.SecurityPoliciesTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.SecurityPoliciesTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "add_rule", + "aggregated_list", + "delete", + "get", + "get_rule", + "insert", + "list", + "list_preconfigured_expression_sets", + "patch", + "patch_rule", + "remove_rule", + "set_labels", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + 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 + with mock.patch.object( google.auth, "load_credentials_from_file", autospec=True ) as load_creds, mock.patch( "google.cloud.compute_v1.services.security_policies.transports.SecurityPoliciesTransport._prep_wrapped_messages" @@ -7232,6 +7912,9 @@ def test_security_policies_client_transport_session_collision(transport_name): session1 = client1.transport.remove_rule._session session2 = client2.transport.remove_rule._session assert session1 != session2 + session1 = client1.transport.set_labels._session + session2 = client2.transport.set_labels._session + assert session1 != session2 def test_common_billing_account_path(): diff --git a/tests/unit/gapic/compute_v1/test_service_attachments.py b/tests/unit/gapic/compute_v1/test_service_attachments.py index d8f805805..de776f794 100644 --- a/tests/unit/gapic/compute_v1/test_service_attachments.py +++ b/tests/unit/gapic/compute_v1/test_service_attachments.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -775,7 +776,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ServiceAttachmentAggregatedList + post.return_value = compute.ServiceAttachmentAggregatedList() client.aggregated_list( request, @@ -1176,7 +1177,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1497,7 +1498,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1824,7 +1825,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ServiceAttachment + post.return_value = compute.ServiceAttachment() client.get( request, @@ -2125,7 +2126,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -2488,7 +2489,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2868,7 +2869,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3217,7 +3218,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ServiceAttachmentList + post.return_value = compute.ServiceAttachmentList() client.list( request, @@ -3636,7 +3637,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -4035,7 +4036,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -4458,7 +4459,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -4839,7 +4840,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_snapshots.py b/tests/unit/gapic/compute_v1/test_snapshots.py index 4e881773a..68c91335c 100644 --- a/tests/unit/gapic/compute_v1/test_snapshots.py +++ b/tests/unit/gapic/compute_v1/test_snapshots.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -757,7 +758,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1053,7 +1054,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1383,7 +1384,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Snapshot + post.return_value = compute.Snapshot() client.get( request, @@ -1667,7 +1668,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -2019,7 +2020,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2386,7 +2387,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2712,7 +2713,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SnapshotList + post.return_value = compute.SnapshotList() client.list( request, @@ -3126,7 +3127,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -3533,7 +3534,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -3847,7 +3848,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -4142,7 +4143,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_ssl_certificates.py b/tests/unit/gapic/compute_v1/test_ssl_certificates.py index 98ffbc3d7..fd41b8b57 100644 --- a/tests/unit/gapic/compute_v1/test_ssl_certificates.py +++ b/tests/unit/gapic/compute_v1/test_ssl_certificates.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -767,7 +768,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslCertificateAggregatedList + post.return_value = compute.SslCertificateAggregatedList() client.aggregated_list( request, @@ -1156,7 +1157,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1458,7 +1459,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1760,7 +1761,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslCertificate + post.return_value = compute.SslCertificate() client.get( request, @@ -2105,7 +2106,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2460,7 +2461,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2785,7 +2786,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslCertificateList + post.return_value = compute.SslCertificateList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_ssl_policies.py b/tests/unit/gapic/compute_v1/test_ssl_policies.py index e9e7bf730..166647e11 100644 --- a/tests/unit/gapic/compute_v1/test_ssl_policies.py +++ b/tests/unit/gapic/compute_v1/test_ssl_policies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -545,6 +546,374 @@ def test_ssl_policies_client_client_options_credentials_file( ) +@pytest.mark.parametrize( + "request_type", + [ + compute.AggregatedListSslPoliciesRequest, + dict, + ], +) +def test_aggregated_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.SslPoliciesAggregatedList( + etag="etag_value", + id="id_value", + kind="kind_value", + next_page_token="next_page_token_value", + self_link="self_link_value", + unreachables=["unreachables_value"], + ) + + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.SslPoliciesAggregatedList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + response = client.aggregated_list(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"] + + +def test_aggregated_list_rest_required_fields( + request_type=compute.AggregatedListSslPoliciesRequest, +): + transport_class = transports.SslPoliciesRestTransport + + request_init = {} + request_init["project"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) + ) + + # verify fields with default values are dropped + + unset_fields = transport_class( + credentials=ga_credentials.AnonymousCredentials() + ).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" + + 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", + ) + ) + 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.SslPoliciesAggregatedList() + # Mock the http request call within the method and fake a response. + with mock.patch.object(Session, "request") as req: + # We need to mock transcode() because providing default values + # for required fields will fail the real version if the http_options + # expect actual values for those fields. + with mock.patch.object(path_template, "transcode") as transcode: + # A uri without fields and an empty body will force all the + # request fields to show up in the query_params. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "get", + "query_params": pb_request, + } + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.SslPoliciesAggregatedList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + response = client.aggregated_list(request) + + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params + + +def test_aggregated_list_rest_unset_required_fields(): + transport = transports.SslPoliciesRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) + + unset_fields = transport.aggregated_list._get_unset_required_fields({}) + assert set(unset_fields) == ( + set( + ( + "filter", + "includeAllScopes", + "maxResults", + "orderBy", + "pageToken", + "returnPartialSuccess", + ) + ) + & set(("project",)) + ) + + +@pytest.mark.parametrize("null_interceptor", [True, False]) +def test_aggregated_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_aggregated_list" + ) as post, mock.patch.object( + transports.SslPoliciesRestInterceptor, "pre_aggregated_list" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.AggregatedListSslPoliciesRequest.pb( + compute.AggregatedListSslPoliciesRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.return_value = Response() + req.return_value.status_code = 200 + req.return_value.request = PreparedRequest() + req.return_value._content = compute.SslPoliciesAggregatedList.to_json( + compute.SslPoliciesAggregatedList() + ) + + request = compute.AggregatedListSslPoliciesRequest() + metadata = [ + ("key", "val"), + ("cephalopod", "squid"), + ] + pre.return_value = request, metadata + post.return_value = compute.SslPoliciesAggregatedList() + + client.aggregated_list( + request, + metadata=[ + ("key", "val"), + ("cephalopod", "squid"), + ], + ) + + pre.assert_called_once() + post.assert_called_once() + + +def test_aggregated_list_rest_bad_request( + transport: str = "rest", request_type=compute.AggregatedListSslPoliciesRequest +): + 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.aggregated_list(request) + + +def test_aggregated_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.SslPoliciesAggregatedList() + + # 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 + pb_return_value = compute.SslPoliciesAggregatedList.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value + + 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}/aggregated/sslPolicies" + % client.transport._host, + args[1], + ) + + +def test_aggregated_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.aggregated_list( + compute.AggregatedListSslPoliciesRequest(), + project="project_value", + ) + + +def test_aggregated_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.SslPoliciesAggregatedList( + items={ + "a": compute.SslPoliciesScopedList(), + "b": compute.SslPoliciesScopedList(), + "c": compute.SslPoliciesScopedList(), + }, + next_page_token="abc", + ), + compute.SslPoliciesAggregatedList( + items={}, + next_page_token="def", + ), + compute.SslPoliciesAggregatedList( + items={ + "g": compute.SslPoliciesScopedList(), + }, + next_page_token="ghi", + ), + compute.SslPoliciesAggregatedList( + items={ + "h": compute.SslPoliciesScopedList(), + "i": compute.SslPoliciesScopedList(), + }, + ), + ) + # Two responses for two calls + response = response + response + + # Wrap the values into proper Response objs + response = tuple(compute.SslPoliciesAggregatedList.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.SslPoliciesScopedList) + 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.SslPoliciesScopedList, + ) + + assert pager.get("a") is None + assert isinstance(pager.get("h"), compute.SslPoliciesScopedList) + + 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", [ @@ -763,7 +1132,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1061,7 +1430,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1194,6 +1563,7 @@ def test_get_rest(request_type): min_tls_version="min_tls_version_value", name="name_value", profile="profile_value", + region="region_value", self_link="self_link_value", ) @@ -1219,6 +1589,7 @@ def test_get_rest(request_type): assert response.min_tls_version == "min_tls_version_value" assert response.name == "name_value" assert response.profile == "profile_value" + assert response.region == "region_value" assert response.self_link == "self_link_value" @@ -1357,7 +1728,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslPolicy + post.return_value = compute.SslPolicy() client.get( request, @@ -1485,6 +1856,7 @@ def test_insert_rest(request_type): "min_tls_version": "min_tls_version_value", "name": "name_value", "profile": "profile_value", + "region": "region_value", "self_link": "self_link_value", "warnings": [ { @@ -1694,7 +2066,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -1729,6 +2101,7 @@ def test_insert_rest_bad_request( "min_tls_version": "min_tls_version_value", "name": "name_value", "profile": "profile_value", + "region": "region_value", "self_link": "self_link_value", "warnings": [ { @@ -1846,6 +2219,7 @@ def test_insert_unary_rest(request_type): "min_tls_version": "min_tls_version_value", "name": "name_value", "profile": "profile_value", + "region": "region_value", "self_link": "self_link_value", "warnings": [ { @@ -2033,7 +2407,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2068,6 +2442,7 @@ def test_insert_unary_rest_bad_request( "min_tls_version": "min_tls_version_value", "name": "name_value", "profile": "profile_value", + "region": "region_value", "self_link": "self_link_value", "warnings": [ { @@ -2350,7 +2725,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslPoliciesList + post.return_value = compute.SslPoliciesList() client.list( request, @@ -2700,7 +3075,7 @@ def test_list_available_features_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SslPoliciesListAvailableFeaturesResponse + post.return_value = compute.SslPoliciesListAvailableFeaturesResponse() client.list_available_features( request, @@ -2829,6 +3204,7 @@ def test_patch_rest(request_type): "min_tls_version": "min_tls_version_value", "name": "name_value", "profile": "profile_value", + "region": "region_value", "self_link": "self_link_value", "warnings": [ { @@ -3043,7 +3419,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3078,6 +3454,7 @@ def test_patch_rest_bad_request( "min_tls_version": "min_tls_version_value", "name": "name_value", "profile": "profile_value", + "region": "region_value", "self_link": "self_link_value", "warnings": [ { @@ -3197,6 +3574,7 @@ def test_patch_unary_rest(request_type): "min_tls_version": "min_tls_version_value", "name": "name_value", "profile": "profile_value", + "region": "region_value", "self_link": "self_link_value", "warnings": [ { @@ -3389,7 +3767,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3424,6 +3802,7 @@ def test_patch_unary_rest_bad_request( "min_tls_version": "min_tls_version_value", "name": "name_value", "profile": "profile_value", + "region": "region_value", "self_link": "self_link_value", "warnings": [ { @@ -3627,6 +4006,7 @@ def test_ssl_policies_base_transport(): # Every method on the transport should just blindly # raise NotImplementedError. methods = ( + "aggregated_list", "delete", "get", "insert", @@ -3770,6 +4150,9 @@ def test_ssl_policies_client_transport_session_collision(transport_name): credentials=creds2, transport=transport_name, ) + session1 = client1.transport.aggregated_list._session + session2 = client2.transport.aggregated_list._session + assert session1 != session2 session1 = client1.transport.delete._session session2 = client2.transport.delete._session assert session1 != session2 diff --git a/tests/unit/gapic/compute_v1/test_subnetworks.py b/tests/unit/gapic/compute_v1/test_subnetworks.py index 0b45bcff3..52c6b7e35 100644 --- a/tests/unit/gapic/compute_v1/test_subnetworks.py +++ b/tests/unit/gapic/compute_v1/test_subnetworks.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -744,7 +745,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SubnetworkAggregatedList + post.return_value = compute.SubnetworkAggregatedList() client.aggregated_list( request, @@ -1136,7 +1137,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1449,7 +1450,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1789,7 +1790,7 @@ def test_expand_ip_cidr_range_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.expand_ip_cidr_range( request, @@ -2116,7 +2117,7 @@ def test_expand_ip_cidr_range_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.expand_ip_cidr_range_unary( request, @@ -2454,7 +2455,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Subnetwork + post.return_value = compute.Subnetwork() client.get( request, @@ -2751,7 +2752,7 @@ def test_get_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.get_iam_policy( request, @@ -3116,7 +3117,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -3496,7 +3497,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3839,7 +3840,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.SubnetworkList + post.return_value = compute.SubnetworkList() client.list( request, @@ -4191,7 +4192,7 @@ def test_list_usable_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UsableSubnetworksAggregatedList + post.return_value = compute.UsableSubnetworksAggregatedList() client.list_usable( request, @@ -4618,7 +4619,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -5015,7 +5016,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -5430,7 +5431,7 @@ def test_set_iam_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Policy + post.return_value = compute.Policy() client.set_iam_policy( request, @@ -5853,7 +5854,7 @@ def test_set_private_ip_google_access_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_private_ip_google_access( request, @@ -6181,7 +6182,7 @@ def test_set_private_ip_google_access_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_private_ip_google_access_unary( request, @@ -6491,7 +6492,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, 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 081189bcb..9bbe53685 100644 --- a/tests/unit/gapic/compute_v1/test_target_grpc_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_grpc_proxies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -794,7 +795,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1096,7 +1097,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1394,7 +1395,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetGrpcProxy + post.return_value = compute.TargetGrpcProxy() client.get( request, @@ -1725,7 +1726,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2052,7 +2053,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2363,7 +2364,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetGrpcProxyList + post.return_value = compute.TargetGrpcProxyList() client.list( request, @@ -2752,7 +2753,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3086,7 +3087,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, 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 bbfe2b2df..696e8aebe 100644 --- a/tests/unit/gapic/compute_v1/test_target_http_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_http_proxies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -773,7 +774,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxyAggregatedList + post.return_value = compute.TargetHttpProxyAggregatedList() client.aggregated_list( request, @@ -1162,7 +1163,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1464,7 +1465,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1762,7 +1763,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxy + post.return_value = compute.TargetHttpProxy() client.get( request, @@ -2093,7 +2094,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2420,7 +2421,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2731,7 +2732,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpProxyList + post.return_value = compute.TargetHttpProxyList() client.list( request, @@ -3120,7 +3121,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3454,7 +3455,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3799,7 +3800,7 @@ def test_set_url_map_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_url_map( request, @@ -4107,7 +4108,7 @@ def test_set_url_map_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_url_map_unary( request, 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 5e775e98e..6070b595f 100644 --- a/tests/unit/gapic/compute_v1/test_target_https_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_https_proxies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -775,7 +776,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxyAggregatedList + post.return_value = compute.TargetHttpsProxyAggregatedList() client.aggregated_list( request, @@ -1167,7 +1168,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1469,7 +1470,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1779,7 +1780,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxy + post.return_value = compute.TargetHttpsProxy() client.get( request, @@ -2118,7 +2119,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2457,7 +2458,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2774,7 +2775,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetHttpsProxyList + post.return_value = compute.TargetHttpsProxyList() client.list( request, @@ -3169,7 +3170,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -3515,7 +3516,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -3868,7 +3869,7 @@ def test_set_certificate_map_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_certificate_map( request, @@ -4185,7 +4186,7 @@ def test_set_certificate_map_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_certificate_map_unary( request, @@ -4524,7 +4525,7 @@ def test_set_quic_override_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_quic_override( request, @@ -4840,7 +4841,7 @@ def test_set_quic_override_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_quic_override_unary( request, @@ -5178,7 +5179,7 @@ def test_set_ssl_certificates_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_certificates( request, @@ -5495,7 +5496,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_certificates_unary( request, @@ -5832,7 +5833,7 @@ def test_set_ssl_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_policy( request, @@ -6144,7 +6145,7 @@ def test_set_ssl_policy_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_policy_unary( request, @@ -6478,7 +6479,7 @@ def test_set_url_map_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_url_map( request, @@ -6786,7 +6787,7 @@ def test_set_url_map_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_url_map_unary( request, diff --git a/tests/unit/gapic/compute_v1/test_target_instances.py b/tests/unit/gapic/compute_v1/test_target_instances.py index d99ec23b9..f073bbfae 100644 --- a/tests/unit/gapic/compute_v1/test_target_instances.py +++ b/tests/unit/gapic/compute_v1/test_target_instances.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -767,7 +768,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetInstanceAggregatedList + post.return_value = compute.TargetInstanceAggregatedList() client.aggregated_list( request, @@ -1165,7 +1166,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1486,7 +1487,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1803,7 +1804,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetInstance + post.return_value = compute.TargetInstance() client.get( request, @@ -2149,7 +2150,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2483,7 +2484,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2805,7 +2806,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetInstanceList + post.return_value = compute.TargetInstanceList() client.list( request, diff --git a/tests/unit/gapic/compute_v1/test_target_pools.py b/tests/unit/gapic/compute_v1/test_target_pools.py index 755f9f89f..df5343a15 100644 --- a/tests/unit/gapic/compute_v1/test_target_pools.py +++ b/tests/unit/gapic/compute_v1/test_target_pools.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -777,7 +778,7 @@ def test_add_health_check_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_health_check( request, @@ -1108,7 +1109,7 @@ def test_add_health_check_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_health_check_unary( request, @@ -1461,7 +1462,7 @@ def test_add_instance_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_instance( request, @@ -1788,7 +1789,7 @@ def test_add_instance_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.add_instance_unary( request, @@ -2104,7 +2105,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetPoolAggregatedList + post.return_value = compute.TargetPoolAggregatedList() client.aggregated_list( request, @@ -2496,7 +2497,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -2809,7 +2810,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -3118,7 +3119,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetPool + post.return_value = compute.TargetPool() client.get( request, @@ -3414,7 +3415,7 @@ def test_get_health_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetPoolInstanceHealth + post.return_value = compute.TargetPoolInstanceHealth() client.get_health( request, @@ -3765,7 +3766,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -4099,7 +4100,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -4417,7 +4418,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetPoolList + post.return_value = compute.TargetPoolList() client.list( request, @@ -4806,7 +4807,7 @@ def test_remove_health_check_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_health_check( request, @@ -5137,7 +5138,7 @@ def test_remove_health_check_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_health_check_unary( request, @@ -5490,7 +5491,7 @@ def test_remove_instance_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_instance( request, @@ -5817,7 +5818,7 @@ def test_remove_instance_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.remove_instance_unary( request, @@ -6174,7 +6175,7 @@ def test_set_backup_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_backup( request, @@ -6503,7 +6504,7 @@ def test_set_backup_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_backup_unary( request, 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 06b0fc4c0..535da2727 100644 --- a/tests/unit/gapic/compute_v1/test_target_ssl_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_ssl_proxies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -794,7 +795,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1096,7 +1097,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1396,7 +1397,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetSslProxy + post.return_value = compute.TargetSslProxy() client.get( request, @@ -1728,7 +1729,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2057,7 +2058,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2369,7 +2370,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetSslProxyList + post.return_value = compute.TargetSslProxyList() client.list( request, @@ -2751,7 +2752,7 @@ def test_set_backend_service_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_backend_service( request, @@ -3067,7 +3068,7 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_backend_service_unary( request, @@ -3405,7 +3406,7 @@ def test_set_certificate_map_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_certificate_map( request, @@ -3721,7 +3722,7 @@ def test_set_certificate_map_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_certificate_map_unary( request, @@ -4059,7 +4060,7 @@ def test_set_proxy_header_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_proxy_header( request, @@ -4375,7 +4376,7 @@ def test_set_proxy_header_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_proxy_header_unary( request, @@ -4713,7 +4714,7 @@ def test_set_ssl_certificates_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_certificates( request, @@ -5030,7 +5031,7 @@ def test_set_ssl_certificates_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_certificates_unary( request, @@ -5367,7 +5368,7 @@ def test_set_ssl_policy_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_policy( request, @@ -5679,7 +5680,7 @@ def test_set_ssl_policy_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_ssl_policy_unary( request, 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 03835e38f..43f5aa84c 100644 --- a/tests/unit/gapic/compute_v1/test_target_tcp_proxies.py +++ b/tests/unit/gapic/compute_v1/test_target_tcp_proxies.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -794,7 +795,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1096,7 +1097,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1226,6 +1227,7 @@ def test_get_rest(request_type): name="name_value", proxy_bind=True, proxy_header="proxy_header_value", + region="region_value", self_link="self_link_value", service="service_value", ) @@ -1249,6 +1251,7 @@ def test_get_rest(request_type): assert response.name == "name_value" assert response.proxy_bind is True assert response.proxy_header == "proxy_header_value" + assert response.region == "region_value" assert response.self_link == "self_link_value" assert response.service == "service_value" @@ -1392,7 +1395,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetTcpProxy + post.return_value = compute.TargetTcpProxy() client.get( request, @@ -1517,6 +1520,7 @@ def test_insert_rest(request_type): "name": "name_value", "proxy_bind": True, "proxy_header": "proxy_header_value", + "region": "region_value", "self_link": "self_link_value", "service": "service_value", } @@ -1722,7 +1726,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -1754,6 +1758,7 @@ def test_insert_rest_bad_request( "name": "name_value", "proxy_bind": True, "proxy_header": "proxy_header_value", + "region": "region_value", "self_link": "self_link_value", "service": "service_value", } @@ -1862,6 +1867,7 @@ def test_insert_unary_rest(request_type): "name": "name_value", "proxy_bind": True, "proxy_header": "proxy_header_value", + "region": "region_value", "self_link": "self_link_value", "service": "service_value", } @@ -2047,7 +2053,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2079,6 +2085,7 @@ def test_insert_unary_rest_bad_request( "name": "name_value", "proxy_bind": True, "proxy_header": "proxy_header_value", + "region": "region_value", "self_link": "self_link_value", "service": "service_value", } @@ -2357,7 +2364,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetTcpProxyList + post.return_value = compute.TargetTcpProxyList() client.list( request, @@ -2739,7 +2746,7 @@ def test_set_backend_service_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_backend_service( request, @@ -3055,7 +3062,7 @@ def test_set_backend_service_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_backend_service_unary( request, @@ -3393,7 +3400,7 @@ def test_set_proxy_header_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_proxy_header( request, @@ -3709,7 +3716,7 @@ def test_set_proxy_header_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_proxy_header_unary( request, 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 32db056be..d7310bf9d 100644 --- a/tests/unit/gapic/compute_v1/test_target_vpn_gateways.py +++ b/tests/unit/gapic/compute_v1/test_target_vpn_gateways.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -773,7 +774,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetVpnGatewayAggregatedList + post.return_value = compute.TargetVpnGatewayAggregatedList() client.aggregated_list( request, @@ -1173,7 +1174,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1494,7 +1495,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1813,7 +1814,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetVpnGateway + post.return_value = compute.TargetVpnGateway() client.get( request, @@ -2162,7 +2163,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2498,7 +2499,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2821,7 +2822,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TargetVpnGatewayList + post.return_value = compute.TargetVpnGatewayList() client.list( request, @@ -2978,149 +2979,830 @@ def test_list_rest_pager(transport: str = "rest"): assert page_.raw_page.next_page_token == token -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.TargetVpnGatewaysRestTransport( +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsTargetVpnGatewayRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = TargetVpnGatewaysClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - # It is an error to provide a credentials file and a transport instance. - transport = transports.TargetVpnGatewaysRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = TargetVpnGatewaysClient( - client_options={"credentials_file": "credentials.json"}, - 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) - # It is an error to provide an api_key and a transport instance. - transport = transports.TargetVpnGatewaysRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = TargetVpnGatewaysClient( - client_options=options, - transport=transport, + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.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", ) - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = TargetVpnGatewaysClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) - # It is an error to provide scopes and a transport instance. - transport = transports.TargetVpnGatewaysRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = TargetVpnGatewaysClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) + 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_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.TargetVpnGatewaysRestTransport( - credentials=ga_credentials.AnonymousCredentials(), +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsTargetVpnGatewayRequest, +): + transport_class = transports.TargetVpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) ) - client = TargetVpnGatewaysClient(transport=transport) - assert client.transport is transport + # verify fields with default values are dropped -@pytest.mark.parametrize( - "transport_class", - [ - transports.TargetVpnGatewaysRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + 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 -@pytest.mark.parametrize( - "transport_name", - [ - "rest", - ], -) -def test_transport_kind(transport_name): - transport = TargetVpnGatewaysClient.get_transport_class(transport_name)( + 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 = TargetVpnGatewaysClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - assert transport.kind == transport_name + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result -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): - transport = transports.TargetVpnGatewaysTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json", - ) + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) -def test_target_vpn_gateways_base_transport(): - # Instantiate the base transport. - with mock.patch( - "google.cloud.compute_v1.services.target_vpn_gateways.transports.TargetVpnGatewaysTransport.__init__" - ) as Transport: - Transport.return_value = None - transport = transports.TargetVpnGatewaysTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - "aggregated_list", - "delete", - "get", - "insert", - "list", - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) + response = client.set_labels(request) - with pytest.raises(NotImplementedError): - transport.close() + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - # Catch all for all remaining methods and properties - remainder = [ - "kind", - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() +def test_set_labels_rest_unset_required_fields(): + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) -def test_target_vpn_gateways_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.compute_v1.services.target_vpn_gateways.transports.TargetVpnGatewaysTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.TargetVpnGatewaysTransport( - credentials_file="credentials.json", + 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.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_set_labels" + ) as post, mock.patch.object( + transports.TargetVpnGatewaysRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsTargetVpnGatewayRequest.pb( + compute.SetLabelsTargetVpnGatewayRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsTargetVpnGatewayRequest() + 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.SetLabelsTargetVpnGatewayRequest +): + client = TargetVpnGatewaysClient( + 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 = 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", + "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/targetVpnGateways/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels( + compute.SetLabelsTargetVpnGatewayRequest(), + 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 = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsTargetVpnGatewayRequest, + dict, + ], +) +def test_set_labels_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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetLabelsTargetVpnGatewayRequest, +): + transport_class = transports.TargetVpnGatewaysRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.TargetVpnGatewaysRestTransport( + 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_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_set_labels" + ) as post, mock.patch.object( + transports.TargetVpnGatewaysRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsTargetVpnGatewayRequest.pb( + compute.SetLabelsTargetVpnGatewayRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsTargetVpnGatewayRequest() + 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.SetLabelsTargetVpnGatewayRequest +): + client = TargetVpnGatewaysClient( + 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_unary(request) + + +def test_set_labels_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", + "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/regions/{region}/targetVpnGateways/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels_unary( + compute.SetLabelsTargetVpnGatewayRequest(), + 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_unary_rest_error(): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TargetVpnGatewaysClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TargetVpnGatewaysClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = TargetVpnGatewaysClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = TargetVpnGatewaysClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = TargetVpnGatewaysClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.TargetVpnGatewaysRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = TargetVpnGatewaysClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.TargetVpnGatewaysRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + 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): + transport = transports.TargetVpnGatewaysTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_target_vpn_gateways_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.compute_v1.services.target_vpn_gateways.transports.TargetVpnGatewaysTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.TargetVpnGatewaysTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "aggregated_list", + "delete", + "get", + "insert", + "list", + "set_labels", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + 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 + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.compute_v1.services.target_vpn_gateways.transports.TargetVpnGatewaysTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.TargetVpnGatewaysTransport( + credentials_file="credentials.json", quota_project_id="octopus", ) load_creds.assert_called_once_with( @@ -3245,6 +3927,9 @@ def test_target_vpn_gateways_client_transport_session_collision(transport_name): session1 = client1.transport.list._session session2 = client2.transport.list._session assert session1 != session2 + session1 = client1.transport.set_labels._session + session2 = client2.transport.set_labels._session + assert session1 != session2 def test_common_billing_account_path(): diff --git a/tests/unit/gapic/compute_v1/test_url_maps.py b/tests/unit/gapic/compute_v1/test_url_maps.py index 2af4a6c05..7a63f6685 100644 --- a/tests/unit/gapic/compute_v1/test_url_maps.py +++ b/tests/unit/gapic/compute_v1/test_url_maps.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -737,7 +738,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMapsAggregatedList + post.return_value = compute.UrlMapsAggregatedList() client.aggregated_list( request, @@ -1117,7 +1118,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1413,7 +1414,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1703,7 +1704,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMap + post.return_value = compute.UrlMap() client.get( request, @@ -2187,7 +2188,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2821,7 +2822,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3321,7 +3322,7 @@ def test_invalidate_cache_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.invalidate_cache( request, @@ -3637,7 +3638,7 @@ def test_invalidate_cache_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.invalidate_cache_unary( request, @@ -3936,7 +3937,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMapList + post.return_value = compute.UrlMapList() client.list( request, @@ -4477,7 +4478,7 @@ def test_patch_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch( request, @@ -5119,7 +5120,7 @@ def test_patch_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.patch_unary( request, @@ -5783,7 +5784,7 @@ def test_update_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update( request, @@ -6425,7 +6426,7 @@ def test_update_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.update_unary( request, @@ -7053,7 +7054,7 @@ def test_validate_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.UrlMapsValidateResponse + post.return_value = compute.UrlMapsValidateResponse() client.validate( request, diff --git a/tests/unit/gapic/compute_v1/test_vpn_gateways.py b/tests/unit/gapic/compute_v1/test_vpn_gateways.py index 61600aa7d..0655e7c40 100644 --- a/tests/unit/gapic/compute_v1/test_vpn_gateways.py +++ b/tests/unit/gapic/compute_v1/test_vpn_gateways.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -744,7 +745,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnGatewayAggregatedList + post.return_value = compute.VpnGatewayAggregatedList() client.aggregated_list( request, @@ -1136,7 +1137,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1449,7 +1450,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1754,7 +1755,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnGateway + post.return_value = compute.VpnGateway() client.get( request, @@ -2044,7 +2045,7 @@ def test_get_status_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnGatewaysGetStatusResponse + post.return_value = compute.VpnGatewaysGetStatusResponse() client.get_status( request, @@ -2394,7 +2395,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2744,7 +2745,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -3072,7 +3073,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnGatewayList + post.return_value = compute.VpnGatewayList() client.list( request, @@ -3462,7 +3463,7 @@ def test_set_labels_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels( request, @@ -3791,7 +3792,7 @@ def test_set_labels_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.set_labels_unary( request, @@ -4099,7 +4100,7 @@ def test_test_iam_permissions_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.TestPermissionsResponse + post.return_value = compute.TestPermissionsResponse() client.test_iam_permissions( request, diff --git a/tests/unit/gapic/compute_v1/test_vpn_tunnels.py b/tests/unit/gapic/compute_v1/test_vpn_tunnels.py index 6be1bb2b1..da22ae5ea 100644 --- a/tests/unit/gapic/compute_v1/test_vpn_tunnels.py +++ b/tests/unit/gapic/compute_v1/test_vpn_tunnels.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -744,7 +745,7 @@ def test_aggregated_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnTunnelAggregatedList + post.return_value = compute.VpnTunnelAggregatedList() client.aggregated_list( request, @@ -1131,7 +1132,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete( request, @@ -1440,7 +1441,7 @@ def test_delete_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.delete_unary( request, @@ -1769,7 +1770,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnTunnel + post.return_value = compute.VpnTunnel() client.get( request, @@ -2127,7 +2128,7 @@ def test_insert_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert( request, @@ -2493,7 +2494,7 @@ def test_insert_unary_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.insert_unary( request, @@ -2831,7 +2832,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.VpnTunnelList + post.return_value = compute.VpnTunnelList() client.list( request, @@ -2988,149 +2989,830 @@ def test_list_rest_pager(transport: str = "rest"): assert page_.raw_page.next_page_token == token -def test_credentials_transport_error(): - # It is an error to provide credentials and a transport instance. - transport = transports.VpnTunnelsRestTransport( +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsVpnTunnelRequest, + dict, + ], +) +def test_set_labels_rest(request_type): + client = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - with pytest.raises(ValueError): - client = VpnTunnelsClient( - credentials=ga_credentials.AnonymousCredentials(), - transport=transport, - ) - # It is an error to provide a credentials file and a transport instance. - transport = transports.VpnTunnelsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = VpnTunnelsClient( - client_options={"credentials_file": "credentials.json"}, - 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) - # It is an error to provide an api_key and a transport instance. - transport = transports.VpnTunnelsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - options = client_options.ClientOptions() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = VpnTunnelsClient( - client_options=options, - transport=transport, + # Mock the http request call within the method and fake a response. + with mock.patch.object(type(client.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", ) - # It is an error to provide an api_key and a credential. - options = mock.Mock() - options.api_key = "api_key" - with pytest.raises(ValueError): - client = VpnTunnelsClient( - client_options=options, credentials=ga_credentials.AnonymousCredentials() - ) + # Wrap the value into a proper Response obj + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) - # It is an error to provide scopes and a transport instance. - transport = transports.VpnTunnelsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) - with pytest.raises(ValueError): - client = VpnTunnelsClient( - client_options={"scopes": ["1", "2"]}, - transport=transport, - ) + 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_transport_instance(): - # A client may be instantiated with a custom transport instance. - transport = transports.VpnTunnelsRestTransport( - credentials=ga_credentials.AnonymousCredentials(), +def test_set_labels_rest_required_fields( + request_type=compute.SetLabelsVpnTunnelRequest, +): + transport_class = transports.VpnTunnelsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_default_value_fields=False, + use_integers_for_enums=False, + ) ) - client = VpnTunnelsClient(transport=transport) - assert client.transport is transport + # verify fields with default values are dropped -@pytest.mark.parametrize( - "transport_class", - [ - transports.VpnTunnelsRestTransport, - ], -) -def test_transport_adc(transport_class): - # Test default credentials are used if not provided. - with mock.patch.object(google.auth, "default") as adc: - adc.return_value = (ga_credentials.AnonymousCredentials(), None) - transport_class() - adc.assert_called_once() + 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 -@pytest.mark.parametrize( - "transport_name", - [ - "rest", - ], -) -def test_transport_kind(transport_name): - transport = VpnTunnelsClient.get_transport_class(transport_name)( + 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 = VpnTunnelsClient( credentials=ga_credentials.AnonymousCredentials(), + transport="rest", ) - assert transport.kind == transport_name + 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result -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): - transport = transports.VpnTunnelsTransport( - credentials=ga_credentials.AnonymousCredentials(), - credentials_file="credentials.json", - ) + response_value = Response() + response_value.status_code = 200 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_return_value) -def test_vpn_tunnels_base_transport(): - # Instantiate the base transport. - with mock.patch( - "google.cloud.compute_v1.services.vpn_tunnels.transports.VpnTunnelsTransport.__init__" - ) as Transport: - Transport.return_value = None - transport = transports.VpnTunnelsTransport( - credentials=ga_credentials.AnonymousCredentials(), - ) + response_value._content = json_return_value.encode("UTF-8") + req.return_value = response_value - # Every method on the transport should just blindly - # raise NotImplementedError. - methods = ( - "aggregated_list", - "delete", - "get", - "insert", - "list", - ) - for method in methods: - with pytest.raises(NotImplementedError): - getattr(transport, method)(request=object()) + response = client.set_labels(request) - with pytest.raises(NotImplementedError): - transport.close() + expected_params = [] + actual_params = req.call_args.kwargs["params"] + assert expected_params == actual_params - # Catch all for all remaining methods and properties - remainder = [ - "kind", - ] - for r in remainder: - with pytest.raises(NotImplementedError): - getattr(transport, r)() +def test_set_labels_rest_unset_required_fields(): + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials + ) -def test_vpn_tunnels_base_transport_with_credentials_file(): - # Instantiate the base transport with a credentials file - with mock.patch.object( - google.auth, "load_credentials_from_file", autospec=True - ) as load_creds, mock.patch( - "google.cloud.compute_v1.services.vpn_tunnels.transports.VpnTunnelsTransport._prep_wrapped_messages" - ) as Transport: - Transport.return_value = None - load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) - transport = transports.VpnTunnelsTransport( - credentials_file="credentials.json", + 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.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_set_labels" + ) as post, mock.patch.object( + transports.VpnTunnelsRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsVpnTunnelRequest.pb( + compute.SetLabelsVpnTunnelRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsVpnTunnelRequest() + 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.SetLabelsVpnTunnelRequest +): + client = VpnTunnelsClient( + 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 = 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", + "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/vpnTunnels/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels( + compute.SetLabelsVpnTunnelRequest(), + 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 = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +@pytest.mark.parametrize( + "request_type", + [ + compute.SetLabelsVpnTunnelRequest, + dict, + ], +) +def test_set_labels_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", "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.SetLabelsVpnTunnelRequest, +): + transport_class = transports.VpnTunnelsRestTransport + + request_init = {} + request_init["project"] = "" + request_init["region"] = "" + request_init["resource"] = "" + request = request_type(**request_init) + pb_request = request_type.pb(request) + jsonified_request = json.loads( + json_format.MessageToJson( + pb_request, + including_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 = 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. + pb_request = request_type.pb(request) + transcode_result = { + "uri": "v1/sample_method", + "method": "post", + "query_params": pb_request, + } + transcode_result["body"] = pb_request + transcode.return_value = transcode_result + + response_value = Response() + response_value.status_code = 200 + + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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.VpnTunnelsRestTransport( + 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_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_set_labels" + ) as post, mock.patch.object( + transports.VpnTunnelsRestInterceptor, "pre_set_labels" + ) as pre: + pre.assert_not_called() + post.assert_not_called() + pb_message = compute.SetLabelsVpnTunnelRequest.pb( + compute.SetLabelsVpnTunnelRequest() + ) + transcode.return_value = { + "method": "post", + "uri": "my_uri", + "body": pb_message, + "query_params": pb_message, + } + + req.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.SetLabelsVpnTunnelRequest() + 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.SetLabelsVpnTunnelRequest +): + client = VpnTunnelsClient( + 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_unary(request) + + +def test_set_labels_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", + "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 + pb_return_value = compute.Operation.pb(return_value) + json_return_value = json_format.MessageToJson(pb_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}/regions/{region}/vpnTunnels/{resource}/setLabels" + % client.transport._host, + args[1], + ) + + +def test_set_labels_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.set_labels_unary( + compute.SetLabelsVpnTunnelRequest(), + 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_unary_rest_error(): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), transport="rest" + ) + + +def test_credentials_transport_error(): + # It is an error to provide credentials and a transport instance. + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = VpnTunnelsClient( + credentials=ga_credentials.AnonymousCredentials(), + transport=transport, + ) + + # It is an error to provide a credentials file and a transport instance. + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = VpnTunnelsClient( + client_options={"credentials_file": "credentials.json"}, + transport=transport, + ) + + # It is an error to provide an api_key and a transport instance. + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + options = client_options.ClientOptions() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = VpnTunnelsClient( + client_options=options, + transport=transport, + ) + + # It is an error to provide an api_key and a credential. + options = mock.Mock() + options.api_key = "api_key" + with pytest.raises(ValueError): + client = VpnTunnelsClient( + client_options=options, credentials=ga_credentials.AnonymousCredentials() + ) + + # It is an error to provide scopes and a transport instance. + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + with pytest.raises(ValueError): + client = VpnTunnelsClient( + client_options={"scopes": ["1", "2"]}, + transport=transport, + ) + + +def test_transport_instance(): + # A client may be instantiated with a custom transport instance. + transport = transports.VpnTunnelsRestTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + client = VpnTunnelsClient(transport=transport) + assert client.transport is transport + + +@pytest.mark.parametrize( + "transport_class", + [ + transports.VpnTunnelsRestTransport, + ], +) +def test_transport_adc(transport_class): + # Test default credentials are used if not provided. + with mock.patch.object(google.auth, "default") as adc: + adc.return_value = (ga_credentials.AnonymousCredentials(), None) + 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): + transport = transports.VpnTunnelsTransport( + credentials=ga_credentials.AnonymousCredentials(), + credentials_file="credentials.json", + ) + + +def test_vpn_tunnels_base_transport(): + # Instantiate the base transport. + with mock.patch( + "google.cloud.compute_v1.services.vpn_tunnels.transports.VpnTunnelsTransport.__init__" + ) as Transport: + Transport.return_value = None + transport = transports.VpnTunnelsTransport( + credentials=ga_credentials.AnonymousCredentials(), + ) + + # Every method on the transport should just blindly + # raise NotImplementedError. + methods = ( + "aggregated_list", + "delete", + "get", + "insert", + "list", + "set_labels", + ) + for method in methods: + with pytest.raises(NotImplementedError): + getattr(transport, method)(request=object()) + + 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 + with mock.patch.object( + google.auth, "load_credentials_from_file", autospec=True + ) as load_creds, mock.patch( + "google.cloud.compute_v1.services.vpn_tunnels.transports.VpnTunnelsTransport._prep_wrapped_messages" + ) as Transport: + Transport.return_value = None + load_creds.return_value = (ga_credentials.AnonymousCredentials(), None) + transport = transports.VpnTunnelsTransport( + credentials_file="credentials.json", quota_project_id="octopus", ) load_creds.assert_called_once_with( @@ -3255,6 +3937,9 @@ def test_vpn_tunnels_client_transport_session_collision(transport_name): session1 = client1.transport.list._session session2 = client2.transport.list._session assert session1 != session2 + session1 = client1.transport.set_labels._session + session2 = client2.transport.set_labels._session + assert session1 != session2 def test_common_billing_account_path(): diff --git a/tests/unit/gapic/compute_v1/test_zone_operations.py b/tests/unit/gapic/compute_v1/test_zone_operations.py index 43211c531..59163764a 100644 --- a/tests/unit/gapic/compute_v1/test_zone_operations.py +++ b/tests/unit/gapic/compute_v1/test_zone_operations.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -732,7 +733,7 @@ def test_delete_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.DeleteZoneOperationResponse + post.return_value = compute.DeleteZoneOperationResponse() client.delete( request, @@ -1063,7 +1064,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.get( request, @@ -1373,7 +1374,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.OperationList + post.return_value = compute.OperationList() client.list( request, @@ -1753,7 +1754,7 @@ def test_wait_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Operation + post.return_value = compute.Operation() client.wait( request, diff --git a/tests/unit/gapic/compute_v1/test_zones.py b/tests/unit/gapic/compute_v1/test_zones.py index 87c9dcf6d..67b716d25 100644 --- a/tests/unit/gapic/compute_v1/test_zones.py +++ b/tests/unit/gapic/compute_v1/test_zones.py @@ -18,8 +18,8 @@ # try/except added for compatibility with python < 3.8 try: from unittest import mock - from unittest.mock import AsyncMock -except ImportError: + from unittest.mock import AsyncMock # pragma: NO COVER +except ImportError: # pragma: NO COVER import mock import grpc @@ -30,10 +30,11 @@ import math import pytest from proto.marshal.rules.dates import DurationRule, TimestampRule - +from proto.marshal.rules import wrappers from requests import Response from requests import Request, PreparedRequest from requests.sessions import Session +from google.protobuf import json_format from google.api_core import client_options from google.api_core import exceptions as core_exceptions @@ -726,7 +727,7 @@ def test_get_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.Zone + post.return_value = compute.Zone() client.get( request, @@ -1014,7 +1015,7 @@ def test_list_rest_interceptors(null_interceptor): ("cephalopod", "squid"), ] pre.return_value = request, metadata - post.return_value = compute.ZoneList + post.return_value = compute.ZoneList() client.list( request,