diff --git a/packages/google-cloud-trace/google/cloud/trace/gapic_version.py b/packages/google-cloud-trace/google/cloud/trace/gapic_version.py index cf18a472a8a2..558c8aab67c5 100644 --- a/packages/google-cloud-trace/google/cloud/trace/gapic_version.py +++ b/packages/google-cloud-trace/google/cloud/trace/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-trace/google/cloud/trace_v1/gapic_version.py b/packages/google-cloud-trace/google/cloud/trace_v1/gapic_version.py index cf18a472a8a2..558c8aab67c5 100644 --- a/packages/google-cloud-trace/google/cloud/trace_v1/gapic_version.py +++ b/packages/google-cloud-trace/google/cloud/trace_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-trace/google/cloud/trace_v1/services/trace_service/client.py b/packages/google-cloud-trace/google/cloud/trace_v1/services/trace_service/client.py index 41d1ed054d6a..a2220e5edc46 100644 --- a/packages/google-cloud-trace/google/cloud/trace_v1/services/trace_service/client.py +++ b/packages/google-cloud-trace/google/cloud/trace_v1/services/trace_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -466,6 +468,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-trace/google/cloud/trace_v1/services/trace_service/transports/rest.py b/packages/google-cloud-trace/google/cloud/trace_v1/services/trace_service/transports/rest.py index aa9d715a6019..f4c18f00690c 100644 --- a/packages/google-cloud-trace/google/cloud/trace_v1/services/trace_service/transports/rest.py +++ b/packages/google-cloud-trace/google/cloud/trace_v1/services/trace_service/transports/rest.py @@ -110,12 +110,33 @@ def pre_get_trace( def post_get_trace(self, response: trace.Trace) -> trace.Trace: """Post-rpc interceptor for get_trace - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_trace_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TraceService server but before - it is returned to user code. + it is returned to user code. This `post_get_trace` interceptor runs + before the `post_get_trace_with_metadata` interceptor. """ return response + def post_get_trace_with_metadata( + self, response: trace.Trace, metadata: Sequence[Tuple[str, Union[str, bytes]]] + ) -> Tuple[trace.Trace, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_trace + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TraceService server but before it is returned to user code. + + We recommend only using this `post_get_trace_with_metadata` + interceptor in new development instead of the `post_get_trace` interceptor. + When both interceptors are used, this `post_get_trace_with_metadata` interceptor runs after the + `post_get_trace` interceptor. The (possibly modified) response returned by + `post_get_trace` will be passed to + `post_get_trace_with_metadata`. + """ + return response, metadata + def pre_list_traces( self, request: trace.ListTracesRequest, @@ -133,12 +154,35 @@ def post_list_traces( ) -> trace.ListTracesResponse: """Post-rpc interceptor for list_traces - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_traces_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TraceService server but before - it is returned to user code. + it is returned to user code. This `post_list_traces` interceptor runs + before the `post_list_traces_with_metadata` interceptor. """ return response + def post_list_traces_with_metadata( + self, + response: trace.ListTracesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[trace.ListTracesResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_traces + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TraceService server but before it is returned to user code. + + We recommend only using this `post_list_traces_with_metadata` + interceptor in new development instead of the `post_list_traces` interceptor. + When both interceptors are used, this `post_list_traces_with_metadata` interceptor runs after the + `post_list_traces` interceptor. The (possibly modified) response returned by + `post_list_traces` will be passed to + `post_list_traces_with_metadata`. + """ + return response, metadata + def pre_patch_traces( self, request: trace.PatchTracesRequest, @@ -367,6 +411,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_trace(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_trace_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -512,6 +560,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_traces(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_traces_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-trace/google/cloud/trace_v2/gapic_version.py b/packages/google-cloud-trace/google/cloud/trace_v2/gapic_version.py index cf18a472a8a2..558c8aab67c5 100644 --- a/packages/google-cloud-trace/google/cloud/trace_v2/gapic_version.py +++ b/packages/google-cloud-trace/google/cloud/trace_v2/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-trace/google/cloud/trace_v2/services/trace_service/client.py b/packages/google-cloud-trace/google/cloud/trace_v2/services/trace_service/client.py index 06424cdf1fd6..158902374934 100644 --- a/packages/google-cloud-trace/google/cloud/trace_v2/services/trace_service/client.py +++ b/packages/google-cloud-trace/google/cloud/trace_v2/services/trace_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -493,6 +495,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-trace/google/cloud/trace_v2/services/trace_service/transports/rest.py b/packages/google-cloud-trace/google/cloud/trace_v2/services/trace_service/transports/rest.py index 7bf5d092ee99..60c003dfe68c 100644 --- a/packages/google-cloud-trace/google/cloud/trace_v2/services/trace_service/transports/rest.py +++ b/packages/google-cloud-trace/google/cloud/trace_v2/services/trace_service/transports/rest.py @@ -112,12 +112,33 @@ def pre_create_span( def post_create_span(self, response: trace.Span) -> trace.Span: """Post-rpc interceptor for create_span - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_span_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TraceService server but before - it is returned to user code. + it is returned to user code. This `post_create_span` interceptor runs + before the `post_create_span_with_metadata` interceptor. """ return response + def post_create_span_with_metadata( + self, response: trace.Span, metadata: Sequence[Tuple[str, Union[str, bytes]]] + ) -> Tuple[trace.Span, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_span + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TraceService server but before it is returned to user code. + + We recommend only using this `post_create_span_with_metadata` + interceptor in new development instead of the `post_create_span` interceptor. + When both interceptors are used, this `post_create_span_with_metadata` interceptor runs after the + `post_create_span` interceptor. The (possibly modified) response returned by + `post_create_span` will be passed to + `post_create_span_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class TraceServiceRestStub: @@ -476,6 +497,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_span(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_span_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-trace/samples/generated_samples/snippet_metadata_google.devtools.cloudtrace.v1.json b/packages/google-cloud-trace/samples/generated_samples/snippet_metadata_google.devtools.cloudtrace.v1.json index c00a9c80f677..a4f20614ce5b 100644 --- a/packages/google-cloud-trace/samples/generated_samples/snippet_metadata_google.devtools.cloudtrace.v1.json +++ b/packages/google-cloud-trace/samples/generated_samples/snippet_metadata_google.devtools.cloudtrace.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-trace", - "version": "1.15.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-trace/samples/generated_samples/snippet_metadata_google.devtools.cloudtrace.v2.json b/packages/google-cloud-trace/samples/generated_samples/snippet_metadata_google.devtools.cloudtrace.v2.json index e0831c1663d0..b7d6fcf9f839 100644 --- a/packages/google-cloud-trace/samples/generated_samples/snippet_metadata_google.devtools.cloudtrace.v2.json +++ b/packages/google-cloud-trace/samples/generated_samples/snippet_metadata_google.devtools.cloudtrace.v2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-trace", - "version": "1.15.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-trace/tests/unit/gapic/trace_v1/test_trace_service.py b/packages/google-cloud-trace/tests/unit/gapic/trace_v1/test_trace_service.py index 0edd38cff7b2..de9d5bb39e0e 100644 --- a/packages/google-cloud-trace/tests/unit/gapic/trace_v1/test_trace_service.py +++ b/packages/google-cloud-trace/tests/unit/gapic/trace_v1/test_trace_service.py @@ -61,6 +61,13 @@ ) from google.cloud.trace_v1.types import trace +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -304,6 +311,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = TraceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = TraceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -3198,10 +3248,13 @@ def test_list_traces_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TraceServiceRestInterceptor, "post_list_traces" ) as post, mock.patch.object( + transports.TraceServiceRestInterceptor, "post_list_traces_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TraceServiceRestInterceptor, "pre_list_traces" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = trace.ListTracesRequest.pb(trace.ListTracesRequest()) transcode.return_value = { "method": "post", @@ -3223,6 +3276,7 @@ def test_list_traces_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = trace.ListTracesResponse() + post_with_metadata.return_value = trace.ListTracesResponse(), metadata client.list_traces( request, @@ -3234,6 +3288,7 @@ def test_list_traces_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_trace_rest_bad_request(request_type=trace.GetTraceRequest): @@ -3318,10 +3373,13 @@ def test_get_trace_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TraceServiceRestInterceptor, "post_get_trace" ) as post, mock.patch.object( + transports.TraceServiceRestInterceptor, "post_get_trace_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TraceServiceRestInterceptor, "pre_get_trace" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = trace.GetTraceRequest.pb(trace.GetTraceRequest()) transcode.return_value = { "method": "post", @@ -3343,6 +3401,7 @@ def test_get_trace_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = trace.Trace() + post_with_metadata.return_value = trace.Trace(), metadata client.get_trace( request, @@ -3354,6 +3413,7 @@ def test_get_trace_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_patch_traces_rest_bad_request(request_type=trace.PatchTracesRequest): diff --git a/packages/google-cloud-trace/tests/unit/gapic/trace_v2/test_trace_service.py b/packages/google-cloud-trace/tests/unit/gapic/trace_v2/test_trace_service.py index 58b8e3ab660b..81e80d768ceb 100644 --- a/packages/google-cloud-trace/tests/unit/gapic/trace_v2/test_trace_service.py +++ b/packages/google-cloud-trace/tests/unit/gapic/trace_v2/test_trace_service.py @@ -63,6 +63,13 @@ ) from google.cloud.trace_v2.types import trace, tracing +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -306,6 +313,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = TraceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = TraceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -2373,10 +2423,13 @@ def test_create_span_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TraceServiceRestInterceptor, "post_create_span" ) as post, mock.patch.object( + transports.TraceServiceRestInterceptor, "post_create_span_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TraceServiceRestInterceptor, "pre_create_span" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = trace.Span.pb(trace.Span()) transcode.return_value = { "method": "post", @@ -2398,6 +2451,7 @@ def test_create_span_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = trace.Span() + post_with_metadata.return_value = trace.Span(), metadata client.create_span( request, @@ -2409,6 +2463,7 @@ def test_create_span_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-translate/google/cloud/translate/gapic_version.py b/packages/google-cloud-translate/google/cloud/translate/gapic_version.py index 420469d05091..558c8aab67c5 100644 --- a/packages/google-cloud-translate/google/cloud/translate/gapic_version.py +++ b/packages/google-cloud-translate/google/cloud/translate/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.19.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-translate/google/cloud/translate_v3/gapic_version.py b/packages/google-cloud-translate/google/cloud/translate_v3/gapic_version.py index 420469d05091..558c8aab67c5 100644 --- a/packages/google-cloud-translate/google/cloud/translate_v3/gapic_version.py +++ b/packages/google-cloud-translate/google/cloud/translate_v3/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.19.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-translate/google/cloud/translate_v3/services/translation_service/client.py b/packages/google-cloud-translate/google/cloud/translate_v3/services/translation_service/client.py index f42d0570a00a..3d324cc88239 100644 --- a/packages/google-cloud-translate/google/cloud/translate_v3/services/translation_service/client.py +++ b/packages/google-cloud-translate/google/cloud/translate_v3/services/translation_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -663,6 +665,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -5634,16 +5663,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -5689,16 +5722,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -5861,16 +5898,20 @@ def wait_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_location( self, @@ -5916,16 +5957,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -5971,16 +6016,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-translate/google/cloud/translate_v3/services/translation_service/transports/rest.py b/packages/google-cloud-translate/google/cloud/translate_v3/services/translation_service/transports/rest.py index 06abe7a126fb..31795d39bfc4 100644 --- a/packages/google-cloud-translate/google/cloud/translate_v3/services/translation_service/transports/rest.py +++ b/packages/google-cloud-translate/google/cloud/translate_v3/services/translation_service/transports/rest.py @@ -395,12 +395,37 @@ def post_adaptive_mt_translate( ) -> adaptive_mt.AdaptiveMtTranslateResponse: """Post-rpc interceptor for adaptive_mt_translate - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_adaptive_mt_translate_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_adaptive_mt_translate` interceptor runs + before the `post_adaptive_mt_translate_with_metadata` interceptor. """ return response + def post_adaptive_mt_translate_with_metadata( + self, + response: adaptive_mt.AdaptiveMtTranslateResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + adaptive_mt.AdaptiveMtTranslateResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for adaptive_mt_translate + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_adaptive_mt_translate_with_metadata` + interceptor in new development instead of the `post_adaptive_mt_translate` interceptor. + When both interceptors are used, this `post_adaptive_mt_translate_with_metadata` interceptor runs after the + `post_adaptive_mt_translate` interceptor. The (possibly modified) response returned by + `post_adaptive_mt_translate` will be passed to + `post_adaptive_mt_translate_with_metadata`. + """ + return response, metadata + def pre_batch_translate_document( self, request: translation_service.BatchTranslateDocumentRequest, @@ -421,12 +446,35 @@ def post_batch_translate_document( ) -> operations_pb2.Operation: """Post-rpc interceptor for batch_translate_document - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_translate_document_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_batch_translate_document` interceptor runs + before the `post_batch_translate_document_with_metadata` interceptor. """ return response + def post_batch_translate_document_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for batch_translate_document + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_batch_translate_document_with_metadata` + interceptor in new development instead of the `post_batch_translate_document` interceptor. + When both interceptors are used, this `post_batch_translate_document_with_metadata` interceptor runs after the + `post_batch_translate_document` interceptor. The (possibly modified) response returned by + `post_batch_translate_document` will be passed to + `post_batch_translate_document_with_metadata`. + """ + return response, metadata + def pre_batch_translate_text( self, request: translation_service.BatchTranslateTextRequest, @@ -447,12 +495,35 @@ def post_batch_translate_text( ) -> operations_pb2.Operation: """Post-rpc interceptor for batch_translate_text - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_translate_text_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_batch_translate_text` interceptor runs + before the `post_batch_translate_text_with_metadata` interceptor. """ return response + def post_batch_translate_text_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for batch_translate_text + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_batch_translate_text_with_metadata` + interceptor in new development instead of the `post_batch_translate_text` interceptor. + When both interceptors are used, this `post_batch_translate_text_with_metadata` interceptor runs after the + `post_batch_translate_text` interceptor. The (possibly modified) response returned by + `post_batch_translate_text` will be passed to + `post_batch_translate_text_with_metadata`. + """ + return response, metadata + def pre_create_adaptive_mt_dataset( self, request: adaptive_mt.CreateAdaptiveMtDatasetRequest, @@ -473,12 +544,35 @@ def post_create_adaptive_mt_dataset( ) -> adaptive_mt.AdaptiveMtDataset: """Post-rpc interceptor for create_adaptive_mt_dataset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_adaptive_mt_dataset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_create_adaptive_mt_dataset` interceptor runs + before the `post_create_adaptive_mt_dataset_with_metadata` interceptor. """ return response + def post_create_adaptive_mt_dataset_with_metadata( + self, + response: adaptive_mt.AdaptiveMtDataset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[adaptive_mt.AdaptiveMtDataset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_adaptive_mt_dataset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_create_adaptive_mt_dataset_with_metadata` + interceptor in new development instead of the `post_create_adaptive_mt_dataset` interceptor. + When both interceptors are used, this `post_create_adaptive_mt_dataset_with_metadata` interceptor runs after the + `post_create_adaptive_mt_dataset` interceptor. The (possibly modified) response returned by + `post_create_adaptive_mt_dataset` will be passed to + `post_create_adaptive_mt_dataset_with_metadata`. + """ + return response, metadata + def pre_create_dataset( self, request: automl_translation.CreateDatasetRequest, @@ -498,12 +592,35 @@ def post_create_dataset( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_dataset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_dataset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_create_dataset` interceptor runs + before the `post_create_dataset_with_metadata` interceptor. """ return response + def post_create_dataset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_dataset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_create_dataset_with_metadata` + interceptor in new development instead of the `post_create_dataset` interceptor. + When both interceptors are used, this `post_create_dataset_with_metadata` interceptor runs after the + `post_create_dataset` interceptor. The (possibly modified) response returned by + `post_create_dataset` will be passed to + `post_create_dataset_with_metadata`. + """ + return response, metadata + def pre_create_glossary( self, request: translation_service.CreateGlossaryRequest, @@ -524,12 +641,35 @@ def post_create_glossary( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_glossary - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_glossary_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_create_glossary` interceptor runs + before the `post_create_glossary_with_metadata` interceptor. """ return response + def post_create_glossary_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_glossary + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_create_glossary_with_metadata` + interceptor in new development instead of the `post_create_glossary` interceptor. + When both interceptors are used, this `post_create_glossary_with_metadata` interceptor runs after the + `post_create_glossary` interceptor. The (possibly modified) response returned by + `post_create_glossary` will be passed to + `post_create_glossary_with_metadata`. + """ + return response, metadata + def pre_create_glossary_entry( self, request: translation_service.CreateGlossaryEntryRequest, @@ -550,12 +690,35 @@ def post_create_glossary_entry( ) -> common.GlossaryEntry: """Post-rpc interceptor for create_glossary_entry - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_glossary_entry_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_create_glossary_entry` interceptor runs + before the `post_create_glossary_entry_with_metadata` interceptor. """ return response + def post_create_glossary_entry_with_metadata( + self, + response: common.GlossaryEntry, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[common.GlossaryEntry, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_glossary_entry + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_create_glossary_entry_with_metadata` + interceptor in new development instead of the `post_create_glossary_entry` interceptor. + When both interceptors are used, this `post_create_glossary_entry_with_metadata` interceptor runs after the + `post_create_glossary_entry` interceptor. The (possibly modified) response returned by + `post_create_glossary_entry` will be passed to + `post_create_glossary_entry_with_metadata`. + """ + return response, metadata + def pre_create_model( self, request: automl_translation.CreateModelRequest, @@ -575,12 +738,35 @@ def post_create_model( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_model - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_model_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_create_model` interceptor runs + before the `post_create_model_with_metadata` interceptor. """ return response + def post_create_model_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_model + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_create_model_with_metadata` + interceptor in new development instead of the `post_create_model` interceptor. + When both interceptors are used, this `post_create_model_with_metadata` interceptor runs after the + `post_create_model` interceptor. The (possibly modified) response returned by + `post_create_model` will be passed to + `post_create_model_with_metadata`. + """ + return response, metadata + def pre_delete_adaptive_mt_dataset( self, request: adaptive_mt.DeleteAdaptiveMtDatasetRequest, @@ -629,12 +815,35 @@ def post_delete_dataset( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_dataset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_dataset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_delete_dataset` interceptor runs + before the `post_delete_dataset_with_metadata` interceptor. """ return response + def post_delete_dataset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_dataset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_delete_dataset_with_metadata` + interceptor in new development instead of the `post_delete_dataset` interceptor. + When both interceptors are used, this `post_delete_dataset_with_metadata` interceptor runs after the + `post_delete_dataset` interceptor. The (possibly modified) response returned by + `post_delete_dataset` will be passed to + `post_delete_dataset_with_metadata`. + """ + return response, metadata + def pre_delete_glossary( self, request: translation_service.DeleteGlossaryRequest, @@ -655,12 +864,35 @@ def post_delete_glossary( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_glossary - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_glossary_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_delete_glossary` interceptor runs + before the `post_delete_glossary_with_metadata` interceptor. """ return response + def post_delete_glossary_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_glossary + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_delete_glossary_with_metadata` + interceptor in new development instead of the `post_delete_glossary` interceptor. + When both interceptors are used, this `post_delete_glossary_with_metadata` interceptor runs after the + `post_delete_glossary` interceptor. The (possibly modified) response returned by + `post_delete_glossary` will be passed to + `post_delete_glossary_with_metadata`. + """ + return response, metadata + def pre_delete_glossary_entry( self, request: translation_service.DeleteGlossaryEntryRequest, @@ -695,12 +927,35 @@ def post_delete_model( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_model - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_model_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_delete_model` interceptor runs + before the `post_delete_model_with_metadata` interceptor. """ return response + def post_delete_model_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_model + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_delete_model_with_metadata` + interceptor in new development instead of the `post_delete_model` interceptor. + When both interceptors are used, this `post_delete_model_with_metadata` interceptor runs after the + `post_delete_model` interceptor. The (possibly modified) response returned by + `post_delete_model` will be passed to + `post_delete_model_with_metadata`. + """ + return response, metadata + def pre_detect_language( self, request: translation_service.DetectLanguageRequest, @@ -721,12 +976,38 @@ def post_detect_language( ) -> translation_service.DetectLanguageResponse: """Post-rpc interceptor for detect_language - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_detect_language_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_detect_language` interceptor runs + before the `post_detect_language_with_metadata` interceptor. """ return response + def post_detect_language_with_metadata( + self, + response: translation_service.DetectLanguageResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.DetectLanguageResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for detect_language + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_detect_language_with_metadata` + interceptor in new development instead of the `post_detect_language` interceptor. + When both interceptors are used, this `post_detect_language_with_metadata` interceptor runs after the + `post_detect_language` interceptor. The (possibly modified) response returned by + `post_detect_language` will be passed to + `post_detect_language_with_metadata`. + """ + return response, metadata + def pre_export_data( self, request: automl_translation.ExportDataRequest, @@ -746,12 +1027,35 @@ def post_export_data( ) -> operations_pb2.Operation: """Post-rpc interceptor for export_data - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_export_data_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_export_data` interceptor runs + before the `post_export_data_with_metadata` interceptor. """ return response + def post_export_data_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for export_data + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_export_data_with_metadata` + interceptor in new development instead of the `post_export_data` interceptor. + When both interceptors are used, this `post_export_data_with_metadata` interceptor runs after the + `post_export_data` interceptor. The (possibly modified) response returned by + `post_export_data` will be passed to + `post_export_data_with_metadata`. + """ + return response, metadata + def pre_get_adaptive_mt_dataset( self, request: adaptive_mt.GetAdaptiveMtDatasetRequest, @@ -771,12 +1075,35 @@ def post_get_adaptive_mt_dataset( ) -> adaptive_mt.AdaptiveMtDataset: """Post-rpc interceptor for get_adaptive_mt_dataset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_adaptive_mt_dataset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_adaptive_mt_dataset` interceptor runs + before the `post_get_adaptive_mt_dataset_with_metadata` interceptor. """ return response + def post_get_adaptive_mt_dataset_with_metadata( + self, + response: adaptive_mt.AdaptiveMtDataset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[adaptive_mt.AdaptiveMtDataset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_adaptive_mt_dataset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_adaptive_mt_dataset_with_metadata` + interceptor in new development instead of the `post_get_adaptive_mt_dataset` interceptor. + When both interceptors are used, this `post_get_adaptive_mt_dataset_with_metadata` interceptor runs after the + `post_get_adaptive_mt_dataset` interceptor. The (possibly modified) response returned by + `post_get_adaptive_mt_dataset` will be passed to + `post_get_adaptive_mt_dataset_with_metadata`. + """ + return response, metadata + def pre_get_adaptive_mt_file( self, request: adaptive_mt.GetAdaptiveMtFileRequest, @@ -796,12 +1123,35 @@ def post_get_adaptive_mt_file( ) -> adaptive_mt.AdaptiveMtFile: """Post-rpc interceptor for get_adaptive_mt_file - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_adaptive_mt_file_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_adaptive_mt_file` interceptor runs + before the `post_get_adaptive_mt_file_with_metadata` interceptor. """ return response + def post_get_adaptive_mt_file_with_metadata( + self, + response: adaptive_mt.AdaptiveMtFile, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[adaptive_mt.AdaptiveMtFile, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_adaptive_mt_file + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_adaptive_mt_file_with_metadata` + interceptor in new development instead of the `post_get_adaptive_mt_file` interceptor. + When both interceptors are used, this `post_get_adaptive_mt_file_with_metadata` interceptor runs after the + `post_get_adaptive_mt_file` interceptor. The (possibly modified) response returned by + `post_get_adaptive_mt_file` will be passed to + `post_get_adaptive_mt_file_with_metadata`. + """ + return response, metadata + def pre_get_dataset( self, request: automl_translation.GetDatasetRequest, @@ -821,12 +1171,35 @@ def post_get_dataset( ) -> automl_translation.Dataset: """Post-rpc interceptor for get_dataset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_dataset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_dataset` interceptor runs + before the `post_get_dataset_with_metadata` interceptor. """ return response + def post_get_dataset_with_metadata( + self, + response: automl_translation.Dataset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[automl_translation.Dataset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_dataset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_dataset_with_metadata` + interceptor in new development instead of the `post_get_dataset` interceptor. + When both interceptors are used, this `post_get_dataset_with_metadata` interceptor runs after the + `post_get_dataset` interceptor. The (possibly modified) response returned by + `post_get_dataset` will be passed to + `post_get_dataset_with_metadata`. + """ + return response, metadata + def pre_get_glossary( self, request: translation_service.GetGlossaryRequest, @@ -846,12 +1219,35 @@ def post_get_glossary( ) -> translation_service.Glossary: """Post-rpc interceptor for get_glossary - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_glossary_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_glossary` interceptor runs + before the `post_get_glossary_with_metadata` interceptor. """ return response + def post_get_glossary_with_metadata( + self, + response: translation_service.Glossary, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[translation_service.Glossary, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_glossary + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_glossary_with_metadata` + interceptor in new development instead of the `post_get_glossary` interceptor. + When both interceptors are used, this `post_get_glossary_with_metadata` interceptor runs after the + `post_get_glossary` interceptor. The (possibly modified) response returned by + `post_get_glossary` will be passed to + `post_get_glossary_with_metadata`. + """ + return response, metadata + def pre_get_glossary_entry( self, request: translation_service.GetGlossaryEntryRequest, @@ -872,12 +1268,35 @@ def post_get_glossary_entry( ) -> common.GlossaryEntry: """Post-rpc interceptor for get_glossary_entry - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_glossary_entry_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_glossary_entry` interceptor runs + before the `post_get_glossary_entry_with_metadata` interceptor. """ return response + def post_get_glossary_entry_with_metadata( + self, + response: common.GlossaryEntry, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[common.GlossaryEntry, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_glossary_entry + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_glossary_entry_with_metadata` + interceptor in new development instead of the `post_get_glossary_entry` interceptor. + When both interceptors are used, this `post_get_glossary_entry_with_metadata` interceptor runs after the + `post_get_glossary_entry` interceptor. The (possibly modified) response returned by + `post_get_glossary_entry` will be passed to + `post_get_glossary_entry_with_metadata`. + """ + return response, metadata + def pre_get_model( self, request: automl_translation.GetModelRequest, @@ -897,12 +1316,35 @@ def post_get_model( ) -> automl_translation.Model: """Post-rpc interceptor for get_model - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_model_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_model` interceptor runs + before the `post_get_model_with_metadata` interceptor. """ return response + def post_get_model_with_metadata( + self, + response: automl_translation.Model, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[automl_translation.Model, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_model + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_model_with_metadata` + interceptor in new development instead of the `post_get_model` interceptor. + When both interceptors are used, this `post_get_model_with_metadata` interceptor runs after the + `post_get_model` interceptor. The (possibly modified) response returned by + `post_get_model` will be passed to + `post_get_model_with_metadata`. + """ + return response, metadata + def pre_get_supported_languages( self, request: translation_service.GetSupportedLanguagesRequest, @@ -923,12 +1365,37 @@ def post_get_supported_languages( ) -> translation_service.SupportedLanguages: """Post-rpc interceptor for get_supported_languages - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_supported_languages_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_supported_languages` interceptor runs + before the `post_get_supported_languages_with_metadata` interceptor. """ return response + def post_get_supported_languages_with_metadata( + self, + response: translation_service.SupportedLanguages, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.SupportedLanguages, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_supported_languages + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_supported_languages_with_metadata` + interceptor in new development instead of the `post_get_supported_languages` interceptor. + When both interceptors are used, this `post_get_supported_languages_with_metadata` interceptor runs after the + `post_get_supported_languages` interceptor. The (possibly modified) response returned by + `post_get_supported_languages` will be passed to + `post_get_supported_languages_with_metadata`. + """ + return response, metadata + def pre_import_adaptive_mt_file( self, request: adaptive_mt.ImportAdaptiveMtFileRequest, @@ -948,12 +1415,38 @@ def post_import_adaptive_mt_file( ) -> adaptive_mt.ImportAdaptiveMtFileResponse: """Post-rpc interceptor for import_adaptive_mt_file - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_import_adaptive_mt_file_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_import_adaptive_mt_file` interceptor runs + before the `post_import_adaptive_mt_file_with_metadata` interceptor. """ return response + def post_import_adaptive_mt_file_with_metadata( + self, + response: adaptive_mt.ImportAdaptiveMtFileResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + adaptive_mt.ImportAdaptiveMtFileResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for import_adaptive_mt_file + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_import_adaptive_mt_file_with_metadata` + interceptor in new development instead of the `post_import_adaptive_mt_file` interceptor. + When both interceptors are used, this `post_import_adaptive_mt_file_with_metadata` interceptor runs after the + `post_import_adaptive_mt_file` interceptor. The (possibly modified) response returned by + `post_import_adaptive_mt_file` will be passed to + `post_import_adaptive_mt_file_with_metadata`. + """ + return response, metadata + def pre_import_data( self, request: automl_translation.ImportDataRequest, @@ -973,12 +1466,35 @@ def post_import_data( ) -> operations_pb2.Operation: """Post-rpc interceptor for import_data - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_import_data_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_import_data` interceptor runs + before the `post_import_data_with_metadata` interceptor. """ return response + def post_import_data_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for import_data + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_import_data_with_metadata` + interceptor in new development instead of the `post_import_data` interceptor. + When both interceptors are used, this `post_import_data_with_metadata` interceptor runs after the + `post_import_data` interceptor. The (possibly modified) response returned by + `post_import_data` will be passed to + `post_import_data_with_metadata`. + """ + return response, metadata + def pre_list_adaptive_mt_datasets( self, request: adaptive_mt.ListAdaptiveMtDatasetsRequest, @@ -999,12 +1515,38 @@ def post_list_adaptive_mt_datasets( ) -> adaptive_mt.ListAdaptiveMtDatasetsResponse: """Post-rpc interceptor for list_adaptive_mt_datasets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_adaptive_mt_datasets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_adaptive_mt_datasets` interceptor runs + before the `post_list_adaptive_mt_datasets_with_metadata` interceptor. """ return response + def post_list_adaptive_mt_datasets_with_metadata( + self, + response: adaptive_mt.ListAdaptiveMtDatasetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + adaptive_mt.ListAdaptiveMtDatasetsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_adaptive_mt_datasets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_adaptive_mt_datasets_with_metadata` + interceptor in new development instead of the `post_list_adaptive_mt_datasets` interceptor. + When both interceptors are used, this `post_list_adaptive_mt_datasets_with_metadata` interceptor runs after the + `post_list_adaptive_mt_datasets` interceptor. The (possibly modified) response returned by + `post_list_adaptive_mt_datasets` will be passed to + `post_list_adaptive_mt_datasets_with_metadata`. + """ + return response, metadata + def pre_list_adaptive_mt_files( self, request: adaptive_mt.ListAdaptiveMtFilesRequest, @@ -1024,12 +1566,37 @@ def post_list_adaptive_mt_files( ) -> adaptive_mt.ListAdaptiveMtFilesResponse: """Post-rpc interceptor for list_adaptive_mt_files - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_adaptive_mt_files_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_adaptive_mt_files` interceptor runs + before the `post_list_adaptive_mt_files_with_metadata` interceptor. """ return response + def post_list_adaptive_mt_files_with_metadata( + self, + response: adaptive_mt.ListAdaptiveMtFilesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + adaptive_mt.ListAdaptiveMtFilesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_adaptive_mt_files + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_adaptive_mt_files_with_metadata` + interceptor in new development instead of the `post_list_adaptive_mt_files` interceptor. + When both interceptors are used, this `post_list_adaptive_mt_files_with_metadata` interceptor runs after the + `post_list_adaptive_mt_files` interceptor. The (possibly modified) response returned by + `post_list_adaptive_mt_files` will be passed to + `post_list_adaptive_mt_files_with_metadata`. + """ + return response, metadata + def pre_list_adaptive_mt_sentences( self, request: adaptive_mt.ListAdaptiveMtSentencesRequest, @@ -1050,12 +1617,38 @@ def post_list_adaptive_mt_sentences( ) -> adaptive_mt.ListAdaptiveMtSentencesResponse: """Post-rpc interceptor for list_adaptive_mt_sentences - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_adaptive_mt_sentences_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_adaptive_mt_sentences` interceptor runs + before the `post_list_adaptive_mt_sentences_with_metadata` interceptor. """ return response + def post_list_adaptive_mt_sentences_with_metadata( + self, + response: adaptive_mt.ListAdaptiveMtSentencesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + adaptive_mt.ListAdaptiveMtSentencesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_adaptive_mt_sentences + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_adaptive_mt_sentences_with_metadata` + interceptor in new development instead of the `post_list_adaptive_mt_sentences` interceptor. + When both interceptors are used, this `post_list_adaptive_mt_sentences_with_metadata` interceptor runs after the + `post_list_adaptive_mt_sentences` interceptor. The (possibly modified) response returned by + `post_list_adaptive_mt_sentences` will be passed to + `post_list_adaptive_mt_sentences_with_metadata`. + """ + return response, metadata + def pre_list_datasets( self, request: automl_translation.ListDatasetsRequest, @@ -1075,12 +1668,37 @@ def post_list_datasets( ) -> automl_translation.ListDatasetsResponse: """Post-rpc interceptor for list_datasets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_datasets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_datasets` interceptor runs + before the `post_list_datasets_with_metadata` interceptor. """ return response + def post_list_datasets_with_metadata( + self, + response: automl_translation.ListDatasetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + automl_translation.ListDatasetsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_datasets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_datasets_with_metadata` + interceptor in new development instead of the `post_list_datasets` interceptor. + When both interceptors are used, this `post_list_datasets_with_metadata` interceptor runs after the + `post_list_datasets` interceptor. The (possibly modified) response returned by + `post_list_datasets` will be passed to + `post_list_datasets_with_metadata`. + """ + return response, metadata + def pre_list_examples( self, request: automl_translation.ListExamplesRequest, @@ -1100,12 +1718,37 @@ def post_list_examples( ) -> automl_translation.ListExamplesResponse: """Post-rpc interceptor for list_examples - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_examples_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_examples` interceptor runs + before the `post_list_examples_with_metadata` interceptor. """ return response + def post_list_examples_with_metadata( + self, + response: automl_translation.ListExamplesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + automl_translation.ListExamplesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_examples + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_examples_with_metadata` + interceptor in new development instead of the `post_list_examples` interceptor. + When both interceptors are used, this `post_list_examples_with_metadata` interceptor runs after the + `post_list_examples` interceptor. The (possibly modified) response returned by + `post_list_examples` will be passed to + `post_list_examples_with_metadata`. + """ + return response, metadata + def pre_list_glossaries( self, request: translation_service.ListGlossariesRequest, @@ -1126,12 +1769,38 @@ def post_list_glossaries( ) -> translation_service.ListGlossariesResponse: """Post-rpc interceptor for list_glossaries - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_glossaries_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_glossaries` interceptor runs + before the `post_list_glossaries_with_metadata` interceptor. """ return response + def post_list_glossaries_with_metadata( + self, + response: translation_service.ListGlossariesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.ListGlossariesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_glossaries + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_glossaries_with_metadata` + interceptor in new development instead of the `post_list_glossaries` interceptor. + When both interceptors are used, this `post_list_glossaries_with_metadata` interceptor runs after the + `post_list_glossaries` interceptor. The (possibly modified) response returned by + `post_list_glossaries` will be passed to + `post_list_glossaries_with_metadata`. + """ + return response, metadata + def pre_list_glossary_entries( self, request: translation_service.ListGlossaryEntriesRequest, @@ -1152,12 +1821,38 @@ def post_list_glossary_entries( ) -> translation_service.ListGlossaryEntriesResponse: """Post-rpc interceptor for list_glossary_entries - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_glossary_entries_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_glossary_entries` interceptor runs + before the `post_list_glossary_entries_with_metadata` interceptor. """ return response + def post_list_glossary_entries_with_metadata( + self, + response: translation_service.ListGlossaryEntriesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.ListGlossaryEntriesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_glossary_entries + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_glossary_entries_with_metadata` + interceptor in new development instead of the `post_list_glossary_entries` interceptor. + When both interceptors are used, this `post_list_glossary_entries_with_metadata` interceptor runs after the + `post_list_glossary_entries` interceptor. The (possibly modified) response returned by + `post_list_glossary_entries` will be passed to + `post_list_glossary_entries_with_metadata`. + """ + return response, metadata + def pre_list_models( self, request: automl_translation.ListModelsRequest, @@ -1177,12 +1872,37 @@ def post_list_models( ) -> automl_translation.ListModelsResponse: """Post-rpc interceptor for list_models - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_models_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_models` interceptor runs + before the `post_list_models_with_metadata` interceptor. """ return response + def post_list_models_with_metadata( + self, + response: automl_translation.ListModelsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + automl_translation.ListModelsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_models + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_models_with_metadata` + interceptor in new development instead of the `post_list_models` interceptor. + When both interceptors are used, this `post_list_models_with_metadata` interceptor runs after the + `post_list_models` interceptor. The (possibly modified) response returned by + `post_list_models` will be passed to + `post_list_models_with_metadata`. + """ + return response, metadata + def pre_romanize_text( self, request: translation_service.RomanizeTextRequest, @@ -1202,12 +1922,38 @@ def post_romanize_text( ) -> translation_service.RomanizeTextResponse: """Post-rpc interceptor for romanize_text - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_romanize_text_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_romanize_text` interceptor runs + before the `post_romanize_text_with_metadata` interceptor. """ return response + def post_romanize_text_with_metadata( + self, + response: translation_service.RomanizeTextResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.RomanizeTextResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for romanize_text + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_romanize_text_with_metadata` + interceptor in new development instead of the `post_romanize_text` interceptor. + When both interceptors are used, this `post_romanize_text_with_metadata` interceptor runs after the + `post_romanize_text` interceptor. The (possibly modified) response returned by + `post_romanize_text` will be passed to + `post_romanize_text_with_metadata`. + """ + return response, metadata + def pre_translate_document( self, request: translation_service.TranslateDocumentRequest, @@ -1228,12 +1974,38 @@ def post_translate_document( ) -> translation_service.TranslateDocumentResponse: """Post-rpc interceptor for translate_document - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_translate_document_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_translate_document` interceptor runs + before the `post_translate_document_with_metadata` interceptor. """ return response + def post_translate_document_with_metadata( + self, + response: translation_service.TranslateDocumentResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.TranslateDocumentResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for translate_document + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_translate_document_with_metadata` + interceptor in new development instead of the `post_translate_document` interceptor. + When both interceptors are used, this `post_translate_document_with_metadata` interceptor runs after the + `post_translate_document` interceptor. The (possibly modified) response returned by + `post_translate_document` will be passed to + `post_translate_document_with_metadata`. + """ + return response, metadata + def pre_translate_text( self, request: translation_service.TranslateTextRequest, @@ -1254,12 +2026,38 @@ def post_translate_text( ) -> translation_service.TranslateTextResponse: """Post-rpc interceptor for translate_text - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_translate_text_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_translate_text` interceptor runs + before the `post_translate_text_with_metadata` interceptor. """ return response + def post_translate_text_with_metadata( + self, + response: translation_service.TranslateTextResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.TranslateTextResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for translate_text + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_translate_text_with_metadata` + interceptor in new development instead of the `post_translate_text` interceptor. + When both interceptors are used, this `post_translate_text_with_metadata` interceptor runs after the + `post_translate_text` interceptor. The (possibly modified) response returned by + `post_translate_text` will be passed to + `post_translate_text_with_metadata`. + """ + return response, metadata + def pre_update_glossary( self, request: translation_service.UpdateGlossaryRequest, @@ -1280,12 +2078,35 @@ def post_update_glossary( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_glossary - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_glossary_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_update_glossary` interceptor runs + before the `post_update_glossary_with_metadata` interceptor. """ return response + def post_update_glossary_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_glossary + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_update_glossary_with_metadata` + interceptor in new development instead of the `post_update_glossary` interceptor. + When both interceptors are used, this `post_update_glossary_with_metadata` interceptor runs after the + `post_update_glossary` interceptor. The (possibly modified) response returned by + `post_update_glossary` will be passed to + `post_update_glossary_with_metadata`. + """ + return response, metadata + def pre_update_glossary_entry( self, request: translation_service.UpdateGlossaryEntryRequest, @@ -1306,12 +2127,35 @@ def post_update_glossary_entry( ) -> common.GlossaryEntry: """Post-rpc interceptor for update_glossary_entry - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_glossary_entry_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_update_glossary_entry` interceptor runs + before the `post_update_glossary_entry_with_metadata` interceptor. """ return response + def post_update_glossary_entry_with_metadata( + self, + response: common.GlossaryEntry, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[common.GlossaryEntry, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_glossary_entry + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_update_glossary_entry_with_metadata` + interceptor in new development instead of the `post_update_glossary_entry` interceptor. + When both interceptors are used, this `post_update_glossary_entry_with_metadata` interceptor runs after the + `post_update_glossary_entry` interceptor. The (possibly modified) response returned by + `post_update_glossary_entry` will be passed to + `post_update_glossary_entry_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -1760,6 +2604,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_adaptive_mt_translate(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_adaptive_mt_translate_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1914,6 +2762,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_translate_document(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_translate_document_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2066,6 +2918,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_translate_text(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_translate_text_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2219,6 +3075,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_adaptive_mt_dataset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_adaptive_mt_dataset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2367,6 +3227,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_dataset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_dataset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2515,6 +3379,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_glossary(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_glossary_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2669,6 +3537,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_glossary_entry(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_glossary_entry_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2817,6 +3689,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_model(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_model_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3184,6 +4060,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_dataset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_dataset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3326,6 +4206,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_glossary(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_glossary_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3580,6 +4464,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_model(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_model_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3730,6 +4618,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_detect_language(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_detect_language_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3879,6 +4771,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_export_data(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_export_data_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4025,6 +4921,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_adaptive_mt_dataset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_adaptive_mt_dataset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4169,6 +5069,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_adaptive_mt_file(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_adaptive_mt_file_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4312,6 +5216,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_dataset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_dataset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4455,6 +5363,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_glossary(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_glossary_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4601,6 +5513,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_glossary_entry(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_glossary_entry_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4741,6 +5657,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_model(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_model_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4889,6 +5809,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_supported_languages(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_supported_languages_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5046,6 +5970,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_import_adaptive_mt_file(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_import_adaptive_mt_file_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5195,6 +6123,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_import_data(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_import_data_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5342,6 +6274,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_adaptive_mt_datasets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_adaptive_mt_datasets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5492,6 +6428,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_adaptive_mt_files(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_adaptive_mt_files_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5641,6 +6581,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_adaptive_mt_sentences(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_adaptive_mt_sentences_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5784,6 +6728,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_datasets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_datasets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5927,6 +6875,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_examples(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_examples_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6070,6 +7022,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_glossaries(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_glossaries_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6220,6 +7176,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_glossary_entries(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_glossary_entries_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6364,6 +7324,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_models(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_models_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6516,6 +7480,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_romanize_text(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_romanize_text_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6669,6 +7637,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_translate_document(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_translate_document_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6819,6 +7791,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_translate_text(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_translate_text_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6970,6 +7946,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_glossary(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_glossary_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7124,6 +8104,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_glossary_entry(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_glossary_entry_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-translate/google/cloud/translate_v3beta1/gapic_version.py b/packages/google-cloud-translate/google/cloud/translate_v3beta1/gapic_version.py index 420469d05091..558c8aab67c5 100644 --- a/packages/google-cloud-translate/google/cloud/translate_v3beta1/gapic_version.py +++ b/packages/google-cloud-translate/google/cloud/translate_v3beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.19.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-translate/google/cloud/translate_v3beta1/services/translation_service/client.py b/packages/google-cloud-translate/google/cloud/translate_v3beta1/services/translation_service/client.py index fcbb0db03671..cffc03197e21 100644 --- a/packages/google-cloud-translate/google/cloud/translate_v3beta1/services/translation_service/client.py +++ b/packages/google-cloud-translate/google/cloud/translate_v3beta1/services/translation_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -488,6 +490,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-translate/google/cloud/translate_v3beta1/services/translation_service/transports/rest.py b/packages/google-cloud-translate/google/cloud/translate_v3beta1/services/translation_service/transports/rest.py index c50e7729fd8d..9e0071c10fcd 100644 --- a/packages/google-cloud-translate/google/cloud/translate_v3beta1/services/translation_service/transports/rest.py +++ b/packages/google-cloud-translate/google/cloud/translate_v3beta1/services/translation_service/transports/rest.py @@ -175,12 +175,35 @@ def post_batch_translate_document( ) -> operations_pb2.Operation: """Post-rpc interceptor for batch_translate_document - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_translate_document_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_batch_translate_document` interceptor runs + before the `post_batch_translate_document_with_metadata` interceptor. """ return response + def post_batch_translate_document_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for batch_translate_document + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_batch_translate_document_with_metadata` + interceptor in new development instead of the `post_batch_translate_document` interceptor. + When both interceptors are used, this `post_batch_translate_document_with_metadata` interceptor runs after the + `post_batch_translate_document` interceptor. The (possibly modified) response returned by + `post_batch_translate_document` will be passed to + `post_batch_translate_document_with_metadata`. + """ + return response, metadata + def pre_batch_translate_text( self, request: translation_service.BatchTranslateTextRequest, @@ -201,12 +224,35 @@ def post_batch_translate_text( ) -> operations_pb2.Operation: """Post-rpc interceptor for batch_translate_text - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_translate_text_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_batch_translate_text` interceptor runs + before the `post_batch_translate_text_with_metadata` interceptor. """ return response + def post_batch_translate_text_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for batch_translate_text + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_batch_translate_text_with_metadata` + interceptor in new development instead of the `post_batch_translate_text` interceptor. + When both interceptors are used, this `post_batch_translate_text_with_metadata` interceptor runs after the + `post_batch_translate_text` interceptor. The (possibly modified) response returned by + `post_batch_translate_text` will be passed to + `post_batch_translate_text_with_metadata`. + """ + return response, metadata + def pre_create_glossary( self, request: translation_service.CreateGlossaryRequest, @@ -227,12 +273,35 @@ def post_create_glossary( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_glossary - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_glossary_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_create_glossary` interceptor runs + before the `post_create_glossary_with_metadata` interceptor. """ return response + def post_create_glossary_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_glossary + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_create_glossary_with_metadata` + interceptor in new development instead of the `post_create_glossary` interceptor. + When both interceptors are used, this `post_create_glossary_with_metadata` interceptor runs after the + `post_create_glossary` interceptor. The (possibly modified) response returned by + `post_create_glossary` will be passed to + `post_create_glossary_with_metadata`. + """ + return response, metadata + def pre_delete_glossary( self, request: translation_service.DeleteGlossaryRequest, @@ -253,12 +322,35 @@ def post_delete_glossary( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_glossary - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_glossary_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_delete_glossary` interceptor runs + before the `post_delete_glossary_with_metadata` interceptor. """ return response + def post_delete_glossary_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_glossary + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_delete_glossary_with_metadata` + interceptor in new development instead of the `post_delete_glossary` interceptor. + When both interceptors are used, this `post_delete_glossary_with_metadata` interceptor runs after the + `post_delete_glossary` interceptor. The (possibly modified) response returned by + `post_delete_glossary` will be passed to + `post_delete_glossary_with_metadata`. + """ + return response, metadata + def pre_detect_language( self, request: translation_service.DetectLanguageRequest, @@ -279,12 +371,38 @@ def post_detect_language( ) -> translation_service.DetectLanguageResponse: """Post-rpc interceptor for detect_language - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_detect_language_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_detect_language` interceptor runs + before the `post_detect_language_with_metadata` interceptor. """ return response + def post_detect_language_with_metadata( + self, + response: translation_service.DetectLanguageResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.DetectLanguageResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for detect_language + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_detect_language_with_metadata` + interceptor in new development instead of the `post_detect_language` interceptor. + When both interceptors are used, this `post_detect_language_with_metadata` interceptor runs after the + `post_detect_language` interceptor. The (possibly modified) response returned by + `post_detect_language` will be passed to + `post_detect_language_with_metadata`. + """ + return response, metadata + def pre_get_glossary( self, request: translation_service.GetGlossaryRequest, @@ -304,12 +422,35 @@ def post_get_glossary( ) -> translation_service.Glossary: """Post-rpc interceptor for get_glossary - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_glossary_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_glossary` interceptor runs + before the `post_get_glossary_with_metadata` interceptor. """ return response + def post_get_glossary_with_metadata( + self, + response: translation_service.Glossary, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[translation_service.Glossary, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_glossary + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_glossary_with_metadata` + interceptor in new development instead of the `post_get_glossary` interceptor. + When both interceptors are used, this `post_get_glossary_with_metadata` interceptor runs after the + `post_get_glossary` interceptor. The (possibly modified) response returned by + `post_get_glossary` will be passed to + `post_get_glossary_with_metadata`. + """ + return response, metadata + def pre_get_supported_languages( self, request: translation_service.GetSupportedLanguagesRequest, @@ -330,12 +471,37 @@ def post_get_supported_languages( ) -> translation_service.SupportedLanguages: """Post-rpc interceptor for get_supported_languages - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_supported_languages_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_get_supported_languages` interceptor runs + before the `post_get_supported_languages_with_metadata` interceptor. """ return response + def post_get_supported_languages_with_metadata( + self, + response: translation_service.SupportedLanguages, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.SupportedLanguages, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_supported_languages + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_get_supported_languages_with_metadata` + interceptor in new development instead of the `post_get_supported_languages` interceptor. + When both interceptors are used, this `post_get_supported_languages_with_metadata` interceptor runs after the + `post_get_supported_languages` interceptor. The (possibly modified) response returned by + `post_get_supported_languages` will be passed to + `post_get_supported_languages_with_metadata`. + """ + return response, metadata + def pre_list_glossaries( self, request: translation_service.ListGlossariesRequest, @@ -356,12 +522,38 @@ def post_list_glossaries( ) -> translation_service.ListGlossariesResponse: """Post-rpc interceptor for list_glossaries - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_glossaries_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_list_glossaries` interceptor runs + before the `post_list_glossaries_with_metadata` interceptor. """ return response + def post_list_glossaries_with_metadata( + self, + response: translation_service.ListGlossariesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.ListGlossariesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_glossaries + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_list_glossaries_with_metadata` + interceptor in new development instead of the `post_list_glossaries` interceptor. + When both interceptors are used, this `post_list_glossaries_with_metadata` interceptor runs after the + `post_list_glossaries` interceptor. The (possibly modified) response returned by + `post_list_glossaries` will be passed to + `post_list_glossaries_with_metadata`. + """ + return response, metadata + def pre_translate_document( self, request: translation_service.TranslateDocumentRequest, @@ -382,12 +574,38 @@ def post_translate_document( ) -> translation_service.TranslateDocumentResponse: """Post-rpc interceptor for translate_document - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_translate_document_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_translate_document` interceptor runs + before the `post_translate_document_with_metadata` interceptor. """ return response + def post_translate_document_with_metadata( + self, + response: translation_service.TranslateDocumentResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.TranslateDocumentResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for translate_document + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_translate_document_with_metadata` + interceptor in new development instead of the `post_translate_document` interceptor. + When both interceptors are used, this `post_translate_document_with_metadata` interceptor runs after the + `post_translate_document` interceptor. The (possibly modified) response returned by + `post_translate_document` will be passed to + `post_translate_document_with_metadata`. + """ + return response, metadata + def pre_translate_text( self, request: translation_service.TranslateTextRequest, @@ -408,12 +626,38 @@ def post_translate_text( ) -> translation_service.TranslateTextResponse: """Post-rpc interceptor for translate_text - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_translate_text_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranslationService server but before - it is returned to user code. + it is returned to user code. This `post_translate_text` interceptor runs + before the `post_translate_text_with_metadata` interceptor. """ return response + def post_translate_text_with_metadata( + self, + response: translation_service.TranslateTextResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + translation_service.TranslateTextResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for translate_text + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranslationService server but before it is returned to user code. + + We recommend only using this `post_translate_text_with_metadata` + interceptor in new development instead of the `post_translate_text` interceptor. + When both interceptors are used, this `post_translate_text_with_metadata` interceptor runs after the + `post_translate_text` interceptor. The (possibly modified) response returned by + `post_translate_text` will be passed to + `post_translate_text_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class TranslationServiceRestStub: @@ -691,6 +935,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_translate_document(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_translate_document_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -843,6 +1091,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_translate_text(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_translate_text_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -991,6 +1243,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_glossary(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_glossary_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1133,6 +1389,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_glossary(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_glossary_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1283,6 +1543,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_detect_language(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_detect_language_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1428,6 +1692,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_glossary(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_glossary_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1576,6 +1844,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_supported_languages(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_supported_languages_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1719,6 +1991,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_glossaries(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_glossaries_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1872,6 +2148,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_translate_document(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_translate_document_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2022,6 +2302,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_translate_text(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_translate_text_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-translate/samples/generated_samples/snippet_metadata_google.cloud.translation.v3.json b/packages/google-cloud-translate/samples/generated_samples/snippet_metadata_google.cloud.translation.v3.json index f14679bbdf6b..de406536e428 100644 --- a/packages/google-cloud-translate/samples/generated_samples/snippet_metadata_google.cloud.translation.v3.json +++ b/packages/google-cloud-translate/samples/generated_samples/snippet_metadata_google.cloud.translation.v3.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-translate", - "version": "3.19.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-translate/samples/generated_samples/snippet_metadata_google.cloud.translation.v3beta1.json b/packages/google-cloud-translate/samples/generated_samples/snippet_metadata_google.cloud.translation.v3beta1.json index 37f68cab69ac..74f2e4c9def9 100644 --- a/packages/google-cloud-translate/samples/generated_samples/snippet_metadata_google.cloud.translation.v3beta1.json +++ b/packages/google-cloud-translate/samples/generated_samples/snippet_metadata_google.cloud.translation.v3beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-translate", - "version": "3.19.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-translate/tests/unit/gapic/translate_v3/test_translation_service.py b/packages/google-cloud-translate/tests/unit/gapic/translate_v3/test_translation_service.py index b52b06c732f8..1e24bb3e74fb 100644 --- a/packages/google-cloud-translate/tests/unit/gapic/translate_v3/test_translation_service.py +++ b/packages/google-cloud-translate/tests/unit/gapic/translate_v3/test_translation_service.py @@ -82,6 +82,13 @@ translation_service, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -353,6 +360,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = TranslationServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = TranslationServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -25421,10 +25471,14 @@ def test_translate_text_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_translate_text" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_translate_text_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_translate_text" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.TranslateTextRequest.pb( translation_service.TranslateTextRequest() ) @@ -25450,6 +25504,10 @@ def test_translate_text_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.TranslateTextResponse() + post_with_metadata.return_value = ( + translation_service.TranslateTextResponse(), + metadata, + ) client.translate_text( request, @@ -25461,6 +25519,7 @@ def test_translate_text_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_romanize_text_rest_bad_request( @@ -25542,10 +25601,13 @@ def test_romanize_text_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_romanize_text" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_romanize_text_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_romanize_text" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.RomanizeTextRequest.pb( translation_service.RomanizeTextRequest() ) @@ -25571,6 +25633,10 @@ def test_romanize_text_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.RomanizeTextResponse() + post_with_metadata.return_value = ( + translation_service.RomanizeTextResponse(), + metadata, + ) client.romanize_text( request, @@ -25582,6 +25648,7 @@ def test_romanize_text_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_detect_language_rest_bad_request( @@ -25663,10 +25730,14 @@ def test_detect_language_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_detect_language" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_detect_language_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_detect_language" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.DetectLanguageRequest.pb( translation_service.DetectLanguageRequest() ) @@ -25692,6 +25763,10 @@ def test_detect_language_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.DetectLanguageResponse() + post_with_metadata.return_value = ( + translation_service.DetectLanguageResponse(), + metadata, + ) client.detect_language( request, @@ -25703,6 +25778,7 @@ def test_detect_language_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_supported_languages_rest_bad_request( @@ -25784,10 +25860,14 @@ def test_get_supported_languages_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_supported_languages" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_get_supported_languages_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_supported_languages" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.GetSupportedLanguagesRequest.pb( translation_service.GetSupportedLanguagesRequest() ) @@ -25813,6 +25893,10 @@ def test_get_supported_languages_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.SupportedLanguages() + post_with_metadata.return_value = ( + translation_service.SupportedLanguages(), + metadata, + ) client.get_supported_languages( request, @@ -25824,6 +25908,7 @@ def test_get_supported_languages_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_translate_document_rest_bad_request( @@ -25908,10 +25993,14 @@ def test_translate_document_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_translate_document" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_translate_document_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_translate_document" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.TranslateDocumentRequest.pb( translation_service.TranslateDocumentRequest() ) @@ -25937,6 +26026,10 @@ def test_translate_document_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.TranslateDocumentResponse() + post_with_metadata.return_value = ( + translation_service.TranslateDocumentResponse(), + metadata, + ) client.translate_document( request, @@ -25948,6 +26041,7 @@ def test_translate_document_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_batch_translate_text_rest_bad_request( @@ -26028,10 +26122,14 @@ def test_batch_translate_text_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_batch_translate_text" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_batch_translate_text_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_batch_translate_text" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.BatchTranslateTextRequest.pb( translation_service.BatchTranslateTextRequest() ) @@ -26055,6 +26153,7 @@ def test_batch_translate_text_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.batch_translate_text( request, @@ -26066,6 +26165,7 @@ def test_batch_translate_text_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_batch_translate_document_rest_bad_request( @@ -26146,10 +26246,14 @@ def test_batch_translate_document_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_batch_translate_document" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_batch_translate_document_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_batch_translate_document" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.BatchTranslateDocumentRequest.pb( translation_service.BatchTranslateDocumentRequest() ) @@ -26173,6 +26277,7 @@ def test_batch_translate_document_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.batch_translate_document( request, @@ -26184,6 +26289,7 @@ def test_batch_translate_document_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_glossary_rest_bad_request( @@ -26346,10 +26452,14 @@ def test_create_glossary_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_create_glossary" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_create_glossary_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_create_glossary" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.CreateGlossaryRequest.pb( translation_service.CreateGlossaryRequest() ) @@ -26373,6 +26483,7 @@ def test_create_glossary_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_glossary( request, @@ -26384,6 +26495,7 @@ def test_create_glossary_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_glossary_rest_bad_request( @@ -26550,10 +26662,14 @@ def test_update_glossary_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_update_glossary" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_update_glossary_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_update_glossary" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.UpdateGlossaryRequest.pb( translation_service.UpdateGlossaryRequest() ) @@ -26577,6 +26693,7 @@ def test_update_glossary_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_glossary( request, @@ -26588,6 +26705,7 @@ def test_update_glossary_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_glossaries_rest_bad_request( @@ -26672,10 +26790,14 @@ def test_list_glossaries_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_glossaries" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_list_glossaries_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_glossaries" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.ListGlossariesRequest.pb( translation_service.ListGlossariesRequest() ) @@ -26701,6 +26823,10 @@ def test_list_glossaries_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.ListGlossariesResponse() + post_with_metadata.return_value = ( + translation_service.ListGlossariesResponse(), + metadata, + ) client.list_glossaries( request, @@ -26712,6 +26838,7 @@ def test_list_glossaries_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_glossary_rest_bad_request( @@ -26800,10 +26927,13 @@ def test_get_glossary_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_glossary" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_get_glossary_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_glossary" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.GetGlossaryRequest.pb( translation_service.GetGlossaryRequest() ) @@ -26829,6 +26959,7 @@ def test_get_glossary_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.Glossary() + post_with_metadata.return_value = translation_service.Glossary(), metadata client.get_glossary( request, @@ -26840,6 +26971,7 @@ def test_get_glossary_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_glossary_rest_bad_request( @@ -26920,10 +27052,14 @@ def test_delete_glossary_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_delete_glossary" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_delete_glossary_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_delete_glossary" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.DeleteGlossaryRequest.pb( translation_service.DeleteGlossaryRequest() ) @@ -26947,6 +27083,7 @@ def test_delete_glossary_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_glossary( request, @@ -26958,6 +27095,7 @@ def test_delete_glossary_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_glossary_entry_rest_bad_request( @@ -27048,10 +27186,14 @@ def test_get_glossary_entry_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_glossary_entry" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_get_glossary_entry_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_glossary_entry" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.GetGlossaryEntryRequest.pb( translation_service.GetGlossaryEntryRequest() ) @@ -27075,6 +27217,7 @@ def test_get_glossary_entry_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = common.GlossaryEntry() + post_with_metadata.return_value = common.GlossaryEntry(), metadata client.get_glossary_entry( request, @@ -27086,6 +27229,7 @@ def test_get_glossary_entry_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_glossary_entries_rest_bad_request( @@ -27170,10 +27314,14 @@ def test_list_glossary_entries_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_glossary_entries" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_list_glossary_entries_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_glossary_entries" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.ListGlossaryEntriesRequest.pb( translation_service.ListGlossaryEntriesRequest() ) @@ -27199,6 +27347,10 @@ def test_list_glossary_entries_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.ListGlossaryEntriesResponse() + post_with_metadata.return_value = ( + translation_service.ListGlossaryEntriesResponse(), + metadata, + ) client.list_glossary_entries( request, @@ -27210,6 +27362,7 @@ def test_list_glossary_entries_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_glossary_entry_rest_bad_request( @@ -27377,10 +27530,14 @@ def test_create_glossary_entry_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_create_glossary_entry" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_create_glossary_entry_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_create_glossary_entry" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.CreateGlossaryEntryRequest.pb( translation_service.CreateGlossaryEntryRequest() ) @@ -27404,6 +27561,7 @@ def test_create_glossary_entry_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = common.GlossaryEntry() + post_with_metadata.return_value = common.GlossaryEntry(), metadata client.create_glossary_entry( request, @@ -27415,6 +27573,7 @@ def test_create_glossary_entry_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_glossary_entry_rest_bad_request( @@ -27590,10 +27749,14 @@ def test_update_glossary_entry_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_update_glossary_entry" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_update_glossary_entry_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_update_glossary_entry" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.UpdateGlossaryEntryRequest.pb( translation_service.UpdateGlossaryEntryRequest() ) @@ -27617,6 +27780,7 @@ def test_update_glossary_entry_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = common.GlossaryEntry() + post_with_metadata.return_value = common.GlossaryEntry(), metadata client.update_glossary_entry( request, @@ -27628,6 +27792,7 @@ def test_update_glossary_entry_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_glossary_entry_rest_bad_request( @@ -27900,10 +28065,14 @@ def test_create_dataset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_create_dataset" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_create_dataset_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_create_dataset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.CreateDatasetRequest.pb( automl_translation.CreateDatasetRequest() ) @@ -27927,6 +28096,7 @@ def test_create_dataset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_dataset( request, @@ -27938,6 +28108,7 @@ def test_create_dataset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_dataset_rest_bad_request( @@ -28036,10 +28207,13 @@ def test_get_dataset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_dataset" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_get_dataset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_dataset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.GetDatasetRequest.pb( automl_translation.GetDatasetRequest() ) @@ -28063,6 +28237,7 @@ def test_get_dataset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = automl_translation.Dataset() + post_with_metadata.return_value = automl_translation.Dataset(), metadata client.get_dataset( request, @@ -28074,6 +28249,7 @@ def test_get_dataset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_datasets_rest_bad_request( @@ -28158,10 +28334,13 @@ def test_list_datasets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_datasets" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_list_datasets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_datasets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.ListDatasetsRequest.pb( automl_translation.ListDatasetsRequest() ) @@ -28187,6 +28366,10 @@ def test_list_datasets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = automl_translation.ListDatasetsResponse() + post_with_metadata.return_value = ( + automl_translation.ListDatasetsResponse(), + metadata, + ) client.list_datasets( request, @@ -28198,6 +28381,7 @@ def test_list_datasets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_dataset_rest_bad_request( @@ -28278,10 +28462,14 @@ def test_delete_dataset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_delete_dataset" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_delete_dataset_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_delete_dataset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.DeleteDatasetRequest.pb( automl_translation.DeleteDatasetRequest() ) @@ -28305,6 +28493,7 @@ def test_delete_dataset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_dataset( request, @@ -28316,6 +28505,7 @@ def test_delete_dataset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_adaptive_mt_dataset_rest_bad_request( @@ -28486,10 +28676,14 @@ def test_create_adaptive_mt_dataset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_create_adaptive_mt_dataset" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_create_adaptive_mt_dataset_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_create_adaptive_mt_dataset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = adaptive_mt.CreateAdaptiveMtDatasetRequest.pb( adaptive_mt.CreateAdaptiveMtDatasetRequest() ) @@ -28515,6 +28709,7 @@ def test_create_adaptive_mt_dataset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = adaptive_mt.AdaptiveMtDataset() + post_with_metadata.return_value = adaptive_mt.AdaptiveMtDataset(), metadata client.create_adaptive_mt_dataset( request, @@ -28526,6 +28721,7 @@ def test_create_adaptive_mt_dataset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_adaptive_mt_dataset_rest_bad_request( @@ -28735,10 +28931,14 @@ def test_get_adaptive_mt_dataset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_adaptive_mt_dataset" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_get_adaptive_mt_dataset_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_adaptive_mt_dataset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = adaptive_mt.GetAdaptiveMtDatasetRequest.pb( adaptive_mt.GetAdaptiveMtDatasetRequest() ) @@ -28764,6 +28964,7 @@ def test_get_adaptive_mt_dataset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = adaptive_mt.AdaptiveMtDataset() + post_with_metadata.return_value = adaptive_mt.AdaptiveMtDataset(), metadata client.get_adaptive_mt_dataset( request, @@ -28775,6 +28976,7 @@ def test_get_adaptive_mt_dataset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_adaptive_mt_datasets_rest_bad_request( @@ -28859,10 +29061,14 @@ def test_list_adaptive_mt_datasets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_adaptive_mt_datasets" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_list_adaptive_mt_datasets_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_adaptive_mt_datasets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = adaptive_mt.ListAdaptiveMtDatasetsRequest.pb( adaptive_mt.ListAdaptiveMtDatasetsRequest() ) @@ -28888,6 +29094,10 @@ def test_list_adaptive_mt_datasets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = adaptive_mt.ListAdaptiveMtDatasetsResponse() + post_with_metadata.return_value = ( + adaptive_mt.ListAdaptiveMtDatasetsResponse(), + metadata, + ) client.list_adaptive_mt_datasets( request, @@ -28899,6 +29109,7 @@ def test_list_adaptive_mt_datasets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_adaptive_mt_translate_rest_bad_request( @@ -28983,10 +29194,14 @@ def test_adaptive_mt_translate_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_adaptive_mt_translate" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_adaptive_mt_translate_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_adaptive_mt_translate" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = adaptive_mt.AdaptiveMtTranslateRequest.pb( adaptive_mt.AdaptiveMtTranslateRequest() ) @@ -29012,6 +29227,10 @@ def test_adaptive_mt_translate_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = adaptive_mt.AdaptiveMtTranslateResponse() + post_with_metadata.return_value = ( + adaptive_mt.AdaptiveMtTranslateResponse(), + metadata, + ) client.adaptive_mt_translate( request, @@ -29023,6 +29242,7 @@ def test_adaptive_mt_translate_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_adaptive_mt_file_rest_bad_request( @@ -29115,10 +29335,14 @@ def test_get_adaptive_mt_file_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_adaptive_mt_file" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_get_adaptive_mt_file_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_adaptive_mt_file" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = adaptive_mt.GetAdaptiveMtFileRequest.pb( adaptive_mt.GetAdaptiveMtFileRequest() ) @@ -29142,6 +29366,7 @@ def test_get_adaptive_mt_file_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = adaptive_mt.AdaptiveMtFile() + post_with_metadata.return_value = adaptive_mt.AdaptiveMtFile(), metadata client.get_adaptive_mt_file( request, @@ -29153,6 +29378,7 @@ def test_get_adaptive_mt_file_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_adaptive_mt_file_rest_bad_request( @@ -29351,10 +29577,14 @@ def test_import_adaptive_mt_file_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_import_adaptive_mt_file" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_import_adaptive_mt_file_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_import_adaptive_mt_file" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = adaptive_mt.ImportAdaptiveMtFileRequest.pb( adaptive_mt.ImportAdaptiveMtFileRequest() ) @@ -29380,6 +29610,10 @@ def test_import_adaptive_mt_file_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = adaptive_mt.ImportAdaptiveMtFileResponse() + post_with_metadata.return_value = ( + adaptive_mt.ImportAdaptiveMtFileResponse(), + metadata, + ) client.import_adaptive_mt_file( request, @@ -29391,6 +29625,7 @@ def test_import_adaptive_mt_file_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_adaptive_mt_files_rest_bad_request( @@ -29479,10 +29714,14 @@ def test_list_adaptive_mt_files_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_adaptive_mt_files" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_list_adaptive_mt_files_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_adaptive_mt_files" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = adaptive_mt.ListAdaptiveMtFilesRequest.pb( adaptive_mt.ListAdaptiveMtFilesRequest() ) @@ -29508,6 +29747,10 @@ def test_list_adaptive_mt_files_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = adaptive_mt.ListAdaptiveMtFilesResponse() + post_with_metadata.return_value = ( + adaptive_mt.ListAdaptiveMtFilesResponse(), + metadata, + ) client.list_adaptive_mt_files( request, @@ -29519,6 +29762,7 @@ def test_list_adaptive_mt_files_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_adaptive_mt_sentences_rest_bad_request( @@ -29607,10 +29851,14 @@ def test_list_adaptive_mt_sentences_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_adaptive_mt_sentences" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_list_adaptive_mt_sentences_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_adaptive_mt_sentences" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = adaptive_mt.ListAdaptiveMtSentencesRequest.pb( adaptive_mt.ListAdaptiveMtSentencesRequest() ) @@ -29636,6 +29884,10 @@ def test_list_adaptive_mt_sentences_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = adaptive_mt.ListAdaptiveMtSentencesResponse() + post_with_metadata.return_value = ( + adaptive_mt.ListAdaptiveMtSentencesResponse(), + metadata, + ) client.list_adaptive_mt_sentences( request, @@ -29647,6 +29899,7 @@ def test_list_adaptive_mt_sentences_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_import_data_rest_bad_request( @@ -29727,10 +29980,13 @@ def test_import_data_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_import_data" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_import_data_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_import_data" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.ImportDataRequest.pb( automl_translation.ImportDataRequest() ) @@ -29754,6 +30010,7 @@ def test_import_data_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.import_data( request, @@ -29765,6 +30022,7 @@ def test_import_data_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_export_data_rest_bad_request( @@ -29845,10 +30103,13 @@ def test_export_data_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_export_data" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_export_data_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_export_data" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.ExportDataRequest.pb( automl_translation.ExportDataRequest() ) @@ -29872,6 +30133,7 @@ def test_export_data_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.export_data( request, @@ -29883,6 +30145,7 @@ def test_export_data_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_examples_rest_bad_request( @@ -29967,10 +30230,13 @@ def test_list_examples_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_examples" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_list_examples_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_examples" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.ListExamplesRequest.pb( automl_translation.ListExamplesRequest() ) @@ -29996,6 +30262,10 @@ def test_list_examples_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = automl_translation.ListExamplesResponse() + post_with_metadata.return_value = ( + automl_translation.ListExamplesResponse(), + metadata, + ) client.list_examples( request, @@ -30007,6 +30277,7 @@ def test_list_examples_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_model_rest_bad_request( @@ -30166,10 +30437,13 @@ def test_create_model_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_create_model" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_create_model_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_create_model" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.CreateModelRequest.pb( automl_translation.CreateModelRequest() ) @@ -30193,6 +30467,7 @@ def test_create_model_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_model( request, @@ -30204,6 +30479,7 @@ def test_create_model_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_models_rest_bad_request( @@ -30288,10 +30564,13 @@ def test_list_models_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_models" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_list_models_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_models" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.ListModelsRequest.pb( automl_translation.ListModelsRequest() ) @@ -30317,6 +30596,10 @@ def test_list_models_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = automl_translation.ListModelsResponse() + post_with_metadata.return_value = ( + automl_translation.ListModelsResponse(), + metadata, + ) client.list_models( request, @@ -30328,6 +30611,7 @@ def test_list_models_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_model_rest_bad_request(request_type=automl_translation.GetModelRequest): @@ -30424,10 +30708,13 @@ def test_get_model_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_model" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_get_model_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_model" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.GetModelRequest.pb( automl_translation.GetModelRequest() ) @@ -30451,6 +30738,7 @@ def test_get_model_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = automl_translation.Model() + post_with_metadata.return_value = automl_translation.Model(), metadata client.get_model( request, @@ -30462,6 +30750,7 @@ def test_get_model_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_model_rest_bad_request( @@ -30542,10 +30831,13 @@ def test_delete_model_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_delete_model" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_delete_model_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_delete_model" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = automl_translation.DeleteModelRequest.pb( automl_translation.DeleteModelRequest() ) @@ -30569,6 +30861,7 @@ def test_delete_model_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_model( request, @@ -30580,6 +30873,7 @@ def test_delete_model_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-translate/tests/unit/gapic/translate_v3beta1/test_translation_service.py b/packages/google-cloud-translate/tests/unit/gapic/translate_v3beta1/test_translation_service.py index dd256d6153d4..2ece7085b49b 100644 --- a/packages/google-cloud-translate/tests/unit/gapic/translate_v3beta1/test_translation_service.py +++ b/packages/google-cloud-translate/tests/unit/gapic/translate_v3beta1/test_translation_service.py @@ -71,6 +71,13 @@ ) from google.cloud.translate_v3beta1.types import translation_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -342,6 +349,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = TranslationServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = TranslationServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -7097,10 +7147,14 @@ def test_translate_text_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_translate_text" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_translate_text_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_translate_text" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.TranslateTextRequest.pb( translation_service.TranslateTextRequest() ) @@ -7126,6 +7180,10 @@ def test_translate_text_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.TranslateTextResponse() + post_with_metadata.return_value = ( + translation_service.TranslateTextResponse(), + metadata, + ) client.translate_text( request, @@ -7137,6 +7195,7 @@ def test_translate_text_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_detect_language_rest_bad_request( @@ -7218,10 +7277,14 @@ def test_detect_language_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_detect_language" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_detect_language_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_detect_language" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.DetectLanguageRequest.pb( translation_service.DetectLanguageRequest() ) @@ -7247,6 +7310,10 @@ def test_detect_language_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.DetectLanguageResponse() + post_with_metadata.return_value = ( + translation_service.DetectLanguageResponse(), + metadata, + ) client.detect_language( request, @@ -7258,6 +7325,7 @@ def test_detect_language_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_supported_languages_rest_bad_request( @@ -7339,10 +7407,14 @@ def test_get_supported_languages_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_supported_languages" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_get_supported_languages_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_supported_languages" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.GetSupportedLanguagesRequest.pb( translation_service.GetSupportedLanguagesRequest() ) @@ -7368,6 +7440,10 @@ def test_get_supported_languages_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.SupportedLanguages() + post_with_metadata.return_value = ( + translation_service.SupportedLanguages(), + metadata, + ) client.get_supported_languages( request, @@ -7379,6 +7455,7 @@ def test_get_supported_languages_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_translate_document_rest_bad_request( @@ -7463,10 +7540,14 @@ def test_translate_document_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_translate_document" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_translate_document_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_translate_document" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.TranslateDocumentRequest.pb( translation_service.TranslateDocumentRequest() ) @@ -7492,6 +7573,10 @@ def test_translate_document_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.TranslateDocumentResponse() + post_with_metadata.return_value = ( + translation_service.TranslateDocumentResponse(), + metadata, + ) client.translate_document( request, @@ -7503,6 +7588,7 @@ def test_translate_document_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_batch_translate_text_rest_bad_request( @@ -7583,10 +7669,14 @@ def test_batch_translate_text_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_batch_translate_text" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_batch_translate_text_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_batch_translate_text" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.BatchTranslateTextRequest.pb( translation_service.BatchTranslateTextRequest() ) @@ -7610,6 +7700,7 @@ def test_batch_translate_text_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.batch_translate_text( request, @@ -7621,6 +7712,7 @@ def test_batch_translate_text_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_batch_translate_document_rest_bad_request( @@ -7701,10 +7793,14 @@ def test_batch_translate_document_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_batch_translate_document" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_batch_translate_document_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_batch_translate_document" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.BatchTranslateDocumentRequest.pb( translation_service.BatchTranslateDocumentRequest() ) @@ -7728,6 +7824,7 @@ def test_batch_translate_document_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.batch_translate_document( request, @@ -7739,6 +7836,7 @@ def test_batch_translate_document_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_glossary_rest_bad_request( @@ -7900,10 +7998,14 @@ def test_create_glossary_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_create_glossary" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_create_glossary_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_create_glossary" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.CreateGlossaryRequest.pb( translation_service.CreateGlossaryRequest() ) @@ -7927,6 +8029,7 @@ def test_create_glossary_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_glossary( request, @@ -7938,6 +8041,7 @@ def test_create_glossary_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_glossaries_rest_bad_request( @@ -8022,10 +8126,14 @@ def test_list_glossaries_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_list_glossaries" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_list_glossaries_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_list_glossaries" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.ListGlossariesRequest.pb( translation_service.ListGlossariesRequest() ) @@ -8051,6 +8159,10 @@ def test_list_glossaries_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.ListGlossariesResponse() + post_with_metadata.return_value = ( + translation_service.ListGlossariesResponse(), + metadata, + ) client.list_glossaries( request, @@ -8062,6 +8174,7 @@ def test_list_glossaries_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_glossary_rest_bad_request( @@ -8148,10 +8261,13 @@ def test_get_glossary_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranslationServiceRestInterceptor, "post_get_glossary" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, "post_get_glossary_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_get_glossary" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.GetGlossaryRequest.pb( translation_service.GetGlossaryRequest() ) @@ -8177,6 +8293,7 @@ def test_get_glossary_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = translation_service.Glossary() + post_with_metadata.return_value = translation_service.Glossary(), metadata client.get_glossary( request, @@ -8188,6 +8305,7 @@ def test_get_glossary_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_glossary_rest_bad_request( @@ -8268,10 +8386,14 @@ def test_delete_glossary_rest_interceptors(null_interceptor): ), mock.patch.object( transports.TranslationServiceRestInterceptor, "post_delete_glossary" ) as post, mock.patch.object( + transports.TranslationServiceRestInterceptor, + "post_delete_glossary_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranslationServiceRestInterceptor, "pre_delete_glossary" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = translation_service.DeleteGlossaryRequest.pb( translation_service.DeleteGlossaryRequest() ) @@ -8295,6 +8417,7 @@ def test_delete_glossary_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_glossary( request, @@ -8306,6 +8429,7 @@ def test_delete_glossary_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-video-live-stream/google/cloud/video/live_stream/gapic_version.py b/packages/google-cloud-video-live-stream/google/cloud/video/live_stream/gapic_version.py index d1d2a9e60a97..558c8aab67c5 100644 --- a/packages/google-cloud-video-live-stream/google/cloud/video/live_stream/gapic_version.py +++ b/packages/google-cloud-video-live-stream/google/cloud/video/live_stream/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.10.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/gapic_version.py b/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/gapic_version.py index d1d2a9e60a97..558c8aab67c5 100644 --- a/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/gapic_version.py +++ b/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.10.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/services/livestream_service/client.py b/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/services/livestream_service/client.py index 0f7387cd1f24..d84cb8997d08 100644 --- a/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/services/livestream_service/client.py +++ b/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/services/livestream_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -654,6 +656,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -4172,16 +4201,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -4227,16 +4260,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -4393,16 +4430,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -4448,16 +4489,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/services/livestream_service/transports/rest.py b/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/services/livestream_service/transports/rest.py index c01a31620435..fcb5c235ca61 100644 --- a/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/services/livestream_service/transports/rest.py +++ b/packages/google-cloud-video-live-stream/google/cloud/video/live_stream_v1/services/livestream_service/transports/rest.py @@ -298,12 +298,35 @@ def post_create_asset( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_create_asset` interceptor runs + before the `post_create_asset_with_metadata` interceptor. """ return response + def post_create_asset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_create_asset_with_metadata` + interceptor in new development instead of the `post_create_asset` interceptor. + When both interceptors are used, this `post_create_asset_with_metadata` interceptor runs after the + `post_create_asset` interceptor. The (possibly modified) response returned by + `post_create_asset` will be passed to + `post_create_asset_with_metadata`. + """ + return response, metadata + def pre_create_channel( self, request: service.CreateChannelRequest, @@ -321,12 +344,35 @@ def post_create_channel( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_channel - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_channel_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_create_channel` interceptor runs + before the `post_create_channel_with_metadata` interceptor. """ return response + def post_create_channel_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_channel + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_create_channel_with_metadata` + interceptor in new development instead of the `post_create_channel` interceptor. + When both interceptors are used, this `post_create_channel_with_metadata` interceptor runs after the + `post_create_channel` interceptor. The (possibly modified) response returned by + `post_create_channel` will be passed to + `post_create_channel_with_metadata`. + """ + return response, metadata + def pre_create_clip( self, request: service.CreateClipRequest, @@ -344,12 +390,35 @@ def post_create_clip( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_clip - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_clip_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_create_clip` interceptor runs + before the `post_create_clip_with_metadata` interceptor. """ return response + def post_create_clip_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_clip + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_create_clip_with_metadata` + interceptor in new development instead of the `post_create_clip` interceptor. + When both interceptors are used, this `post_create_clip_with_metadata` interceptor runs after the + `post_create_clip` interceptor. The (possibly modified) response returned by + `post_create_clip` will be passed to + `post_create_clip_with_metadata`. + """ + return response, metadata + def pre_create_event( self, request: service.CreateEventRequest, @@ -365,12 +434,35 @@ def pre_create_event( def post_create_event(self, response: resources.Event) -> resources.Event: """Post-rpc interceptor for create_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_create_event` interceptor runs + before the `post_create_event_with_metadata` interceptor. """ return response + def post_create_event_with_metadata( + self, + response: resources.Event, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.Event, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_create_event_with_metadata` + interceptor in new development instead of the `post_create_event` interceptor. + When both interceptors are used, this `post_create_event_with_metadata` interceptor runs after the + `post_create_event` interceptor. The (possibly modified) response returned by + `post_create_event` will be passed to + `post_create_event_with_metadata`. + """ + return response, metadata + def pre_create_input( self, request: service.CreateInputRequest, @@ -388,12 +480,35 @@ def post_create_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_create_input` interceptor runs + before the `post_create_input_with_metadata` interceptor. """ return response + def post_create_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_create_input_with_metadata` + interceptor in new development instead of the `post_create_input` interceptor. + When both interceptors are used, this `post_create_input_with_metadata` interceptor runs after the + `post_create_input` interceptor. The (possibly modified) response returned by + `post_create_input` will be passed to + `post_create_input_with_metadata`. + """ + return response, metadata + def pre_delete_asset( self, request: service.DeleteAssetRequest, @@ -411,12 +526,35 @@ def post_delete_asset( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_delete_asset` interceptor runs + before the `post_delete_asset_with_metadata` interceptor. """ return response + def post_delete_asset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_delete_asset_with_metadata` + interceptor in new development instead of the `post_delete_asset` interceptor. + When both interceptors are used, this `post_delete_asset_with_metadata` interceptor runs after the + `post_delete_asset` interceptor. The (possibly modified) response returned by + `post_delete_asset` will be passed to + `post_delete_asset_with_metadata`. + """ + return response, metadata + def pre_delete_channel( self, request: service.DeleteChannelRequest, @@ -434,12 +572,35 @@ def post_delete_channel( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_channel - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_channel_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_delete_channel` interceptor runs + before the `post_delete_channel_with_metadata` interceptor. """ return response + def post_delete_channel_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_channel + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_delete_channel_with_metadata` + interceptor in new development instead of the `post_delete_channel` interceptor. + When both interceptors are used, this `post_delete_channel_with_metadata` interceptor runs after the + `post_delete_channel` interceptor. The (possibly modified) response returned by + `post_delete_channel` will be passed to + `post_delete_channel_with_metadata`. + """ + return response, metadata + def pre_delete_clip( self, request: service.DeleteClipRequest, @@ -457,12 +618,35 @@ def post_delete_clip( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_clip - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_clip_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_delete_clip` interceptor runs + before the `post_delete_clip_with_metadata` interceptor. """ return response + def post_delete_clip_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_clip + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_delete_clip_with_metadata` + interceptor in new development instead of the `post_delete_clip` interceptor. + When both interceptors are used, this `post_delete_clip_with_metadata` interceptor runs after the + `post_delete_clip` interceptor. The (possibly modified) response returned by + `post_delete_clip` will be passed to + `post_delete_clip_with_metadata`. + """ + return response, metadata + def pre_delete_event( self, request: service.DeleteEventRequest, @@ -492,12 +676,35 @@ def post_delete_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_delete_input` interceptor runs + before the `post_delete_input_with_metadata` interceptor. """ return response + def post_delete_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_delete_input_with_metadata` + interceptor in new development instead of the `post_delete_input` interceptor. + When both interceptors are used, this `post_delete_input_with_metadata` interceptor runs after the + `post_delete_input` interceptor. The (possibly modified) response returned by + `post_delete_input` will be passed to + `post_delete_input_with_metadata`. + """ + return response, metadata + def pre_get_asset( self, request: service.GetAssetRequest, @@ -513,12 +720,35 @@ def pre_get_asset( def post_get_asset(self, response: resources.Asset) -> resources.Asset: """Post-rpc interceptor for get_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_get_asset` interceptor runs + before the `post_get_asset_with_metadata` interceptor. """ return response + def post_get_asset_with_metadata( + self, + response: resources.Asset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.Asset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_get_asset_with_metadata` + interceptor in new development instead of the `post_get_asset` interceptor. + When both interceptors are used, this `post_get_asset_with_metadata` interceptor runs after the + `post_get_asset` interceptor. The (possibly modified) response returned by + `post_get_asset` will be passed to + `post_get_asset_with_metadata`. + """ + return response, metadata + def pre_get_channel( self, request: service.GetChannelRequest, @@ -534,12 +764,35 @@ def pre_get_channel( def post_get_channel(self, response: resources.Channel) -> resources.Channel: """Post-rpc interceptor for get_channel - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_channel_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_get_channel` interceptor runs + before the `post_get_channel_with_metadata` interceptor. """ return response + def post_get_channel_with_metadata( + self, + response: resources.Channel, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.Channel, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_channel + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_get_channel_with_metadata` + interceptor in new development instead of the `post_get_channel` interceptor. + When both interceptors are used, this `post_get_channel_with_metadata` interceptor runs after the + `post_get_channel` interceptor. The (possibly modified) response returned by + `post_get_channel` will be passed to + `post_get_channel_with_metadata`. + """ + return response, metadata + def pre_get_clip( self, request: service.GetClipRequest, @@ -555,12 +808,35 @@ def pre_get_clip( def post_get_clip(self, response: resources.Clip) -> resources.Clip: """Post-rpc interceptor for get_clip - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_clip_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_get_clip` interceptor runs + before the `post_get_clip_with_metadata` interceptor. """ return response + def post_get_clip_with_metadata( + self, + response: resources.Clip, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.Clip, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_clip + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_get_clip_with_metadata` + interceptor in new development instead of the `post_get_clip` interceptor. + When both interceptors are used, this `post_get_clip_with_metadata` interceptor runs after the + `post_get_clip` interceptor. The (possibly modified) response returned by + `post_get_clip` will be passed to + `post_get_clip_with_metadata`. + """ + return response, metadata + def pre_get_event( self, request: service.GetEventRequest, @@ -576,12 +852,35 @@ def pre_get_event( def post_get_event(self, response: resources.Event) -> resources.Event: """Post-rpc interceptor for get_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_get_event` interceptor runs + before the `post_get_event_with_metadata` interceptor. """ return response + def post_get_event_with_metadata( + self, + response: resources.Event, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.Event, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_get_event_with_metadata` + interceptor in new development instead of the `post_get_event` interceptor. + When both interceptors are used, this `post_get_event_with_metadata` interceptor runs after the + `post_get_event` interceptor. The (possibly modified) response returned by + `post_get_event` will be passed to + `post_get_event_with_metadata`. + """ + return response, metadata + def pre_get_input( self, request: service.GetInputRequest, @@ -597,12 +896,35 @@ def pre_get_input( def post_get_input(self, response: resources.Input) -> resources.Input: """Post-rpc interceptor for get_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_get_input` interceptor runs + before the `post_get_input_with_metadata` interceptor. """ return response + def post_get_input_with_metadata( + self, + response: resources.Input, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.Input, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_get_input_with_metadata` + interceptor in new development instead of the `post_get_input` interceptor. + When both interceptors are used, this `post_get_input_with_metadata` interceptor runs after the + `post_get_input` interceptor. The (possibly modified) response returned by + `post_get_input` will be passed to + `post_get_input_with_metadata`. + """ + return response, metadata + def pre_get_pool( self, request: service.GetPoolRequest, @@ -618,12 +940,35 @@ def pre_get_pool( def post_get_pool(self, response: resources.Pool) -> resources.Pool: """Post-rpc interceptor for get_pool - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_pool_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_get_pool` interceptor runs + before the `post_get_pool_with_metadata` interceptor. """ return response + def post_get_pool_with_metadata( + self, + response: resources.Pool, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.Pool, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_pool + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_get_pool_with_metadata` + interceptor in new development instead of the `post_get_pool` interceptor. + When both interceptors are used, this `post_get_pool_with_metadata` interceptor runs after the + `post_get_pool` interceptor. The (possibly modified) response returned by + `post_get_pool` will be passed to + `post_get_pool_with_metadata`. + """ + return response, metadata + def pre_list_assets( self, request: service.ListAssetsRequest, @@ -641,12 +986,35 @@ def post_list_assets( ) -> service.ListAssetsResponse: """Post-rpc interceptor for list_assets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_assets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_list_assets` interceptor runs + before the `post_list_assets_with_metadata` interceptor. """ return response + def post_list_assets_with_metadata( + self, + response: service.ListAssetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[service.ListAssetsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_assets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_list_assets_with_metadata` + interceptor in new development instead of the `post_list_assets` interceptor. + When both interceptors are used, this `post_list_assets_with_metadata` interceptor runs after the + `post_list_assets` interceptor. The (possibly modified) response returned by + `post_list_assets` will be passed to + `post_list_assets_with_metadata`. + """ + return response, metadata + def pre_list_channels( self, request: service.ListChannelsRequest, @@ -664,12 +1032,35 @@ def post_list_channels( ) -> service.ListChannelsResponse: """Post-rpc interceptor for list_channels - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_channels_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_list_channels` interceptor runs + before the `post_list_channels_with_metadata` interceptor. """ return response + def post_list_channels_with_metadata( + self, + response: service.ListChannelsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[service.ListChannelsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_channels + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_list_channels_with_metadata` + interceptor in new development instead of the `post_list_channels` interceptor. + When both interceptors are used, this `post_list_channels_with_metadata` interceptor runs after the + `post_list_channels` interceptor. The (possibly modified) response returned by + `post_list_channels` will be passed to + `post_list_channels_with_metadata`. + """ + return response, metadata + def pre_list_clips( self, request: service.ListClipsRequest, @@ -687,12 +1078,35 @@ def post_list_clips( ) -> service.ListClipsResponse: """Post-rpc interceptor for list_clips - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_clips_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_list_clips` interceptor runs + before the `post_list_clips_with_metadata` interceptor. """ return response + def post_list_clips_with_metadata( + self, + response: service.ListClipsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[service.ListClipsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_clips + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_list_clips_with_metadata` + interceptor in new development instead of the `post_list_clips` interceptor. + When both interceptors are used, this `post_list_clips_with_metadata` interceptor runs after the + `post_list_clips` interceptor. The (possibly modified) response returned by + `post_list_clips` will be passed to + `post_list_clips_with_metadata`. + """ + return response, metadata + def pre_list_events( self, request: service.ListEventsRequest, @@ -710,12 +1124,35 @@ def post_list_events( ) -> service.ListEventsResponse: """Post-rpc interceptor for list_events - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_events_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_list_events` interceptor runs + before the `post_list_events_with_metadata` interceptor. """ return response + def post_list_events_with_metadata( + self, + response: service.ListEventsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[service.ListEventsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_events + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_list_events_with_metadata` + interceptor in new development instead of the `post_list_events` interceptor. + When both interceptors are used, this `post_list_events_with_metadata` interceptor runs after the + `post_list_events` interceptor. The (possibly modified) response returned by + `post_list_events` will be passed to + `post_list_events_with_metadata`. + """ + return response, metadata + def pre_list_inputs( self, request: service.ListInputsRequest, @@ -733,12 +1170,35 @@ def post_list_inputs( ) -> service.ListInputsResponse: """Post-rpc interceptor for list_inputs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_inputs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_list_inputs` interceptor runs + before the `post_list_inputs_with_metadata` interceptor. """ return response + def post_list_inputs_with_metadata( + self, + response: service.ListInputsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[service.ListInputsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_inputs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_list_inputs_with_metadata` + interceptor in new development instead of the `post_list_inputs` interceptor. + When both interceptors are used, this `post_list_inputs_with_metadata` interceptor runs after the + `post_list_inputs` interceptor. The (possibly modified) response returned by + `post_list_inputs` will be passed to + `post_list_inputs_with_metadata`. + """ + return response, metadata + def pre_start_channel( self, request: service.StartChannelRequest, @@ -756,12 +1216,35 @@ def post_start_channel( ) -> operations_pb2.Operation: """Post-rpc interceptor for start_channel - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_start_channel_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_start_channel` interceptor runs + before the `post_start_channel_with_metadata` interceptor. """ return response + def post_start_channel_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for start_channel + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_start_channel_with_metadata` + interceptor in new development instead of the `post_start_channel` interceptor. + When both interceptors are used, this `post_start_channel_with_metadata` interceptor runs after the + `post_start_channel` interceptor. The (possibly modified) response returned by + `post_start_channel` will be passed to + `post_start_channel_with_metadata`. + """ + return response, metadata + def pre_stop_channel( self, request: service.StopChannelRequest, @@ -779,12 +1262,35 @@ def post_stop_channel( ) -> operations_pb2.Operation: """Post-rpc interceptor for stop_channel - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_stop_channel_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_stop_channel` interceptor runs + before the `post_stop_channel_with_metadata` interceptor. """ return response + def post_stop_channel_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for stop_channel + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_stop_channel_with_metadata` + interceptor in new development instead of the `post_stop_channel` interceptor. + When both interceptors are used, this `post_stop_channel_with_metadata` interceptor runs after the + `post_stop_channel` interceptor. The (possibly modified) response returned by + `post_stop_channel` will be passed to + `post_stop_channel_with_metadata`. + """ + return response, metadata + def pre_update_channel( self, request: service.UpdateChannelRequest, @@ -802,12 +1308,35 @@ def post_update_channel( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_channel - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_channel_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_update_channel` interceptor runs + before the `post_update_channel_with_metadata` interceptor. """ return response + def post_update_channel_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_channel + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_update_channel_with_metadata` + interceptor in new development instead of the `post_update_channel` interceptor. + When both interceptors are used, this `post_update_channel_with_metadata` interceptor runs after the + `post_update_channel` interceptor. The (possibly modified) response returned by + `post_update_channel` will be passed to + `post_update_channel_with_metadata`. + """ + return response, metadata + def pre_update_input( self, request: service.UpdateInputRequest, @@ -825,12 +1354,35 @@ def post_update_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_update_input` interceptor runs + before the `post_update_input_with_metadata` interceptor. """ return response + def post_update_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_update_input_with_metadata` + interceptor in new development instead of the `post_update_input` interceptor. + When both interceptors are used, this `post_update_input_with_metadata` interceptor runs after the + `post_update_input` interceptor. The (possibly modified) response returned by + `post_update_input` will be passed to + `post_update_input_with_metadata`. + """ + return response, metadata + def pre_update_pool( self, request: service.UpdatePoolRequest, @@ -848,12 +1400,35 @@ def post_update_pool( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_pool - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_pool_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LivestreamService server but before - it is returned to user code. + it is returned to user code. This `post_update_pool` interceptor runs + before the `post_update_pool_with_metadata` interceptor. """ return response + def post_update_pool_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_pool + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LivestreamService server but before it is returned to user code. + + We recommend only using this `post_update_pool_with_metadata` + interceptor in new development instead of the `post_update_pool` interceptor. + When both interceptors are used, this `post_update_pool_with_metadata` interceptor runs after the + `post_update_pool` interceptor. The (possibly modified) response returned by + `post_update_pool` will be passed to + `post_update_pool_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -1271,6 +1846,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1420,6 +1999,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_channel(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_channel_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1568,6 +2151,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_clip(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_clip_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1719,6 +2306,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1867,6 +2458,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2009,6 +2604,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2152,6 +2751,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_channel(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_channel_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2294,6 +2897,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_clip(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_clip_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2543,6 +3150,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2686,6 +3297,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2835,6 +3450,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_channel(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_channel_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2983,6 +3602,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_clip(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_clip_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3128,6 +3751,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3272,6 +3899,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3423,6 +4054,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_pool(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_pool_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3566,6 +4201,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_assets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_assets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3709,6 +4348,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_channels(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_channels_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3852,6 +4495,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_clips(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_clips_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3995,6 +4642,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_events(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_events_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4138,6 +4789,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_inputs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_inputs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4286,6 +4941,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_start_channel(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_start_channel_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4434,6 +5093,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_stop_channel(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_stop_channel_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4583,6 +5246,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_channel(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_channel_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4731,6 +5398,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4879,6 +5550,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_pool(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_pool_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-video-live-stream/samples/generated_samples/snippet_metadata_google.cloud.video.livestream.v1.json b/packages/google-cloud-video-live-stream/samples/generated_samples/snippet_metadata_google.cloud.video.livestream.v1.json index 71f2294b8d64..6c0ad77a25a4 100644 --- a/packages/google-cloud-video-live-stream/samples/generated_samples/snippet_metadata_google.cloud.video.livestream.v1.json +++ b/packages/google-cloud-video-live-stream/samples/generated_samples/snippet_metadata_google.cloud.video.livestream.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-video-live-stream", - "version": "1.10.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-video-live-stream/tests/unit/gapic/live_stream_v1/test_livestream_service.py b/packages/google-cloud-video-live-stream/tests/unit/gapic/live_stream_v1/test_livestream_service.py index 080c26abea44..0fb22173fa3b 100644 --- a/packages/google-cloud-video-live-stream/tests/unit/gapic/live_stream_v1/test_livestream_service.py +++ b/packages/google-cloud-video-live-stream/tests/unit/gapic/live_stream_v1/test_livestream_service.py @@ -78,6 +78,13 @@ ) from google.cloud.video.live_stream_v1.types import outputs, resources, service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -345,6 +352,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = LivestreamServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = LivestreamServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -17622,10 +17672,13 @@ def test_create_channel_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_create_channel" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_create_channel_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_create_channel" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.CreateChannelRequest.pb(service.CreateChannelRequest()) transcode.return_value = { "method": "post", @@ -17647,6 +17700,7 @@ def test_create_channel_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_channel( request, @@ -17658,6 +17712,7 @@ def test_create_channel_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_channels_rest_bad_request(request_type=service.ListChannelsRequest): @@ -17742,10 +17797,13 @@ def test_list_channels_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_list_channels" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_list_channels_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_list_channels" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.ListChannelsRequest.pb(service.ListChannelsRequest()) transcode.return_value = { "method": "post", @@ -17769,6 +17827,7 @@ def test_list_channels_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = service.ListChannelsResponse() + post_with_metadata.return_value = service.ListChannelsResponse(), metadata client.list_channels( request, @@ -17780,6 +17839,7 @@ def test_list_channels_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_channel_rest_bad_request(request_type=service.GetChannelRequest): @@ -17866,10 +17926,13 @@ def test_get_channel_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_get_channel" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_get_channel_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_get_channel" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.GetChannelRequest.pb(service.GetChannelRequest()) transcode.return_value = { "method": "post", @@ -17891,6 +17954,7 @@ def test_get_channel_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Channel() + post_with_metadata.return_value = resources.Channel(), metadata client.get_channel( request, @@ -17902,6 +17966,7 @@ def test_get_channel_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_channel_rest_bad_request(request_type=service.DeleteChannelRequest): @@ -17980,10 +18045,13 @@ def test_delete_channel_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_delete_channel" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_delete_channel_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_delete_channel" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.DeleteChannelRequest.pb(service.DeleteChannelRequest()) transcode.return_value = { "method": "post", @@ -18005,6 +18073,7 @@ def test_delete_channel_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_channel( request, @@ -18016,6 +18085,7 @@ def test_delete_channel_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_channel_rest_bad_request(request_type=service.UpdateChannelRequest): @@ -18304,10 +18374,13 @@ def test_update_channel_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_update_channel" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_update_channel_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_update_channel" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.UpdateChannelRequest.pb(service.UpdateChannelRequest()) transcode.return_value = { "method": "post", @@ -18329,6 +18402,7 @@ def test_update_channel_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_channel( request, @@ -18340,6 +18414,7 @@ def test_update_channel_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_start_channel_rest_bad_request(request_type=service.StartChannelRequest): @@ -18418,10 +18493,13 @@ def test_start_channel_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_start_channel" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_start_channel_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_start_channel" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.StartChannelRequest.pb(service.StartChannelRequest()) transcode.return_value = { "method": "post", @@ -18443,6 +18521,7 @@ def test_start_channel_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.start_channel( request, @@ -18454,6 +18533,7 @@ def test_start_channel_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_stop_channel_rest_bad_request(request_type=service.StopChannelRequest): @@ -18532,10 +18612,13 @@ def test_stop_channel_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_stop_channel" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_stop_channel_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_stop_channel" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.StopChannelRequest.pb(service.StopChannelRequest()) transcode.return_value = { "method": "post", @@ -18557,6 +18640,7 @@ def test_stop_channel_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.stop_channel( request, @@ -18568,6 +18652,7 @@ def test_stop_channel_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_input_rest_bad_request(request_type=service.CreateInputRequest): @@ -18765,10 +18850,13 @@ def test_create_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_create_input" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_create_input_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_create_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.CreateInputRequest.pb(service.CreateInputRequest()) transcode.return_value = { "method": "post", @@ -18790,6 +18878,7 @@ def test_create_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_input( request, @@ -18801,6 +18890,7 @@ def test_create_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_inputs_rest_bad_request(request_type=service.ListInputsRequest): @@ -18885,10 +18975,13 @@ def test_list_inputs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_list_inputs" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_list_inputs_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_list_inputs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.ListInputsRequest.pb(service.ListInputsRequest()) transcode.return_value = { "method": "post", @@ -18910,6 +19003,7 @@ def test_list_inputs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = service.ListInputsResponse() + post_with_metadata.return_value = service.ListInputsResponse(), metadata client.list_inputs( request, @@ -18921,6 +19015,7 @@ def test_list_inputs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_input_rest_bad_request(request_type=service.GetInputRequest): @@ -19009,10 +19104,13 @@ def test_get_input_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_get_input" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_get_input_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_get_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.GetInputRequest.pb(service.GetInputRequest()) transcode.return_value = { "method": "post", @@ -19034,6 +19132,7 @@ def test_get_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Input() + post_with_metadata.return_value = resources.Input(), metadata client.get_input( request, @@ -19045,6 +19144,7 @@ def test_get_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_input_rest_bad_request(request_type=service.DeleteInputRequest): @@ -19123,10 +19223,13 @@ def test_delete_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_delete_input" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_delete_input_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_delete_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.DeleteInputRequest.pb(service.DeleteInputRequest()) transcode.return_value = { "method": "post", @@ -19148,6 +19251,7 @@ def test_delete_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_input( request, @@ -19159,6 +19263,7 @@ def test_delete_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_input_rest_bad_request(request_type=service.UpdateInputRequest): @@ -19360,10 +19465,13 @@ def test_update_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_update_input" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_update_input_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_update_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.UpdateInputRequest.pb(service.UpdateInputRequest()) transcode.return_value = { "method": "post", @@ -19385,6 +19493,7 @@ def test_update_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_input( request, @@ -19396,6 +19505,7 @@ def test_update_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_event_rest_bad_request(request_type=service.CreateEventRequest): @@ -19574,10 +19684,13 @@ def test_create_event_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_create_event" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_create_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_create_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.CreateEventRequest.pb(service.CreateEventRequest()) transcode.return_value = { "method": "post", @@ -19599,6 +19712,7 @@ def test_create_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Event() + post_with_metadata.return_value = resources.Event(), metadata client.create_event( request, @@ -19610,6 +19724,7 @@ def test_create_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_events_rest_bad_request(request_type=service.ListEventsRequest): @@ -19694,10 +19809,13 @@ def test_list_events_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_list_events" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_list_events_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_list_events" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.ListEventsRequest.pb(service.ListEventsRequest()) transcode.return_value = { "method": "post", @@ -19719,6 +19837,7 @@ def test_list_events_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = service.ListEventsResponse() + post_with_metadata.return_value = service.ListEventsResponse(), metadata client.list_events( request, @@ -19730,6 +19849,7 @@ def test_list_events_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_event_rest_bad_request(request_type=service.GetEventRequest): @@ -19820,10 +19940,13 @@ def test_get_event_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_get_event" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_get_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_get_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.GetEventRequest.pb(service.GetEventRequest()) transcode.return_value = { "method": "post", @@ -19845,6 +19968,7 @@ def test_get_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Event() + post_with_metadata.return_value = resources.Event(), metadata client.get_event( request, @@ -19856,6 +19980,7 @@ def test_get_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_event_rest_bad_request(request_type=service.DeleteEventRequest): @@ -20049,10 +20174,13 @@ def test_list_clips_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_list_clips" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_list_clips_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_list_clips" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.ListClipsRequest.pb(service.ListClipsRequest()) transcode.return_value = { "method": "post", @@ -20074,6 +20202,7 @@ def test_list_clips_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = service.ListClipsResponse() + post_with_metadata.return_value = service.ListClipsResponse(), metadata client.list_clips( request, @@ -20085,6 +20214,7 @@ def test_list_clips_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_clip_rest_bad_request(request_type=service.GetClipRequest): @@ -20175,10 +20305,13 @@ def test_get_clip_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_get_clip" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_get_clip_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_get_clip" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.GetClipRequest.pb(service.GetClipRequest()) transcode.return_value = { "method": "post", @@ -20200,6 +20333,7 @@ def test_get_clip_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Clip() + post_with_metadata.return_value = resources.Clip(), metadata client.get_clip( request, @@ -20211,6 +20345,7 @@ def test_get_clip_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_clip_rest_bad_request(request_type=service.CreateClipRequest): @@ -20379,10 +20514,13 @@ def test_create_clip_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_create_clip" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_create_clip_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_create_clip" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.CreateClipRequest.pb(service.CreateClipRequest()) transcode.return_value = { "method": "post", @@ -20404,6 +20542,7 @@ def test_create_clip_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_clip( request, @@ -20415,6 +20554,7 @@ def test_create_clip_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_clip_rest_bad_request(request_type=service.DeleteClipRequest): @@ -20497,10 +20637,13 @@ def test_delete_clip_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_delete_clip" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_delete_clip_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_delete_clip" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.DeleteClipRequest.pb(service.DeleteClipRequest()) transcode.return_value = { "method": "post", @@ -20522,6 +20665,7 @@ def test_delete_clip_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_clip( request, @@ -20533,6 +20677,7 @@ def test_delete_clip_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_asset_rest_bad_request(request_type=service.CreateAssetRequest): @@ -20698,10 +20843,13 @@ def test_create_asset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_create_asset" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_create_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_create_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.CreateAssetRequest.pb(service.CreateAssetRequest()) transcode.return_value = { "method": "post", @@ -20723,6 +20871,7 @@ def test_create_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_asset( request, @@ -20734,6 +20883,7 @@ def test_create_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_asset_rest_bad_request(request_type=service.DeleteAssetRequest): @@ -20812,10 +20962,13 @@ def test_delete_asset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_delete_asset" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_delete_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_delete_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.DeleteAssetRequest.pb(service.DeleteAssetRequest()) transcode.return_value = { "method": "post", @@ -20837,6 +20990,7 @@ def test_delete_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_asset( request, @@ -20848,6 +21002,7 @@ def test_delete_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_asset_rest_bad_request(request_type=service.GetAssetRequest): @@ -20934,10 +21089,13 @@ def test_get_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_get_asset" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_get_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_get_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.GetAssetRequest.pb(service.GetAssetRequest()) transcode.return_value = { "method": "post", @@ -20959,6 +21117,7 @@ def test_get_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Asset() + post_with_metadata.return_value = resources.Asset(), metadata client.get_asset( request, @@ -20970,6 +21129,7 @@ def test_get_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_assets_rest_bad_request(request_type=service.ListAssetsRequest): @@ -21054,10 +21214,13 @@ def test_list_assets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_list_assets" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_list_assets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_list_assets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.ListAssetsRequest.pb(service.ListAssetsRequest()) transcode.return_value = { "method": "post", @@ -21079,6 +21242,7 @@ def test_list_assets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = service.ListAssetsResponse() + post_with_metadata.return_value = service.ListAssetsResponse(), metadata client.list_assets( request, @@ -21090,6 +21254,7 @@ def test_list_assets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_pool_rest_bad_request(request_type=service.GetPoolRequest): @@ -21172,10 +21337,13 @@ def test_get_pool_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_get_pool" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_get_pool_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_get_pool" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.GetPoolRequest.pb(service.GetPoolRequest()) transcode.return_value = { "method": "post", @@ -21197,6 +21365,7 @@ def test_get_pool_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Pool() + post_with_metadata.return_value = resources.Pool(), metadata client.get_pool( request, @@ -21208,6 +21377,7 @@ def test_get_pool_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_pool_rest_bad_request(request_type=service.UpdatePoolRequest): @@ -21364,10 +21534,13 @@ def test_update_pool_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LivestreamServiceRestInterceptor, "post_update_pool" ) as post, mock.patch.object( + transports.LivestreamServiceRestInterceptor, "post_update_pool_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LivestreamServiceRestInterceptor, "pre_update_pool" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = service.UpdatePoolRequest.pb(service.UpdatePoolRequest()) transcode.return_value = { "method": "post", @@ -21389,6 +21562,7 @@ def test_update_pool_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_pool( request, @@ -21400,6 +21574,7 @@ def test_update_pool_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-video-stitcher/google/cloud/video/stitcher/gapic_version.py b/packages/google-cloud-video-stitcher/google/cloud/video/stitcher/gapic_version.py index 3289d4e1c936..558c8aab67c5 100644 --- a/packages/google-cloud-video-stitcher/google/cloud/video/stitcher/gapic_version.py +++ b/packages/google-cloud-video-stitcher/google/cloud/video/stitcher/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.7.15" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-video-stitcher/google/cloud/video/stitcher_v1/gapic_version.py b/packages/google-cloud-video-stitcher/google/cloud/video/stitcher_v1/gapic_version.py index 3289d4e1c936..558c8aab67c5 100644 --- a/packages/google-cloud-video-stitcher/google/cloud/video/stitcher_v1/gapic_version.py +++ b/packages/google-cloud-video-stitcher/google/cloud/video/stitcher_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.7.15" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-video-stitcher/google/cloud/video/stitcher_v1/services/video_stitcher_service/client.py b/packages/google-cloud-video-stitcher/google/cloud/video/stitcher_v1/services/video_stitcher_service/client.py index 1178e6163405..c7c25653e266 100644 --- a/packages/google-cloud-video-stitcher/google/cloud/video/stitcher_v1/services/video_stitcher_service/client.py +++ b/packages/google-cloud-video-stitcher/google/cloud/video/stitcher_v1/services/video_stitcher_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -689,6 +691,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -4714,16 +4743,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -4769,16 +4802,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, diff --git a/packages/google-cloud-video-stitcher/samples/generated_samples/snippet_metadata_google.cloud.video.stitcher.v1.json b/packages/google-cloud-video-stitcher/samples/generated_samples/snippet_metadata_google.cloud.video.stitcher.v1.json index 3b791bd7d4e5..2e9dbfeedb7e 100644 --- a/packages/google-cloud-video-stitcher/samples/generated_samples/snippet_metadata_google.cloud.video.stitcher.v1.json +++ b/packages/google-cloud-video-stitcher/samples/generated_samples/snippet_metadata_google.cloud.video.stitcher.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-video-stitcher", - "version": "0.7.15" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-video-stitcher/tests/unit/gapic/stitcher_v1/test_video_stitcher_service.py b/packages/google-cloud-video-stitcher/tests/unit/gapic/stitcher_v1/test_video_stitcher_service.py index e0a3a3d5a62d..fda1ee4c0646 100644 --- a/packages/google-cloud-video-stitcher/tests/unit/gapic/stitcher_v1/test_video_stitcher_service.py +++ b/packages/google-cloud-video-stitcher/tests/unit/gapic/stitcher_v1/test_video_stitcher_service.py @@ -22,6 +22,7 @@ except ImportError: # pragma: NO COVER import mock +import json import math from google.api_core import api_core_version @@ -80,6 +81,13 @@ vod_configs, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -353,6 +361,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VideoStitcherServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VideoStitcherServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ diff --git a/packages/google-cloud-video-transcoder/google/cloud/video/transcoder/gapic_version.py b/packages/google-cloud-video-transcoder/google/cloud/video/transcoder/gapic_version.py index 2159c8af6f8e..558c8aab67c5 100644 --- a/packages/google-cloud-video-transcoder/google/cloud/video/transcoder/gapic_version.py +++ b/packages/google-cloud-video-transcoder/google/cloud/video/transcoder/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.14.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/gapic_version.py b/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/gapic_version.py index 2159c8af6f8e..558c8aab67c5 100644 --- a/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/gapic_version.py +++ b/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.14.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/services/transcoder_service/client.py b/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/services/transcoder_service/client.py index 4771712408cc..b9eb0497cd7b 100644 --- a/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/services/transcoder_service/client.py +++ b/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/services/transcoder_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -516,6 +518,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/services/transcoder_service/transports/rest.py b/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/services/transcoder_service/transports/rest.py index 0076df3c6aee..3e61e8d187cc 100644 --- a/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/services/transcoder_service/transports/rest.py +++ b/packages/google-cloud-video-transcoder/google/cloud/video/transcoder_v1/services/transcoder_service/transports/rest.py @@ -146,12 +146,33 @@ def pre_create_job( def post_create_job(self, response: resources.Job) -> resources.Job: """Post-rpc interceptor for create_job - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_job_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranscoderService server but before - it is returned to user code. + it is returned to user code. This `post_create_job` interceptor runs + before the `post_create_job_with_metadata` interceptor. """ return response + def post_create_job_with_metadata( + self, response: resources.Job, metadata: Sequence[Tuple[str, Union[str, bytes]]] + ) -> Tuple[resources.Job, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_job + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranscoderService server but before it is returned to user code. + + We recommend only using this `post_create_job_with_metadata` + interceptor in new development instead of the `post_create_job` interceptor. + When both interceptors are used, this `post_create_job_with_metadata` interceptor runs after the + `post_create_job` interceptor. The (possibly modified) response returned by + `post_create_job` will be passed to + `post_create_job_with_metadata`. + """ + return response, metadata + def pre_create_job_template( self, request: services.CreateJobTemplateRequest, @@ -171,12 +192,35 @@ def post_create_job_template( ) -> resources.JobTemplate: """Post-rpc interceptor for create_job_template - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_job_template_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranscoderService server but before - it is returned to user code. + it is returned to user code. This `post_create_job_template` interceptor runs + before the `post_create_job_template_with_metadata` interceptor. """ return response + def post_create_job_template_with_metadata( + self, + response: resources.JobTemplate, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.JobTemplate, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_job_template + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranscoderService server but before it is returned to user code. + + We recommend only using this `post_create_job_template_with_metadata` + interceptor in new development instead of the `post_create_job_template` interceptor. + When both interceptors are used, this `post_create_job_template_with_metadata` interceptor runs after the + `post_create_job_template` interceptor. The (possibly modified) response returned by + `post_create_job_template` will be passed to + `post_create_job_template_with_metadata`. + """ + return response, metadata + def pre_delete_job( self, request: services.DeleteJobRequest, @@ -218,12 +262,33 @@ def pre_get_job( def post_get_job(self, response: resources.Job) -> resources.Job: """Post-rpc interceptor for get_job - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_job_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranscoderService server but before - it is returned to user code. + it is returned to user code. This `post_get_job` interceptor runs + before the `post_get_job_with_metadata` interceptor. """ return response + def post_get_job_with_metadata( + self, response: resources.Job, metadata: Sequence[Tuple[str, Union[str, bytes]]] + ) -> Tuple[resources.Job, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_job + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranscoderService server but before it is returned to user code. + + We recommend only using this `post_get_job_with_metadata` + interceptor in new development instead of the `post_get_job` interceptor. + When both interceptors are used, this `post_get_job_with_metadata` interceptor runs after the + `post_get_job` interceptor. The (possibly modified) response returned by + `post_get_job` will be passed to + `post_get_job_with_metadata`. + """ + return response, metadata + def pre_get_job_template( self, request: services.GetJobTemplateRequest, @@ -241,12 +306,35 @@ def post_get_job_template( ) -> resources.JobTemplate: """Post-rpc interceptor for get_job_template - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_job_template_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranscoderService server but before - it is returned to user code. + it is returned to user code. This `post_get_job_template` interceptor runs + before the `post_get_job_template_with_metadata` interceptor. """ return response + def post_get_job_template_with_metadata( + self, + response: resources.JobTemplate, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[resources.JobTemplate, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_job_template + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranscoderService server but before it is returned to user code. + + We recommend only using this `post_get_job_template_with_metadata` + interceptor in new development instead of the `post_get_job_template` interceptor. + When both interceptors are used, this `post_get_job_template_with_metadata` interceptor runs after the + `post_get_job_template` interceptor. The (possibly modified) response returned by + `post_get_job_template` will be passed to + `post_get_job_template_with_metadata`. + """ + return response, metadata + def pre_list_jobs( self, request: services.ListJobsRequest, @@ -264,12 +352,35 @@ def post_list_jobs( ) -> services.ListJobsResponse: """Post-rpc interceptor for list_jobs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_jobs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranscoderService server but before - it is returned to user code. + it is returned to user code. This `post_list_jobs` interceptor runs + before the `post_list_jobs_with_metadata` interceptor. """ return response + def post_list_jobs_with_metadata( + self, + response: services.ListJobsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[services.ListJobsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_jobs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranscoderService server but before it is returned to user code. + + We recommend only using this `post_list_jobs_with_metadata` + interceptor in new development instead of the `post_list_jobs` interceptor. + When both interceptors are used, this `post_list_jobs_with_metadata` interceptor runs after the + `post_list_jobs` interceptor. The (possibly modified) response returned by + `post_list_jobs` will be passed to + `post_list_jobs_with_metadata`. + """ + return response, metadata + def pre_list_job_templates( self, request: services.ListJobTemplatesRequest, @@ -289,12 +400,37 @@ def post_list_job_templates( ) -> services.ListJobTemplatesResponse: """Post-rpc interceptor for list_job_templates - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_job_templates_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the TranscoderService server but before - it is returned to user code. + it is returned to user code. This `post_list_job_templates` interceptor runs + before the `post_list_job_templates_with_metadata` interceptor. """ return response + def post_list_job_templates_with_metadata( + self, + response: services.ListJobTemplatesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + services.ListJobTemplatesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_job_templates + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the TranscoderService server but before it is returned to user code. + + We recommend only using this `post_list_job_templates_with_metadata` + interceptor in new development instead of the `post_list_job_templates` interceptor. + When both interceptors are used, this `post_list_job_templates_with_metadata` interceptor runs after the + `post_list_job_templates` interceptor. The (possibly modified) response returned by + `post_list_job_templates` will be passed to + `post_list_job_templates_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class TranscoderServiceRestStub: @@ -511,6 +647,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_job(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_job_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -661,6 +801,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_job_template(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_job_template_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1021,6 +1165,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_job(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_job_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1165,6 +1313,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_job_template(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_job_template_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1307,6 +1459,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_jobs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_jobs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1453,6 +1609,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_job_templates(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_job_templates_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-video-transcoder/samples/generated_samples/snippet_metadata_google.cloud.video.transcoder.v1.json b/packages/google-cloud-video-transcoder/samples/generated_samples/snippet_metadata_google.cloud.video.transcoder.v1.json index 0bdcce037be0..5c4b962d53e7 100644 --- a/packages/google-cloud-video-transcoder/samples/generated_samples/snippet_metadata_google.cloud.video.transcoder.v1.json +++ b/packages/google-cloud-video-transcoder/samples/generated_samples/snippet_metadata_google.cloud.video.transcoder.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-video-transcoder", - "version": "1.14.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-video-transcoder/tests/unit/gapic/transcoder_v1/test_transcoder_service.py b/packages/google-cloud-video-transcoder/tests/unit/gapic/transcoder_v1/test_transcoder_service.py index 5022a6c73302..2d6d85b2d93a 100644 --- a/packages/google-cloud-video-transcoder/tests/unit/gapic/transcoder_v1/test_transcoder_service.py +++ b/packages/google-cloud-video-transcoder/tests/unit/gapic/transcoder_v1/test_transcoder_service.py @@ -64,6 +64,13 @@ ) from google.cloud.video.transcoder_v1.types import resources, services +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -331,6 +338,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = TranscoderServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = TranscoderServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -6777,10 +6827,13 @@ def test_create_job_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranscoderServiceRestInterceptor, "post_create_job" ) as post, mock.patch.object( + transports.TranscoderServiceRestInterceptor, "post_create_job_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranscoderServiceRestInterceptor, "pre_create_job" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = services.CreateJobRequest.pb(services.CreateJobRequest()) transcode.return_value = { "method": "post", @@ -6802,6 +6855,7 @@ def test_create_job_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Job() + post_with_metadata.return_value = resources.Job(), metadata client.create_job( request, @@ -6813,6 +6867,7 @@ def test_create_job_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_jobs_rest_bad_request(request_type=services.ListJobsRequest): @@ -6897,10 +6952,13 @@ def test_list_jobs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranscoderServiceRestInterceptor, "post_list_jobs" ) as post, mock.patch.object( + transports.TranscoderServiceRestInterceptor, "post_list_jobs_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranscoderServiceRestInterceptor, "pre_list_jobs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = services.ListJobsRequest.pb(services.ListJobsRequest()) transcode.return_value = { "method": "post", @@ -6922,6 +6980,7 @@ def test_list_jobs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = services.ListJobsResponse() + post_with_metadata.return_value = services.ListJobsResponse(), metadata client.list_jobs( request, @@ -6933,6 +6992,7 @@ def test_list_jobs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_job_rest_bad_request(request_type=services.GetJobRequest): @@ -7030,10 +7090,13 @@ def test_get_job_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranscoderServiceRestInterceptor, "post_get_job" ) as post, mock.patch.object( + transports.TranscoderServiceRestInterceptor, "post_get_job_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.TranscoderServiceRestInterceptor, "pre_get_job" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = services.GetJobRequest.pb(services.GetJobRequest()) transcode.return_value = { "method": "post", @@ -7055,6 +7118,7 @@ def test_get_job_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.Job() + post_with_metadata.return_value = resources.Job(), metadata client.get_job( request, @@ -7066,6 +7130,7 @@ def test_get_job_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_job_rest_bad_request(request_type=services.DeleteJobRequest): @@ -7553,10 +7618,14 @@ def test_create_job_template_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranscoderServiceRestInterceptor, "post_create_job_template" ) as post, mock.patch.object( + transports.TranscoderServiceRestInterceptor, + "post_create_job_template_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranscoderServiceRestInterceptor, "pre_create_job_template" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = services.CreateJobTemplateRequest.pb( services.CreateJobTemplateRequest() ) @@ -7580,6 +7649,7 @@ def test_create_job_template_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.JobTemplate() + post_with_metadata.return_value = resources.JobTemplate(), metadata client.create_job_template( request, @@ -7591,6 +7661,7 @@ def test_create_job_template_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_job_templates_rest_bad_request( @@ -7677,10 +7748,14 @@ def test_list_job_templates_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranscoderServiceRestInterceptor, "post_list_job_templates" ) as post, mock.patch.object( + transports.TranscoderServiceRestInterceptor, + "post_list_job_templates_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranscoderServiceRestInterceptor, "pre_list_job_templates" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = services.ListJobTemplatesRequest.pb( services.ListJobTemplatesRequest() ) @@ -7706,6 +7781,7 @@ def test_list_job_templates_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = services.ListJobTemplatesResponse() + post_with_metadata.return_value = services.ListJobTemplatesResponse(), metadata client.list_job_templates( request, @@ -7717,6 +7793,7 @@ def test_list_job_templates_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_job_template_rest_bad_request(request_type=services.GetJobTemplateRequest): @@ -7799,10 +7876,14 @@ def test_get_job_template_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.TranscoderServiceRestInterceptor, "post_get_job_template" ) as post, mock.patch.object( + transports.TranscoderServiceRestInterceptor, + "post_get_job_template_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.TranscoderServiceRestInterceptor, "pre_get_job_template" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = services.GetJobTemplateRequest.pb(services.GetJobTemplateRequest()) transcode.return_value = { "method": "post", @@ -7824,6 +7905,7 @@ def test_get_job_template_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = resources.JobTemplate() + post_with_metadata.return_value = resources.JobTemplate(), metadata client.get_job_template( request, @@ -7835,6 +7917,7 @@ def test_get_job_template_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_job_template_rest_bad_request( diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence/gapic_version.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence/gapic_version.py index 60165d54bf8a..558c8aab67c5 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence/gapic_version.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/gapic_version.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/gapic_version.py index 60165d54bf8a..558c8aab67c5 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/gapic_version.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/services/video_intelligence_service/client.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/services/video_intelligence_service/client.py index b3e545349294..b09ca9d8e3be 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/services/video_intelligence_service/client.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/services/video_intelligence_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -466,6 +468,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/services/video_intelligence_service/transports/rest.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/services/video_intelligence_service/transports/rest.py index e72c2ce9bf35..bb03e42cdb38 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/services/video_intelligence_service/transports/rest.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1/services/video_intelligence_service/transports/rest.py @@ -102,12 +102,35 @@ def post_annotate_video( ) -> operations_pb2.Operation: """Post-rpc interceptor for annotate_video - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_annotate_video_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VideoIntelligenceService server but before - it is returned to user code. + it is returned to user code. This `post_annotate_video` interceptor runs + before the `post_annotate_video_with_metadata` interceptor. """ return response + def post_annotate_video_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for annotate_video + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VideoIntelligenceService server but before it is returned to user code. + + We recommend only using this `post_annotate_video_with_metadata` + interceptor in new development instead of the `post_annotate_video` interceptor. + When both interceptors are used, this `post_annotate_video_with_metadata` interceptor runs after the + `post_annotate_video` interceptor. The (possibly modified) response returned by + `post_annotate_video` will be passed to + `post_annotate_video_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class VideoIntelligenceServiceRestStub: @@ -388,6 +411,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_annotate_video(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_annotate_video_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/gapic_version.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/gapic_version.py index 60165d54bf8a..558c8aab67c5 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/gapic_version.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/services/video_intelligence_service/client.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/services/video_intelligence_service/client.py index 57dff58c1232..64a44a78104d 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/services/video_intelligence_service/client.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/services/video_intelligence_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -466,6 +468,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/services/video_intelligence_service/transports/rest.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/services/video_intelligence_service/transports/rest.py index ecfec18ca101..382d0dc728a3 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/services/video_intelligence_service/transports/rest.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1beta2/services/video_intelligence_service/transports/rest.py @@ -102,12 +102,35 @@ def post_annotate_video( ) -> operations_pb2.Operation: """Post-rpc interceptor for annotate_video - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_annotate_video_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VideoIntelligenceService server but before - it is returned to user code. + it is returned to user code. This `post_annotate_video` interceptor runs + before the `post_annotate_video_with_metadata` interceptor. """ return response + def post_annotate_video_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for annotate_video + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VideoIntelligenceService server but before it is returned to user code. + + We recommend only using this `post_annotate_video_with_metadata` + interceptor in new development instead of the `post_annotate_video` interceptor. + When both interceptors are used, this `post_annotate_video_with_metadata` interceptor runs after the + `post_annotate_video` interceptor. The (possibly modified) response returned by + `post_annotate_video` will be passed to + `post_annotate_video_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class VideoIntelligenceServiceRestStub: @@ -388,6 +411,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_annotate_video(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_annotate_video_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/gapic_version.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/gapic_version.py index 60165d54bf8a..558c8aab67c5 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/gapic_version.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/services/video_intelligence_service/client.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/services/video_intelligence_service/client.py index c41f9af5be61..ce79616d3427 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/services/video_intelligence_service/client.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/services/video_intelligence_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -466,6 +468,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/services/video_intelligence_service/transports/rest.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/services/video_intelligence_service/transports/rest.py index 473bbebeb681..17e1850d9315 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/services/video_intelligence_service/transports/rest.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p1beta1/services/video_intelligence_service/transports/rest.py @@ -102,12 +102,35 @@ def post_annotate_video( ) -> operations_pb2.Operation: """Post-rpc interceptor for annotate_video - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_annotate_video_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VideoIntelligenceService server but before - it is returned to user code. + it is returned to user code. This `post_annotate_video` interceptor runs + before the `post_annotate_video_with_metadata` interceptor. """ return response + def post_annotate_video_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for annotate_video + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VideoIntelligenceService server but before it is returned to user code. + + We recommend only using this `post_annotate_video_with_metadata` + interceptor in new development instead of the `post_annotate_video` interceptor. + When both interceptors are used, this `post_annotate_video_with_metadata` interceptor runs after the + `post_annotate_video` interceptor. The (possibly modified) response returned by + `post_annotate_video` will be passed to + `post_annotate_video_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class VideoIntelligenceServiceRestStub: @@ -388,6 +411,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_annotate_video(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_annotate_video_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/gapic_version.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/gapic_version.py index 60165d54bf8a..558c8aab67c5 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/gapic_version.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/services/video_intelligence_service/client.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/services/video_intelligence_service/client.py index 067889ada479..1b6a3683e6d6 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/services/video_intelligence_service/client.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/services/video_intelligence_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -466,6 +468,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/services/video_intelligence_service/transports/rest.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/services/video_intelligence_service/transports/rest.py index 18ee902a0f73..bb7d67546f61 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/services/video_intelligence_service/transports/rest.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p2beta1/services/video_intelligence_service/transports/rest.py @@ -102,12 +102,35 @@ def post_annotate_video( ) -> operations_pb2.Operation: """Post-rpc interceptor for annotate_video - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_annotate_video_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VideoIntelligenceService server but before - it is returned to user code. + it is returned to user code. This `post_annotate_video` interceptor runs + before the `post_annotate_video_with_metadata` interceptor. """ return response + def post_annotate_video_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for annotate_video + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VideoIntelligenceService server but before it is returned to user code. + + We recommend only using this `post_annotate_video_with_metadata` + interceptor in new development instead of the `post_annotate_video` interceptor. + When both interceptors are used, this `post_annotate_video_with_metadata` interceptor runs after the + `post_annotate_video` interceptor. The (possibly modified) response returned by + `post_annotate_video` will be passed to + `post_annotate_video_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class VideoIntelligenceServiceRestStub: @@ -388,6 +411,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_annotate_video(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_annotate_video_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/gapic_version.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/gapic_version.py index 60165d54bf8a..558c8aab67c5 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/gapic_version.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "2.15.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/services/streaming_video_intelligence_service/client.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/services/streaming_video_intelligence_service/client.py index 854840dace8e..461305c99a50 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/services/streaming_video_intelligence_service/client.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/services/streaming_video_intelligence_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -474,6 +476,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/services/video_intelligence_service/client.py b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/services/video_intelligence_service/client.py index c67589a85a2c..0002102d77fa 100644 --- a/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/services/video_intelligence_service/client.py +++ b/packages/google-cloud-videointelligence/google/cloud/videointelligence_v1p3beta1/services/video_intelligence_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -464,6 +466,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1.json b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1.json index 3caba4765eb0..e198e62e8a23 100644 --- a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1.json +++ b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-videointelligence", - "version": "2.15.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1beta2.json b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1beta2.json index 3a9286241ceb..3f3ec25e9b73 100644 --- a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1beta2.json +++ b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1beta2.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-videointelligence", - "version": "2.15.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p1beta1.json b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p1beta1.json index 5a3316db5996..99531c7a7090 100644 --- a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p1beta1.json +++ b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-videointelligence", - "version": "2.15.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p2beta1.json b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p2beta1.json index 9a9099e8ebe8..5fad06591e51 100644 --- a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p2beta1.json +++ b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p2beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-videointelligence", - "version": "2.15.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p3beta1.json b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p3beta1.json index 6493ab7a95ef..b409a29f032a 100644 --- a/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p3beta1.json +++ b/packages/google-cloud-videointelligence/samples/generated_samples/snippet_metadata_google.cloud.videointelligence.v1p3beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-videointelligence", - "version": "2.15.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1/test_video_intelligence_service.py b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1/test_video_intelligence_service.py index abe1746b3ca4..2b63e5018167 100644 --- a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1/test_video_intelligence_service.py +++ b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1/test_video_intelligence_service.py @@ -70,6 +70,13 @@ ) from google.cloud.videointelligence_v1.types import video_intelligence +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -345,6 +352,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -1845,10 +1895,14 @@ def test_annotate_video_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VideoIntelligenceServiceRestInterceptor, "post_annotate_video" ) as post, mock.patch.object( + transports.VideoIntelligenceServiceRestInterceptor, + "post_annotate_video_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VideoIntelligenceServiceRestInterceptor, "pre_annotate_video" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = video_intelligence.AnnotateVideoRequest.pb( video_intelligence.AnnotateVideoRequest() ) @@ -1872,6 +1926,7 @@ def test_annotate_video_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.annotate_video( request, @@ -1883,6 +1938,7 @@ def test_annotate_video_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1beta2/test_video_intelligence_service.py b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1beta2/test_video_intelligence_service.py index 326527bea4a5..318a59d52f81 100644 --- a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1beta2/test_video_intelligence_service.py +++ b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1beta2/test_video_intelligence_service.py @@ -70,6 +70,13 @@ ) from google.cloud.videointelligence_v1beta2.types import video_intelligence +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -345,6 +352,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -1845,10 +1895,14 @@ def test_annotate_video_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VideoIntelligenceServiceRestInterceptor, "post_annotate_video" ) as post, mock.patch.object( + transports.VideoIntelligenceServiceRestInterceptor, + "post_annotate_video_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VideoIntelligenceServiceRestInterceptor, "pre_annotate_video" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = video_intelligence.AnnotateVideoRequest.pb( video_intelligence.AnnotateVideoRequest() ) @@ -1872,6 +1926,7 @@ def test_annotate_video_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.annotate_video( request, @@ -1883,6 +1938,7 @@ def test_annotate_video_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p1beta1/test_video_intelligence_service.py b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p1beta1/test_video_intelligence_service.py index ed326cef6887..ef37193be303 100644 --- a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p1beta1/test_video_intelligence_service.py +++ b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p1beta1/test_video_intelligence_service.py @@ -70,6 +70,13 @@ ) from google.cloud.videointelligence_v1p1beta1.types import video_intelligence +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -345,6 +352,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -1845,10 +1895,14 @@ def test_annotate_video_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VideoIntelligenceServiceRestInterceptor, "post_annotate_video" ) as post, mock.patch.object( + transports.VideoIntelligenceServiceRestInterceptor, + "post_annotate_video_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VideoIntelligenceServiceRestInterceptor, "pre_annotate_video" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = video_intelligence.AnnotateVideoRequest.pb( video_intelligence.AnnotateVideoRequest() ) @@ -1872,6 +1926,7 @@ def test_annotate_video_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.annotate_video( request, @@ -1883,6 +1938,7 @@ def test_annotate_video_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p2beta1/test_video_intelligence_service.py b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p2beta1/test_video_intelligence_service.py index 1c49e3264c22..51da1b5c43bc 100644 --- a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p2beta1/test_video_intelligence_service.py +++ b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p2beta1/test_video_intelligence_service.py @@ -70,6 +70,13 @@ ) from google.cloud.videointelligence_v1p2beta1.types import video_intelligence +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -345,6 +352,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -1845,10 +1895,14 @@ def test_annotate_video_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VideoIntelligenceServiceRestInterceptor, "post_annotate_video" ) as post, mock.patch.object( + transports.VideoIntelligenceServiceRestInterceptor, + "post_annotate_video_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VideoIntelligenceServiceRestInterceptor, "pre_annotate_video" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = video_intelligence.AnnotateVideoRequest.pb( video_intelligence.AnnotateVideoRequest() ) @@ -1872,6 +1926,7 @@ def test_annotate_video_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.annotate_video( request, @@ -1883,6 +1938,7 @@ def test_annotate_video_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p3beta1/test_streaming_video_intelligence_service.py b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p3beta1/test_streaming_video_intelligence_service.py index c1779f5e1d34..57e9868f12ea 100644 --- a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p3beta1/test_streaming_video_intelligence_service.py +++ b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p3beta1/test_streaming_video_intelligence_service.py @@ -22,6 +22,7 @@ except ImportError: # pragma: NO COVER import mock +import json import math from google.api_core import api_core_version @@ -55,6 +56,13 @@ ) from google.cloud.videointelligence_v1p3beta1.types import video_intelligence +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -345,6 +353,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = StreamingVideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = StreamingVideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ diff --git a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p3beta1/test_video_intelligence_service.py b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p3beta1/test_video_intelligence_service.py index de916b9bab13..2e1fc342546e 100644 --- a/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p3beta1/test_video_intelligence_service.py +++ b/packages/google-cloud-videointelligence/tests/unit/gapic/videointelligence_v1p3beta1/test_video_intelligence_service.py @@ -22,6 +22,7 @@ except ImportError: # pragma: NO COVER import mock +import json import math from google.api_core import api_core_version @@ -65,6 +66,13 @@ ) from google.cloud.videointelligence_v1p3beta1.types import video_intelligence +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -340,6 +348,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VideoIntelligenceServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ diff --git a/packages/google-cloud-vision/google/cloud/vision/gapic_version.py b/packages/google-cloud-vision/google/cloud/vision/gapic_version.py index 4643bc4d8d76..558c8aab67c5 100644 --- a/packages/google-cloud-vision/google/cloud/vision/gapic_version.py +++ b/packages/google-cloud-vision/google/cloud/vision/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.9.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vision/google/cloud/vision_v1/gapic_version.py b/packages/google-cloud-vision/google/cloud/vision_v1/gapic_version.py index 4643bc4d8d76..558c8aab67c5 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1/gapic_version.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.9.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vision/google/cloud/vision_v1/services/image_annotator/client.py b/packages/google-cloud-vision/google/cloud/vision_v1/services/image_annotator/client.py index d6412d5acdb5..8490cf3c333e 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1/services/image_annotator/client.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1/services/image_annotator/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -515,6 +517,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -1245,16 +1274,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-vision/google/cloud/vision_v1/services/image_annotator/transports/rest.py b/packages/google-cloud-vision/google/cloud/vision_v1/services/image_annotator/transports/rest.py index cf7fb6976885..d1d226e9c0fa 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1/services/image_annotator/transports/rest.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1/services/image_annotator/transports/rest.py @@ -127,12 +127,35 @@ def post_async_batch_annotate_files( ) -> operations_pb2.Operation: """Post-rpc interceptor for async_batch_annotate_files - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_async_batch_annotate_files_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_async_batch_annotate_files` interceptor runs + before the `post_async_batch_annotate_files_with_metadata` interceptor. """ return response + def post_async_batch_annotate_files_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for async_batch_annotate_files + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_async_batch_annotate_files_with_metadata` + interceptor in new development instead of the `post_async_batch_annotate_files` interceptor. + When both interceptors are used, this `post_async_batch_annotate_files_with_metadata` interceptor runs after the + `post_async_batch_annotate_files` interceptor. The (possibly modified) response returned by + `post_async_batch_annotate_files` will be passed to + `post_async_batch_annotate_files_with_metadata`. + """ + return response, metadata + def pre_async_batch_annotate_images( self, request: image_annotator.AsyncBatchAnnotateImagesRequest, @@ -153,12 +176,35 @@ def post_async_batch_annotate_images( ) -> operations_pb2.Operation: """Post-rpc interceptor for async_batch_annotate_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_async_batch_annotate_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_async_batch_annotate_images` interceptor runs + before the `post_async_batch_annotate_images_with_metadata` interceptor. """ return response + def post_async_batch_annotate_images_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for async_batch_annotate_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_async_batch_annotate_images_with_metadata` + interceptor in new development instead of the `post_async_batch_annotate_images` interceptor. + When both interceptors are used, this `post_async_batch_annotate_images_with_metadata` interceptor runs after the + `post_async_batch_annotate_images` interceptor. The (possibly modified) response returned by + `post_async_batch_annotate_images` will be passed to + `post_async_batch_annotate_images_with_metadata`. + """ + return response, metadata + def pre_batch_annotate_files( self, request: image_annotator.BatchAnnotateFilesRequest, @@ -179,12 +225,38 @@ def post_batch_annotate_files( ) -> image_annotator.BatchAnnotateFilesResponse: """Post-rpc interceptor for batch_annotate_files - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_annotate_files_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_batch_annotate_files` interceptor runs + before the `post_batch_annotate_files_with_metadata` interceptor. """ return response + def post_batch_annotate_files_with_metadata( + self, + response: image_annotator.BatchAnnotateFilesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + image_annotator.BatchAnnotateFilesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_annotate_files + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_batch_annotate_files_with_metadata` + interceptor in new development instead of the `post_batch_annotate_files` interceptor. + When both interceptors are used, this `post_batch_annotate_files_with_metadata` interceptor runs after the + `post_batch_annotate_files` interceptor. The (possibly modified) response returned by + `post_batch_annotate_files` will be passed to + `post_batch_annotate_files_with_metadata`. + """ + return response, metadata + def pre_batch_annotate_images( self, request: image_annotator.BatchAnnotateImagesRequest, @@ -205,12 +277,38 @@ def post_batch_annotate_images( ) -> image_annotator.BatchAnnotateImagesResponse: """Post-rpc interceptor for batch_annotate_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_annotate_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_batch_annotate_images` interceptor runs + before the `post_batch_annotate_images_with_metadata` interceptor. """ return response + def post_batch_annotate_images_with_metadata( + self, + response: image_annotator.BatchAnnotateImagesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + image_annotator.BatchAnnotateImagesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_annotate_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_batch_annotate_images_with_metadata` + interceptor in new development instead of the `post_batch_annotate_images` interceptor. + When both interceptors are used, this `post_batch_annotate_images_with_metadata` interceptor runs after the + `post_batch_annotate_images` interceptor. The (possibly modified) response returned by + `post_batch_annotate_images` will be passed to + `post_batch_annotate_images_with_metadata`. + """ + return response, metadata + def pre_get_operation( self, request: operations_pb2.GetOperationRequest, @@ -505,6 +603,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_async_batch_annotate_files(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_async_batch_annotate_files_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -659,6 +761,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_async_batch_annotate_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_async_batch_annotate_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -808,6 +914,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_annotate_files(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_annotate_files_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -962,6 +1072,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_annotate_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_annotate_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vision/google/cloud/vision_v1/services/product_search/client.py b/packages/google-cloud-vision/google/cloud/vision_v1/services/product_search/client.py index 030b357a857c..ed64e835e5a3 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1/services/product_search/client.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1/services/product_search/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -556,6 +558,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -3212,16 +3241,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-vision/google/cloud/vision_v1/services/product_search/transports/rest.py b/packages/google-cloud-vision/google/cloud/vision_v1/services/product_search/transports/rest.py index 743384dbd371..cae4bab074ae 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1/services/product_search/transports/rest.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1/services/product_search/transports/rest.py @@ -243,12 +243,35 @@ def post_create_product( ) -> product_search_service.Product: """Post-rpc interceptor for create_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_product` interceptor runs + before the `post_create_product_with_metadata` interceptor. """ return response + def post_create_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_product_with_metadata` + interceptor in new development instead of the `post_create_product` interceptor. + When both interceptors are used, this `post_create_product_with_metadata` interceptor runs after the + `post_create_product` interceptor. The (possibly modified) response returned by + `post_create_product` will be passed to + `post_create_product_with_metadata`. + """ + return response, metadata + def pre_create_product_set( self, request: product_search_service.CreateProductSetRequest, @@ -269,12 +292,37 @@ def post_create_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for create_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_product_set` interceptor runs + before the `post_create_product_set_with_metadata` interceptor. """ return response + def post_create_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for create_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_product_set_with_metadata` + interceptor in new development instead of the `post_create_product_set` interceptor. + When both interceptors are used, this `post_create_product_set_with_metadata` interceptor runs after the + `post_create_product_set` interceptor. The (possibly modified) response returned by + `post_create_product_set` will be passed to + `post_create_product_set_with_metadata`. + """ + return response, metadata + def pre_create_reference_image( self, request: product_search_service.CreateReferenceImageRequest, @@ -295,12 +343,37 @@ def post_create_reference_image( ) -> product_search_service.ReferenceImage: """Post-rpc interceptor for create_reference_image - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_reference_image_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_reference_image` interceptor runs + before the `post_create_reference_image_with_metadata` interceptor. """ return response + def post_create_reference_image_with_metadata( + self, + response: product_search_service.ReferenceImage, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ReferenceImage, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for create_reference_image + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_reference_image_with_metadata` + interceptor in new development instead of the `post_create_reference_image` interceptor. + When both interceptors are used, this `post_create_reference_image_with_metadata` interceptor runs after the + `post_create_reference_image` interceptor. The (possibly modified) response returned by + `post_create_reference_image` will be passed to + `post_create_reference_image_with_metadata`. + """ + return response, metadata + def pre_delete_product( self, request: product_search_service.DeleteProductRequest, @@ -366,12 +439,35 @@ def post_get_product( ) -> product_search_service.Product: """Post-rpc interceptor for get_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_product` interceptor runs + before the `post_get_product_with_metadata` interceptor. """ return response + def post_get_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_product_with_metadata` + interceptor in new development instead of the `post_get_product` interceptor. + When both interceptors are used, this `post_get_product_with_metadata` interceptor runs after the + `post_get_product` interceptor. The (possibly modified) response returned by + `post_get_product` will be passed to + `post_get_product_with_metadata`. + """ + return response, metadata + def pre_get_product_set( self, request: product_search_service.GetProductSetRequest, @@ -392,12 +488,37 @@ def post_get_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for get_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_product_set` interceptor runs + before the `post_get_product_set_with_metadata` interceptor. """ return response + def post_get_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_product_set_with_metadata` + interceptor in new development instead of the `post_get_product_set` interceptor. + When both interceptors are used, this `post_get_product_set_with_metadata` interceptor runs after the + `post_get_product_set` interceptor. The (possibly modified) response returned by + `post_get_product_set` will be passed to + `post_get_product_set_with_metadata`. + """ + return response, metadata + def pre_get_reference_image( self, request: product_search_service.GetReferenceImageRequest, @@ -418,12 +539,37 @@ def post_get_reference_image( ) -> product_search_service.ReferenceImage: """Post-rpc interceptor for get_reference_image - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_reference_image_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_reference_image` interceptor runs + before the `post_get_reference_image_with_metadata` interceptor. """ return response + def post_get_reference_image_with_metadata( + self, + response: product_search_service.ReferenceImage, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ReferenceImage, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_reference_image + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_reference_image_with_metadata` + interceptor in new development instead of the `post_get_reference_image` interceptor. + When both interceptors are used, this `post_get_reference_image_with_metadata` interceptor runs after the + `post_get_reference_image` interceptor. The (possibly modified) response returned by + `post_get_reference_image` will be passed to + `post_get_reference_image_with_metadata`. + """ + return response, metadata + def pre_import_product_sets( self, request: product_search_service.ImportProductSetsRequest, @@ -444,12 +590,35 @@ def post_import_product_sets( ) -> operations_pb2.Operation: """Post-rpc interceptor for import_product_sets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_import_product_sets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_import_product_sets` interceptor runs + before the `post_import_product_sets_with_metadata` interceptor. """ return response + def post_import_product_sets_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for import_product_sets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_import_product_sets_with_metadata` + interceptor in new development instead of the `post_import_product_sets` interceptor. + When both interceptors are used, this `post_import_product_sets_with_metadata` interceptor runs after the + `post_import_product_sets` interceptor. The (possibly modified) response returned by + `post_import_product_sets` will be passed to + `post_import_product_sets_with_metadata`. + """ + return response, metadata + def pre_list_products( self, request: product_search_service.ListProductsRequest, @@ -470,12 +639,38 @@ def post_list_products( ) -> product_search_service.ListProductsResponse: """Post-rpc interceptor for list_products - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_products_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_products` interceptor runs + before the `post_list_products_with_metadata` interceptor. """ return response + def post_list_products_with_metadata( + self, + response: product_search_service.ListProductsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_products + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_products_with_metadata` + interceptor in new development instead of the `post_list_products` interceptor. + When both interceptors are used, this `post_list_products_with_metadata` interceptor runs after the + `post_list_products` interceptor. The (possibly modified) response returned by + `post_list_products` will be passed to + `post_list_products_with_metadata`. + """ + return response, metadata + def pre_list_product_sets( self, request: product_search_service.ListProductSetsRequest, @@ -496,12 +691,38 @@ def post_list_product_sets( ) -> product_search_service.ListProductSetsResponse: """Post-rpc interceptor for list_product_sets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_product_sets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_product_sets` interceptor runs + before the `post_list_product_sets_with_metadata` interceptor. """ return response + def post_list_product_sets_with_metadata( + self, + response: product_search_service.ListProductSetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductSetsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_product_sets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_product_sets_with_metadata` + interceptor in new development instead of the `post_list_product_sets` interceptor. + When both interceptors are used, this `post_list_product_sets_with_metadata` interceptor runs after the + `post_list_product_sets` interceptor. The (possibly modified) response returned by + `post_list_product_sets` will be passed to + `post_list_product_sets_with_metadata`. + """ + return response, metadata + def pre_list_products_in_product_set( self, request: product_search_service.ListProductsInProductSetRequest, @@ -522,12 +743,38 @@ def post_list_products_in_product_set( ) -> product_search_service.ListProductsInProductSetResponse: """Post-rpc interceptor for list_products_in_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_products_in_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_products_in_product_set` interceptor runs + before the `post_list_products_in_product_set_with_metadata` interceptor. """ return response + def post_list_products_in_product_set_with_metadata( + self, + response: product_search_service.ListProductsInProductSetResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductsInProductSetResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_products_in_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_products_in_product_set_with_metadata` + interceptor in new development instead of the `post_list_products_in_product_set` interceptor. + When both interceptors are used, this `post_list_products_in_product_set_with_metadata` interceptor runs after the + `post_list_products_in_product_set` interceptor. The (possibly modified) response returned by + `post_list_products_in_product_set` will be passed to + `post_list_products_in_product_set_with_metadata`. + """ + return response, metadata + def pre_list_reference_images( self, request: product_search_service.ListReferenceImagesRequest, @@ -548,12 +795,38 @@ def post_list_reference_images( ) -> product_search_service.ListReferenceImagesResponse: """Post-rpc interceptor for list_reference_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_reference_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_reference_images` interceptor runs + before the `post_list_reference_images_with_metadata` interceptor. """ return response + def post_list_reference_images_with_metadata( + self, + response: product_search_service.ListReferenceImagesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListReferenceImagesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_reference_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_reference_images_with_metadata` + interceptor in new development instead of the `post_list_reference_images` interceptor. + When both interceptors are used, this `post_list_reference_images_with_metadata` interceptor runs after the + `post_list_reference_images` interceptor. The (possibly modified) response returned by + `post_list_reference_images` will be passed to + `post_list_reference_images_with_metadata`. + """ + return response, metadata + def pre_purge_products( self, request: product_search_service.PurgeProductsRequest, @@ -574,12 +847,35 @@ def post_purge_products( ) -> operations_pb2.Operation: """Post-rpc interceptor for purge_products - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_purge_products_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_purge_products` interceptor runs + before the `post_purge_products_with_metadata` interceptor. """ return response + def post_purge_products_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for purge_products + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_purge_products_with_metadata` + interceptor in new development instead of the `post_purge_products` interceptor. + When both interceptors are used, this `post_purge_products_with_metadata` interceptor runs after the + `post_purge_products` interceptor. The (possibly modified) response returned by + `post_purge_products` will be passed to + `post_purge_products_with_metadata`. + """ + return response, metadata + def pre_remove_product_from_product_set( self, request: product_search_service.RemoveProductFromProductSetRequest, @@ -615,12 +911,35 @@ def post_update_product( ) -> product_search_service.Product: """Post-rpc interceptor for update_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_update_product` interceptor runs + before the `post_update_product_with_metadata` interceptor. """ return response + def post_update_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_update_product_with_metadata` + interceptor in new development instead of the `post_update_product` interceptor. + When both interceptors are used, this `post_update_product_with_metadata` interceptor runs after the + `post_update_product` interceptor. The (possibly modified) response returned by + `post_update_product` will be passed to + `post_update_product_with_metadata`. + """ + return response, metadata + def pre_update_product_set( self, request: product_search_service.UpdateProductSetRequest, @@ -641,12 +960,37 @@ def post_update_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for update_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_update_product_set` interceptor runs + before the `post_update_product_set_with_metadata` interceptor. """ return response + def post_update_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for update_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_update_product_set_with_metadata` + interceptor in new development instead of the `post_update_product_set` interceptor. + When both interceptors are used, this `post_update_product_set_with_metadata` interceptor runs after the + `post_update_product_set` interceptor. The (possibly modified) response returned by + `post_update_product_set` will be passed to + `post_update_product_set_with_metadata`. + """ + return response, metadata + def pre_get_operation( self, request: operations_pb2.GetOperationRequest, @@ -1063,6 +1407,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1216,6 +1564,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1368,6 +1720,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_reference_image(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_reference_image_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1836,6 +2192,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1981,6 +2341,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2127,6 +2491,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_reference_image(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_reference_image_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2278,6 +2646,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_import_product_sets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_import_product_sets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2418,6 +2790,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_products(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_products_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2562,6 +2938,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_product_sets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_product_sets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2713,6 +3093,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_products_in_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_products_in_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2859,6 +3243,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_reference_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_reference_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3010,6 +3398,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_purge_products(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_purge_products_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3275,6 +3667,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3428,6 +3824,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/gapic_version.py b/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/gapic_version.py index 4643bc4d8d76..558c8aab67c5 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/gapic_version.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.9.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/services/image_annotator/client.py b/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/services/image_annotator/client.py index a5722d3edd77..9d93845d39e0 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/services/image_annotator/client.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/services/image_annotator/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -465,6 +467,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/services/image_annotator/transports/rest.py b/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/services/image_annotator/transports/rest.py index 3b0bd72d46c7..687dd3f84fa9 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/services/image_annotator/transports/rest.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p1beta1/services/image_annotator/transports/rest.py @@ -102,12 +102,38 @@ def post_batch_annotate_images( ) -> image_annotator.BatchAnnotateImagesResponse: """Post-rpc interceptor for batch_annotate_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_annotate_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_batch_annotate_images` interceptor runs + before the `post_batch_annotate_images_with_metadata` interceptor. """ return response + def post_batch_annotate_images_with_metadata( + self, + response: image_annotator.BatchAnnotateImagesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + image_annotator.BatchAnnotateImagesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_annotate_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_batch_annotate_images_with_metadata` + interceptor in new development instead of the `post_batch_annotate_images` interceptor. + When both interceptors are used, this `post_batch_annotate_images_with_metadata` interceptor runs after the + `post_batch_annotate_images` interceptor. The (possibly modified) response returned by + `post_batch_annotate_images` will be passed to + `post_batch_annotate_images_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ImageAnnotatorRestStub: @@ -327,6 +353,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_annotate_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_annotate_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/gapic_version.py b/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/gapic_version.py index 4643bc4d8d76..558c8aab67c5 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/gapic_version.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.9.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/services/image_annotator/client.py b/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/services/image_annotator/client.py index 6aad5eff1b1f..6f49e294c862 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/services/image_annotator/client.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/services/image_annotator/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -468,6 +470,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/services/image_annotator/transports/rest.py b/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/services/image_annotator/transports/rest.py index 6787e920ee4f..e4e57c39b188 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/services/image_annotator/transports/rest.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p2beta1/services/image_annotator/transports/rest.py @@ -111,12 +111,35 @@ def post_async_batch_annotate_files( ) -> operations_pb2.Operation: """Post-rpc interceptor for async_batch_annotate_files - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_async_batch_annotate_files_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_async_batch_annotate_files` interceptor runs + before the `post_async_batch_annotate_files_with_metadata` interceptor. """ return response + def post_async_batch_annotate_files_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for async_batch_annotate_files + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_async_batch_annotate_files_with_metadata` + interceptor in new development instead of the `post_async_batch_annotate_files` interceptor. + When both interceptors are used, this `post_async_batch_annotate_files_with_metadata` interceptor runs after the + `post_async_batch_annotate_files` interceptor. The (possibly modified) response returned by + `post_async_batch_annotate_files` will be passed to + `post_async_batch_annotate_files_with_metadata`. + """ + return response, metadata + def pre_batch_annotate_images( self, request: image_annotator.BatchAnnotateImagesRequest, @@ -137,12 +160,38 @@ def post_batch_annotate_images( ) -> image_annotator.BatchAnnotateImagesResponse: """Post-rpc interceptor for batch_annotate_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_annotate_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_batch_annotate_images` interceptor runs + before the `post_batch_annotate_images_with_metadata` interceptor. """ return response + def post_batch_annotate_images_with_metadata( + self, + response: image_annotator.BatchAnnotateImagesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + image_annotator.BatchAnnotateImagesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_annotate_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_batch_annotate_images_with_metadata` + interceptor in new development instead of the `post_batch_annotate_images` interceptor. + When both interceptors are used, this `post_batch_annotate_images_with_metadata` interceptor runs after the + `post_batch_annotate_images` interceptor. The (possibly modified) response returned by + `post_batch_annotate_images` will be passed to + `post_batch_annotate_images_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ImageAnnotatorRestStub: @@ -393,6 +442,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_async_batch_annotate_files(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_async_batch_annotate_files_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -545,6 +598,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_annotate_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_annotate_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/gapic_version.py b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/gapic_version.py index 4643bc4d8d76..558c8aab67c5 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/gapic_version.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.9.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/image_annotator/client.py b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/image_annotator/client.py index ba7808116b46..659b1a6ac552 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/image_annotator/client.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/image_annotator/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -514,6 +516,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/image_annotator/transports/rest.py b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/image_annotator/transports/rest.py index 893070a36e86..22f1c15872b1 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/image_annotator/transports/rest.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/image_annotator/transports/rest.py @@ -111,12 +111,35 @@ def post_async_batch_annotate_files( ) -> operations_pb2.Operation: """Post-rpc interceptor for async_batch_annotate_files - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_async_batch_annotate_files_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_async_batch_annotate_files` interceptor runs + before the `post_async_batch_annotate_files_with_metadata` interceptor. """ return response + def post_async_batch_annotate_files_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for async_batch_annotate_files + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_async_batch_annotate_files_with_metadata` + interceptor in new development instead of the `post_async_batch_annotate_files` interceptor. + When both interceptors are used, this `post_async_batch_annotate_files_with_metadata` interceptor runs after the + `post_async_batch_annotate_files` interceptor. The (possibly modified) response returned by + `post_async_batch_annotate_files` will be passed to + `post_async_batch_annotate_files_with_metadata`. + """ + return response, metadata + def pre_batch_annotate_images( self, request: image_annotator.BatchAnnotateImagesRequest, @@ -137,12 +160,38 @@ def post_batch_annotate_images( ) -> image_annotator.BatchAnnotateImagesResponse: """Post-rpc interceptor for batch_annotate_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_annotate_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_batch_annotate_images` interceptor runs + before the `post_batch_annotate_images_with_metadata` interceptor. """ return response + def post_batch_annotate_images_with_metadata( + self, + response: image_annotator.BatchAnnotateImagesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + image_annotator.BatchAnnotateImagesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_annotate_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_batch_annotate_images_with_metadata` + interceptor in new development instead of the `post_batch_annotate_images` interceptor. + When both interceptors are used, this `post_batch_annotate_images_with_metadata` interceptor runs after the + `post_batch_annotate_images` interceptor. The (possibly modified) response returned by + `post_batch_annotate_images` will be passed to + `post_batch_annotate_images_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ImageAnnotatorRestStub: @@ -393,6 +442,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_async_batch_annotate_files(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_async_batch_annotate_files_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -545,6 +598,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_annotate_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_annotate_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/product_search/client.py b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/product_search/client.py index b5881aa7b3de..b430f41235f4 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/product_search/client.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/product_search/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -556,6 +558,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/product_search/transports/rest.py b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/product_search/transports/rest.py index 33d4b036fdb0..0ba8a5171459 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/product_search/transports/rest.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p3beta1/services/product_search/transports/rest.py @@ -235,12 +235,35 @@ def post_create_product( ) -> product_search_service.Product: """Post-rpc interceptor for create_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_product` interceptor runs + before the `post_create_product_with_metadata` interceptor. """ return response + def post_create_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_product_with_metadata` + interceptor in new development instead of the `post_create_product` interceptor. + When both interceptors are used, this `post_create_product_with_metadata` interceptor runs after the + `post_create_product` interceptor. The (possibly modified) response returned by + `post_create_product` will be passed to + `post_create_product_with_metadata`. + """ + return response, metadata + def pre_create_product_set( self, request: product_search_service.CreateProductSetRequest, @@ -261,12 +284,37 @@ def post_create_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for create_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_product_set` interceptor runs + before the `post_create_product_set_with_metadata` interceptor. """ return response + def post_create_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for create_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_product_set_with_metadata` + interceptor in new development instead of the `post_create_product_set` interceptor. + When both interceptors are used, this `post_create_product_set_with_metadata` interceptor runs after the + `post_create_product_set` interceptor. The (possibly modified) response returned by + `post_create_product_set` will be passed to + `post_create_product_set_with_metadata`. + """ + return response, metadata + def pre_create_reference_image( self, request: product_search_service.CreateReferenceImageRequest, @@ -287,12 +335,37 @@ def post_create_reference_image( ) -> product_search_service.ReferenceImage: """Post-rpc interceptor for create_reference_image - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_reference_image_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_reference_image` interceptor runs + before the `post_create_reference_image_with_metadata` interceptor. """ return response + def post_create_reference_image_with_metadata( + self, + response: product_search_service.ReferenceImage, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ReferenceImage, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for create_reference_image + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_reference_image_with_metadata` + interceptor in new development instead of the `post_create_reference_image` interceptor. + When both interceptors are used, this `post_create_reference_image_with_metadata` interceptor runs after the + `post_create_reference_image` interceptor. The (possibly modified) response returned by + `post_create_reference_image` will be passed to + `post_create_reference_image_with_metadata`. + """ + return response, metadata + def pre_delete_product( self, request: product_search_service.DeleteProductRequest, @@ -358,12 +431,35 @@ def post_get_product( ) -> product_search_service.Product: """Post-rpc interceptor for get_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_product` interceptor runs + before the `post_get_product_with_metadata` interceptor. """ return response + def post_get_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_product_with_metadata` + interceptor in new development instead of the `post_get_product` interceptor. + When both interceptors are used, this `post_get_product_with_metadata` interceptor runs after the + `post_get_product` interceptor. The (possibly modified) response returned by + `post_get_product` will be passed to + `post_get_product_with_metadata`. + """ + return response, metadata + def pre_get_product_set( self, request: product_search_service.GetProductSetRequest, @@ -384,12 +480,37 @@ def post_get_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for get_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_product_set` interceptor runs + before the `post_get_product_set_with_metadata` interceptor. """ return response + def post_get_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_product_set_with_metadata` + interceptor in new development instead of the `post_get_product_set` interceptor. + When both interceptors are used, this `post_get_product_set_with_metadata` interceptor runs after the + `post_get_product_set` interceptor. The (possibly modified) response returned by + `post_get_product_set` will be passed to + `post_get_product_set_with_metadata`. + """ + return response, metadata + def pre_get_reference_image( self, request: product_search_service.GetReferenceImageRequest, @@ -410,12 +531,37 @@ def post_get_reference_image( ) -> product_search_service.ReferenceImage: """Post-rpc interceptor for get_reference_image - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_reference_image_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_reference_image` interceptor runs + before the `post_get_reference_image_with_metadata` interceptor. """ return response + def post_get_reference_image_with_metadata( + self, + response: product_search_service.ReferenceImage, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ReferenceImage, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_reference_image + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_reference_image_with_metadata` + interceptor in new development instead of the `post_get_reference_image` interceptor. + When both interceptors are used, this `post_get_reference_image_with_metadata` interceptor runs after the + `post_get_reference_image` interceptor. The (possibly modified) response returned by + `post_get_reference_image` will be passed to + `post_get_reference_image_with_metadata`. + """ + return response, metadata + def pre_import_product_sets( self, request: product_search_service.ImportProductSetsRequest, @@ -436,12 +582,35 @@ def post_import_product_sets( ) -> operations_pb2.Operation: """Post-rpc interceptor for import_product_sets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_import_product_sets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_import_product_sets` interceptor runs + before the `post_import_product_sets_with_metadata` interceptor. """ return response + def post_import_product_sets_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for import_product_sets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_import_product_sets_with_metadata` + interceptor in new development instead of the `post_import_product_sets` interceptor. + When both interceptors are used, this `post_import_product_sets_with_metadata` interceptor runs after the + `post_import_product_sets` interceptor. The (possibly modified) response returned by + `post_import_product_sets` will be passed to + `post_import_product_sets_with_metadata`. + """ + return response, metadata + def pre_list_products( self, request: product_search_service.ListProductsRequest, @@ -462,12 +631,38 @@ def post_list_products( ) -> product_search_service.ListProductsResponse: """Post-rpc interceptor for list_products - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_products_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_products` interceptor runs + before the `post_list_products_with_metadata` interceptor. """ return response + def post_list_products_with_metadata( + self, + response: product_search_service.ListProductsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_products + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_products_with_metadata` + interceptor in new development instead of the `post_list_products` interceptor. + When both interceptors are used, this `post_list_products_with_metadata` interceptor runs after the + `post_list_products` interceptor. The (possibly modified) response returned by + `post_list_products` will be passed to + `post_list_products_with_metadata`. + """ + return response, metadata + def pre_list_product_sets( self, request: product_search_service.ListProductSetsRequest, @@ -488,12 +683,38 @@ def post_list_product_sets( ) -> product_search_service.ListProductSetsResponse: """Post-rpc interceptor for list_product_sets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_product_sets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_product_sets` interceptor runs + before the `post_list_product_sets_with_metadata` interceptor. """ return response + def post_list_product_sets_with_metadata( + self, + response: product_search_service.ListProductSetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductSetsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_product_sets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_product_sets_with_metadata` + interceptor in new development instead of the `post_list_product_sets` interceptor. + When both interceptors are used, this `post_list_product_sets_with_metadata` interceptor runs after the + `post_list_product_sets` interceptor. The (possibly modified) response returned by + `post_list_product_sets` will be passed to + `post_list_product_sets_with_metadata`. + """ + return response, metadata + def pre_list_products_in_product_set( self, request: product_search_service.ListProductsInProductSetRequest, @@ -514,12 +735,38 @@ def post_list_products_in_product_set( ) -> product_search_service.ListProductsInProductSetResponse: """Post-rpc interceptor for list_products_in_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_products_in_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_products_in_product_set` interceptor runs + before the `post_list_products_in_product_set_with_metadata` interceptor. """ return response + def post_list_products_in_product_set_with_metadata( + self, + response: product_search_service.ListProductsInProductSetResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductsInProductSetResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_products_in_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_products_in_product_set_with_metadata` + interceptor in new development instead of the `post_list_products_in_product_set` interceptor. + When both interceptors are used, this `post_list_products_in_product_set_with_metadata` interceptor runs after the + `post_list_products_in_product_set` interceptor. The (possibly modified) response returned by + `post_list_products_in_product_set` will be passed to + `post_list_products_in_product_set_with_metadata`. + """ + return response, metadata + def pre_list_reference_images( self, request: product_search_service.ListReferenceImagesRequest, @@ -540,12 +787,38 @@ def post_list_reference_images( ) -> product_search_service.ListReferenceImagesResponse: """Post-rpc interceptor for list_reference_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_reference_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_reference_images` interceptor runs + before the `post_list_reference_images_with_metadata` interceptor. """ return response + def post_list_reference_images_with_metadata( + self, + response: product_search_service.ListReferenceImagesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListReferenceImagesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_reference_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_reference_images_with_metadata` + interceptor in new development instead of the `post_list_reference_images` interceptor. + When both interceptors are used, this `post_list_reference_images_with_metadata` interceptor runs after the + `post_list_reference_images` interceptor. The (possibly modified) response returned by + `post_list_reference_images` will be passed to + `post_list_reference_images_with_metadata`. + """ + return response, metadata + def pre_remove_product_from_product_set( self, request: product_search_service.RemoveProductFromProductSetRequest, @@ -581,12 +854,35 @@ def post_update_product( ) -> product_search_service.Product: """Post-rpc interceptor for update_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_update_product` interceptor runs + before the `post_update_product_with_metadata` interceptor. """ return response + def post_update_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_update_product_with_metadata` + interceptor in new development instead of the `post_update_product` interceptor. + When both interceptors are used, this `post_update_product_with_metadata` interceptor runs after the + `post_update_product` interceptor. The (possibly modified) response returned by + `post_update_product` will be passed to + `post_update_product_with_metadata`. + """ + return response, metadata + def pre_update_product_set( self, request: product_search_service.UpdateProductSetRequest, @@ -607,12 +903,37 @@ def post_update_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for update_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_update_product_set` interceptor runs + before the `post_update_product_set_with_metadata` interceptor. """ return response + def post_update_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for update_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_update_product_set_with_metadata` + interceptor in new development instead of the `post_update_product_set` interceptor. + When both interceptors are used, this `post_update_product_set_with_metadata` interceptor runs after the + `post_update_product_set` interceptor. The (possibly modified) response returned by + `post_update_product_set` will be passed to + `post_update_product_set_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ProductSearchRestStub: @@ -987,6 +1308,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1140,6 +1465,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1292,6 +1621,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_reference_image(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_reference_image_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1760,6 +2093,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1905,6 +2242,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2051,6 +2392,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_reference_image(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_reference_image_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2202,6 +2547,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_import_product_sets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_import_product_sets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2342,6 +2691,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_products(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_products_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2486,6 +2839,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_product_sets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_product_sets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2637,6 +2994,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_products_in_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_products_in_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2783,6 +3144,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_reference_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_reference_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3052,6 +3417,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3205,6 +3574,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/gapic_version.py b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/gapic_version.py index 4643bc4d8d76..558c8aab67c5 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/gapic_version.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "3.9.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/image_annotator/client.py b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/image_annotator/client.py index d26392f790de..eb28ac54b62a 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/image_annotator/client.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/image_annotator/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -514,6 +516,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/image_annotator/transports/rest.py b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/image_annotator/transports/rest.py index 6c7b44849bc1..73f6e8fd4b7b 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/image_annotator/transports/rest.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/image_annotator/transports/rest.py @@ -127,12 +127,35 @@ def post_async_batch_annotate_files( ) -> operations_pb2.Operation: """Post-rpc interceptor for async_batch_annotate_files - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_async_batch_annotate_files_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_async_batch_annotate_files` interceptor runs + before the `post_async_batch_annotate_files_with_metadata` interceptor. """ return response + def post_async_batch_annotate_files_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for async_batch_annotate_files + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_async_batch_annotate_files_with_metadata` + interceptor in new development instead of the `post_async_batch_annotate_files` interceptor. + When both interceptors are used, this `post_async_batch_annotate_files_with_metadata` interceptor runs after the + `post_async_batch_annotate_files` interceptor. The (possibly modified) response returned by + `post_async_batch_annotate_files` will be passed to + `post_async_batch_annotate_files_with_metadata`. + """ + return response, metadata + def pre_async_batch_annotate_images( self, request: image_annotator.AsyncBatchAnnotateImagesRequest, @@ -153,12 +176,35 @@ def post_async_batch_annotate_images( ) -> operations_pb2.Operation: """Post-rpc interceptor for async_batch_annotate_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_async_batch_annotate_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_async_batch_annotate_images` interceptor runs + before the `post_async_batch_annotate_images_with_metadata` interceptor. """ return response + def post_async_batch_annotate_images_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for async_batch_annotate_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_async_batch_annotate_images_with_metadata` + interceptor in new development instead of the `post_async_batch_annotate_images` interceptor. + When both interceptors are used, this `post_async_batch_annotate_images_with_metadata` interceptor runs after the + `post_async_batch_annotate_images` interceptor. The (possibly modified) response returned by + `post_async_batch_annotate_images` will be passed to + `post_async_batch_annotate_images_with_metadata`. + """ + return response, metadata + def pre_batch_annotate_files( self, request: image_annotator.BatchAnnotateFilesRequest, @@ -179,12 +225,38 @@ def post_batch_annotate_files( ) -> image_annotator.BatchAnnotateFilesResponse: """Post-rpc interceptor for batch_annotate_files - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_annotate_files_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_batch_annotate_files` interceptor runs + before the `post_batch_annotate_files_with_metadata` interceptor. """ return response + def post_batch_annotate_files_with_metadata( + self, + response: image_annotator.BatchAnnotateFilesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + image_annotator.BatchAnnotateFilesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_annotate_files + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_batch_annotate_files_with_metadata` + interceptor in new development instead of the `post_batch_annotate_files` interceptor. + When both interceptors are used, this `post_batch_annotate_files_with_metadata` interceptor runs after the + `post_batch_annotate_files` interceptor. The (possibly modified) response returned by + `post_batch_annotate_files` will be passed to + `post_batch_annotate_files_with_metadata`. + """ + return response, metadata + def pre_batch_annotate_images( self, request: image_annotator.BatchAnnotateImagesRequest, @@ -205,12 +277,38 @@ def post_batch_annotate_images( ) -> image_annotator.BatchAnnotateImagesResponse: """Post-rpc interceptor for batch_annotate_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_annotate_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ImageAnnotator server but before - it is returned to user code. + it is returned to user code. This `post_batch_annotate_images` interceptor runs + before the `post_batch_annotate_images_with_metadata` interceptor. """ return response + def post_batch_annotate_images_with_metadata( + self, + response: image_annotator.BatchAnnotateImagesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + image_annotator.BatchAnnotateImagesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for batch_annotate_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ImageAnnotator server but before it is returned to user code. + + We recommend only using this `post_batch_annotate_images_with_metadata` + interceptor in new development instead of the `post_batch_annotate_images` interceptor. + When both interceptors are used, this `post_batch_annotate_images_with_metadata` interceptor runs after the + `post_batch_annotate_images` interceptor. The (possibly modified) response returned by + `post_batch_annotate_images` will be passed to + `post_batch_annotate_images_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ImageAnnotatorRestStub: @@ -461,6 +559,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_async_batch_annotate_files(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_async_batch_annotate_files_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -615,6 +717,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_async_batch_annotate_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_async_batch_annotate_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -764,6 +870,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_annotate_files(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_annotate_files_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -918,6 +1028,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_annotate_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_annotate_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/product_search/client.py b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/product_search/client.py index a0cee9ef0d6b..bb9ce5853ae4 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/product_search/client.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/product_search/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -557,6 +559,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/product_search/transports/rest.py b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/product_search/transports/rest.py index 3c4c6b3bb5b8..ca0925246217 100644 --- a/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/product_search/transports/rest.py +++ b/packages/google-cloud-vision/google/cloud/vision_v1p4beta1/services/product_search/transports/rest.py @@ -243,12 +243,35 @@ def post_create_product( ) -> product_search_service.Product: """Post-rpc interceptor for create_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_product` interceptor runs + before the `post_create_product_with_metadata` interceptor. """ return response + def post_create_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_product_with_metadata` + interceptor in new development instead of the `post_create_product` interceptor. + When both interceptors are used, this `post_create_product_with_metadata` interceptor runs after the + `post_create_product` interceptor. The (possibly modified) response returned by + `post_create_product` will be passed to + `post_create_product_with_metadata`. + """ + return response, metadata + def pre_create_product_set( self, request: product_search_service.CreateProductSetRequest, @@ -269,12 +292,37 @@ def post_create_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for create_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_product_set` interceptor runs + before the `post_create_product_set_with_metadata` interceptor. """ return response + def post_create_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for create_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_product_set_with_metadata` + interceptor in new development instead of the `post_create_product_set` interceptor. + When both interceptors are used, this `post_create_product_set_with_metadata` interceptor runs after the + `post_create_product_set` interceptor. The (possibly modified) response returned by + `post_create_product_set` will be passed to + `post_create_product_set_with_metadata`. + """ + return response, metadata + def pre_create_reference_image( self, request: product_search_service.CreateReferenceImageRequest, @@ -295,12 +343,37 @@ def post_create_reference_image( ) -> product_search_service.ReferenceImage: """Post-rpc interceptor for create_reference_image - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_reference_image_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_create_reference_image` interceptor runs + before the `post_create_reference_image_with_metadata` interceptor. """ return response + def post_create_reference_image_with_metadata( + self, + response: product_search_service.ReferenceImage, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ReferenceImage, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for create_reference_image + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_create_reference_image_with_metadata` + interceptor in new development instead of the `post_create_reference_image` interceptor. + When both interceptors are used, this `post_create_reference_image_with_metadata` interceptor runs after the + `post_create_reference_image` interceptor. The (possibly modified) response returned by + `post_create_reference_image` will be passed to + `post_create_reference_image_with_metadata`. + """ + return response, metadata + def pre_delete_product( self, request: product_search_service.DeleteProductRequest, @@ -366,12 +439,35 @@ def post_get_product( ) -> product_search_service.Product: """Post-rpc interceptor for get_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_product` interceptor runs + before the `post_get_product_with_metadata` interceptor. """ return response + def post_get_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_product_with_metadata` + interceptor in new development instead of the `post_get_product` interceptor. + When both interceptors are used, this `post_get_product_with_metadata` interceptor runs after the + `post_get_product` interceptor. The (possibly modified) response returned by + `post_get_product` will be passed to + `post_get_product_with_metadata`. + """ + return response, metadata + def pre_get_product_set( self, request: product_search_service.GetProductSetRequest, @@ -392,12 +488,37 @@ def post_get_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for get_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_product_set` interceptor runs + before the `post_get_product_set_with_metadata` interceptor. """ return response + def post_get_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_product_set_with_metadata` + interceptor in new development instead of the `post_get_product_set` interceptor. + When both interceptors are used, this `post_get_product_set_with_metadata` interceptor runs after the + `post_get_product_set` interceptor. The (possibly modified) response returned by + `post_get_product_set` will be passed to + `post_get_product_set_with_metadata`. + """ + return response, metadata + def pre_get_reference_image( self, request: product_search_service.GetReferenceImageRequest, @@ -418,12 +539,37 @@ def post_get_reference_image( ) -> product_search_service.ReferenceImage: """Post-rpc interceptor for get_reference_image - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_reference_image_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_get_reference_image` interceptor runs + before the `post_get_reference_image_with_metadata` interceptor. """ return response + def post_get_reference_image_with_metadata( + self, + response: product_search_service.ReferenceImage, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ReferenceImage, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_reference_image + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_get_reference_image_with_metadata` + interceptor in new development instead of the `post_get_reference_image` interceptor. + When both interceptors are used, this `post_get_reference_image_with_metadata` interceptor runs after the + `post_get_reference_image` interceptor. The (possibly modified) response returned by + `post_get_reference_image` will be passed to + `post_get_reference_image_with_metadata`. + """ + return response, metadata + def pre_import_product_sets( self, request: product_search_service.ImportProductSetsRequest, @@ -444,12 +590,35 @@ def post_import_product_sets( ) -> operations_pb2.Operation: """Post-rpc interceptor for import_product_sets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_import_product_sets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_import_product_sets` interceptor runs + before the `post_import_product_sets_with_metadata` interceptor. """ return response + def post_import_product_sets_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for import_product_sets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_import_product_sets_with_metadata` + interceptor in new development instead of the `post_import_product_sets` interceptor. + When both interceptors are used, this `post_import_product_sets_with_metadata` interceptor runs after the + `post_import_product_sets` interceptor. The (possibly modified) response returned by + `post_import_product_sets` will be passed to + `post_import_product_sets_with_metadata`. + """ + return response, metadata + def pre_list_products( self, request: product_search_service.ListProductsRequest, @@ -470,12 +639,38 @@ def post_list_products( ) -> product_search_service.ListProductsResponse: """Post-rpc interceptor for list_products - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_products_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_products` interceptor runs + before the `post_list_products_with_metadata` interceptor. """ return response + def post_list_products_with_metadata( + self, + response: product_search_service.ListProductsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_products + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_products_with_metadata` + interceptor in new development instead of the `post_list_products` interceptor. + When both interceptors are used, this `post_list_products_with_metadata` interceptor runs after the + `post_list_products` interceptor. The (possibly modified) response returned by + `post_list_products` will be passed to + `post_list_products_with_metadata`. + """ + return response, metadata + def pre_list_product_sets( self, request: product_search_service.ListProductSetsRequest, @@ -496,12 +691,38 @@ def post_list_product_sets( ) -> product_search_service.ListProductSetsResponse: """Post-rpc interceptor for list_product_sets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_product_sets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_product_sets` interceptor runs + before the `post_list_product_sets_with_metadata` interceptor. """ return response + def post_list_product_sets_with_metadata( + self, + response: product_search_service.ListProductSetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductSetsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_product_sets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_product_sets_with_metadata` + interceptor in new development instead of the `post_list_product_sets` interceptor. + When both interceptors are used, this `post_list_product_sets_with_metadata` interceptor runs after the + `post_list_product_sets` interceptor. The (possibly modified) response returned by + `post_list_product_sets` will be passed to + `post_list_product_sets_with_metadata`. + """ + return response, metadata + def pre_list_products_in_product_set( self, request: product_search_service.ListProductsInProductSetRequest, @@ -522,12 +743,38 @@ def post_list_products_in_product_set( ) -> product_search_service.ListProductsInProductSetResponse: """Post-rpc interceptor for list_products_in_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_products_in_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_products_in_product_set` interceptor runs + before the `post_list_products_in_product_set_with_metadata` interceptor. """ return response + def post_list_products_in_product_set_with_metadata( + self, + response: product_search_service.ListProductsInProductSetResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListProductsInProductSetResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_products_in_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_products_in_product_set_with_metadata` + interceptor in new development instead of the `post_list_products_in_product_set` interceptor. + When both interceptors are used, this `post_list_products_in_product_set_with_metadata` interceptor runs after the + `post_list_products_in_product_set` interceptor. The (possibly modified) response returned by + `post_list_products_in_product_set` will be passed to + `post_list_products_in_product_set_with_metadata`. + """ + return response, metadata + def pre_list_reference_images( self, request: product_search_service.ListReferenceImagesRequest, @@ -548,12 +795,38 @@ def post_list_reference_images( ) -> product_search_service.ListReferenceImagesResponse: """Post-rpc interceptor for list_reference_images - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_reference_images_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_list_reference_images` interceptor runs + before the `post_list_reference_images_with_metadata` interceptor. """ return response + def post_list_reference_images_with_metadata( + self, + response: product_search_service.ListReferenceImagesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ListReferenceImagesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_reference_images + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_list_reference_images_with_metadata` + interceptor in new development instead of the `post_list_reference_images` interceptor. + When both interceptors are used, this `post_list_reference_images_with_metadata` interceptor runs after the + `post_list_reference_images` interceptor. The (possibly modified) response returned by + `post_list_reference_images` will be passed to + `post_list_reference_images_with_metadata`. + """ + return response, metadata + def pre_purge_products( self, request: product_search_service.PurgeProductsRequest, @@ -574,12 +847,35 @@ def post_purge_products( ) -> operations_pb2.Operation: """Post-rpc interceptor for purge_products - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_purge_products_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_purge_products` interceptor runs + before the `post_purge_products_with_metadata` interceptor. """ return response + def post_purge_products_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for purge_products + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_purge_products_with_metadata` + interceptor in new development instead of the `post_purge_products` interceptor. + When both interceptors are used, this `post_purge_products_with_metadata` interceptor runs after the + `post_purge_products` interceptor. The (possibly modified) response returned by + `post_purge_products` will be passed to + `post_purge_products_with_metadata`. + """ + return response, metadata + def pre_remove_product_from_product_set( self, request: product_search_service.RemoveProductFromProductSetRequest, @@ -615,12 +911,35 @@ def post_update_product( ) -> product_search_service.Product: """Post-rpc interceptor for update_product - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_product_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_update_product` interceptor runs + before the `post_update_product_with_metadata` interceptor. """ return response + def post_update_product_with_metadata( + self, + response: product_search_service.Product, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[product_search_service.Product, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_product + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_update_product_with_metadata` + interceptor in new development instead of the `post_update_product` interceptor. + When both interceptors are used, this `post_update_product_with_metadata` interceptor runs after the + `post_update_product` interceptor. The (possibly modified) response returned by + `post_update_product` will be passed to + `post_update_product_with_metadata`. + """ + return response, metadata + def pre_update_product_set( self, request: product_search_service.UpdateProductSetRequest, @@ -641,12 +960,37 @@ def post_update_product_set( ) -> product_search_service.ProductSet: """Post-rpc interceptor for update_product_set - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_product_set_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the ProductSearch server but before - it is returned to user code. + it is returned to user code. This `post_update_product_set` interceptor runs + before the `post_update_product_set_with_metadata` interceptor. """ return response + def post_update_product_set_with_metadata( + self, + response: product_search_service.ProductSet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + product_search_service.ProductSet, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for update_product_set + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the ProductSearch server but before it is returned to user code. + + We recommend only using this `post_update_product_set_with_metadata` + interceptor in new development instead of the `post_update_product_set` interceptor. + When both interceptors are used, this `post_update_product_set_with_metadata` interceptor runs after the + `post_update_product_set` interceptor. The (possibly modified) response returned by + `post_update_product_set` will be passed to + `post_update_product_set_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class ProductSearchRestStub: @@ -1021,6 +1365,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1174,6 +1522,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1326,6 +1678,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_reference_image(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_reference_image_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1794,6 +2150,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1939,6 +2299,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2085,6 +2449,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_reference_image(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_reference_image_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2236,6 +2604,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_import_product_sets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_import_product_sets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2376,6 +2748,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_products(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_products_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2520,6 +2896,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_product_sets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_product_sets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2671,6 +3051,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_products_in_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_products_in_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2817,6 +3201,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_reference_images(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_reference_images_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2968,6 +3356,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_purge_products(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_purge_products_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3233,6 +3625,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_product(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_product_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3386,6 +3782,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_product_set(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_product_set_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1.json b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1.json index 97c376cddd17..8508099e5ba2 100644 --- a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1.json +++ b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-vision", - "version": "3.9.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p1beta1.json b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p1beta1.json index ea413f126c8e..3274884f3da9 100644 --- a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p1beta1.json +++ b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-vision", - "version": "3.9.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p2beta1.json b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p2beta1.json index d56c8e391d98..1737a0ce6698 100644 --- a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p2beta1.json +++ b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p2beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-vision", - "version": "3.9.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p3beta1.json b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p3beta1.json index 66035244f16a..da3759f8bc75 100644 --- a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p3beta1.json +++ b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p3beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-vision", - "version": "3.9.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p4beta1.json b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p4beta1.json index 6f5ca7401bbd..e239e7f4ae0e 100644 --- a/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p4beta1.json +++ b/packages/google-cloud-vision/samples/generated_samples/snippet_metadata_google.cloud.vision.v1p4beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-vision", - "version": "3.9.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-vision/tests/unit/gapic/vision_v1/test_image_annotator.py b/packages/google-cloud-vision/tests/unit/gapic/vision_v1/test_image_annotator.py index 9e386afc3818..bca83bc7af17 100644 --- a/packages/google-cloud-vision/tests/unit/gapic/vision_v1/test_image_annotator.py +++ b/packages/google-cloud-vision/tests/unit/gapic/vision_v1/test_image_annotator.py @@ -70,6 +70,13 @@ ) from google.cloud.vision_v1.types import geometry, image_annotator, product_search +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -328,6 +335,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -3487,10 +3537,14 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_batch_annotate_images" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_batch_annotate_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_batch_annotate_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.BatchAnnotateImagesRequest.pb( image_annotator.BatchAnnotateImagesRequest() ) @@ -3516,6 +3570,10 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = image_annotator.BatchAnnotateImagesResponse() + post_with_metadata.return_value = ( + image_annotator.BatchAnnotateImagesResponse(), + metadata, + ) client.batch_annotate_images( request, @@ -3527,6 +3585,7 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_batch_annotate_files_rest_bad_request( @@ -3608,10 +3667,14 @@ def test_batch_annotate_files_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_batch_annotate_files" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_batch_annotate_files_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_batch_annotate_files" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.BatchAnnotateFilesRequest.pb( image_annotator.BatchAnnotateFilesRequest() ) @@ -3637,6 +3700,10 @@ def test_batch_annotate_files_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = image_annotator.BatchAnnotateFilesResponse() + post_with_metadata.return_value = ( + image_annotator.BatchAnnotateFilesResponse(), + metadata, + ) client.batch_annotate_files( request, @@ -3648,6 +3715,7 @@ def test_batch_annotate_files_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_async_batch_annotate_images_rest_bad_request( @@ -3728,10 +3796,14 @@ def test_async_batch_annotate_images_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_async_batch_annotate_images" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_async_batch_annotate_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_async_batch_annotate_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.AsyncBatchAnnotateImagesRequest.pb( image_annotator.AsyncBatchAnnotateImagesRequest() ) @@ -3755,6 +3827,7 @@ def test_async_batch_annotate_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.async_batch_annotate_images( request, @@ -3766,6 +3839,7 @@ def test_async_batch_annotate_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_async_batch_annotate_files_rest_bad_request( @@ -3846,10 +3920,14 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_async_batch_annotate_files" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_async_batch_annotate_files_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_async_batch_annotate_files" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.AsyncBatchAnnotateFilesRequest.pb( image_annotator.AsyncBatchAnnotateFilesRequest() ) @@ -3873,6 +3951,7 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.async_batch_annotate_files( request, @@ -3884,6 +3963,7 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_operation_rest_bad_request( diff --git a/packages/google-cloud-vision/tests/unit/gapic/vision_v1/test_product_search.py b/packages/google-cloud-vision/tests/unit/gapic/vision_v1/test_product_search.py index 1287f1cb8b0d..622ea8203d40 100644 --- a/packages/google-cloud-vision/tests/unit/gapic/vision_v1/test_product_search.py +++ b/packages/google-cloud-vision/tests/unit/gapic/vision_v1/test_product_search.py @@ -75,6 +75,13 @@ ) from google.cloud.vision_v1.types import geometry, product_search_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -329,6 +336,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ProductSearchClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ProductSearchClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -13508,10 +13558,13 @@ def test_create_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_create_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateProductSetRequest.pb( product_search_service.CreateProductSetRequest() ) @@ -13537,6 +13590,7 @@ def test_create_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.create_product_set( request, @@ -13548,6 +13602,7 @@ def test_create_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_product_sets_rest_bad_request( @@ -13632,10 +13687,13 @@ def test_list_product_sets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_product_sets" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_list_product_sets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_product_sets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductSetsRequest.pb( product_search_service.ListProductSetsRequest() ) @@ -13661,6 +13719,10 @@ def test_list_product_sets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductSetsResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductSetsResponse(), + metadata, + ) client.list_product_sets( request, @@ -13672,6 +13734,7 @@ def test_list_product_sets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_product_set_rest_bad_request( @@ -13758,10 +13821,13 @@ def test_get_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_get_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetProductSetRequest.pb( product_search_service.GetProductSetRequest() ) @@ -13787,6 +13853,7 @@ def test_get_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.get_product_set( request, @@ -13798,6 +13865,7 @@ def test_get_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_product_set_rest_bad_request( @@ -13976,10 +14044,13 @@ def test_update_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_update_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_update_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_update_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.UpdateProductSetRequest.pb( product_search_service.UpdateProductSetRequest() ) @@ -14005,6 +14076,7 @@ def test_update_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.update_product_set( request, @@ -14016,6 +14088,7 @@ def test_update_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_product_set_rest_bad_request( @@ -14289,10 +14362,13 @@ def test_create_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_create_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateProductRequest.pb( product_search_service.CreateProductRequest() ) @@ -14318,6 +14394,7 @@ def test_create_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.create_product( request, @@ -14329,6 +14406,7 @@ def test_create_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_products_rest_bad_request( @@ -14413,10 +14491,13 @@ def test_list_products_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_products" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_list_products_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_products" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductsRequest.pb( product_search_service.ListProductsRequest() ) @@ -14442,6 +14523,10 @@ def test_list_products_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductsResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductsResponse(), + metadata, + ) client.list_products( request, @@ -14453,6 +14538,7 @@ def test_list_products_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_product_rest_bad_request( @@ -14543,10 +14629,13 @@ def test_get_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_get_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetProductRequest.pb( product_search_service.GetProductRequest() ) @@ -14572,6 +14661,7 @@ def test_get_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.get_product( request, @@ -14583,6 +14673,7 @@ def test_get_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_product_rest_bad_request( @@ -14751,10 +14842,13 @@ def test_update_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_update_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_update_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_update_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.UpdateProductRequest.pb( product_search_service.UpdateProductRequest() ) @@ -14780,6 +14874,7 @@ def test_update_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.update_product( request, @@ -14791,6 +14886,7 @@ def test_update_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_product_rest_bad_request( @@ -15065,10 +15161,14 @@ def test_create_reference_image_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_reference_image" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_create_reference_image_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_reference_image" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateReferenceImageRequest.pb( product_search_service.CreateReferenceImageRequest() ) @@ -15094,6 +15194,10 @@ def test_create_reference_image_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ReferenceImage() + post_with_metadata.return_value = ( + product_search_service.ReferenceImage(), + metadata, + ) client.create_reference_image( request, @@ -15105,6 +15209,7 @@ def test_create_reference_image_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_reference_image_rest_bad_request( @@ -15306,10 +15411,14 @@ def test_list_reference_images_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_reference_images" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_list_reference_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_reference_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListReferenceImagesRequest.pb( product_search_service.ListReferenceImagesRequest() ) @@ -15335,6 +15444,10 @@ def test_list_reference_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListReferenceImagesResponse() + post_with_metadata.return_value = ( + product_search_service.ListReferenceImagesResponse(), + metadata, + ) client.list_reference_images( request, @@ -15346,6 +15459,7 @@ def test_list_reference_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_reference_image_rest_bad_request( @@ -15436,10 +15550,14 @@ def test_get_reference_image_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_reference_image" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_get_reference_image_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_reference_image" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetReferenceImageRequest.pb( product_search_service.GetReferenceImageRequest() ) @@ -15465,6 +15583,10 @@ def test_get_reference_image_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ReferenceImage() + post_with_metadata.return_value = ( + product_search_service.ReferenceImage(), + metadata, + ) client.get_reference_image( request, @@ -15476,6 +15598,7 @@ def test_get_reference_image_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_add_product_to_product_set_rest_bad_request( @@ -15780,10 +15903,14 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_products_in_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_list_products_in_product_set_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_products_in_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductsInProductSetRequest.pb( product_search_service.ListProductsInProductSetRequest() ) @@ -15809,6 +15936,10 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductsInProductSetResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductsInProductSetResponse(), + metadata, + ) client.list_products_in_product_set( request, @@ -15820,6 +15951,7 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_import_product_sets_rest_bad_request( @@ -15900,10 +16032,14 @@ def test_import_product_sets_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ProductSearchRestInterceptor, "post_import_product_sets" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_import_product_sets_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_import_product_sets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ImportProductSetsRequest.pb( product_search_service.ImportProductSetsRequest() ) @@ -15927,6 +16063,7 @@ def test_import_product_sets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.import_product_sets( request, @@ -15938,6 +16075,7 @@ def test_import_product_sets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_purge_products_rest_bad_request( @@ -16018,10 +16156,13 @@ def test_purge_products_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ProductSearchRestInterceptor, "post_purge_products" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_purge_products_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_purge_products" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.PurgeProductsRequest.pb( product_search_service.PurgeProductsRequest() ) @@ -16045,6 +16186,7 @@ def test_purge_products_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.purge_products( request, @@ -16056,6 +16198,7 @@ def test_purge_products_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_operation_rest_bad_request( diff --git a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p1beta1/test_image_annotator.py b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p1beta1/test_image_annotator.py index bc7d67520e21..1118cd25a8be 100644 --- a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p1beta1/test_image_annotator.py +++ b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p1beta1/test_image_annotator.py @@ -60,6 +60,13 @@ ) from google.cloud.vision_v1p1beta1.types import image_annotator +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -318,6 +325,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -1796,10 +1846,14 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_batch_annotate_images" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_batch_annotate_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_batch_annotate_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.BatchAnnotateImagesRequest.pb( image_annotator.BatchAnnotateImagesRequest() ) @@ -1825,6 +1879,10 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = image_annotator.BatchAnnotateImagesResponse() + post_with_metadata.return_value = ( + image_annotator.BatchAnnotateImagesResponse(), + metadata, + ) client.batch_annotate_images( request, @@ -1836,6 +1894,7 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p2beta1/test_image_annotator.py b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p2beta1/test_image_annotator.py index 95b558563eb8..3bb9b08ca3ec 100644 --- a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p2beta1/test_image_annotator.py +++ b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p2beta1/test_image_annotator.py @@ -70,6 +70,13 @@ ) from google.cloud.vision_v1p2beta1.types import image_annotator +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -328,6 +335,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -2358,10 +2408,14 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_batch_annotate_images" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_batch_annotate_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_batch_annotate_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.BatchAnnotateImagesRequest.pb( image_annotator.BatchAnnotateImagesRequest() ) @@ -2387,6 +2441,10 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = image_annotator.BatchAnnotateImagesResponse() + post_with_metadata.return_value = ( + image_annotator.BatchAnnotateImagesResponse(), + metadata, + ) client.batch_annotate_images( request, @@ -2398,6 +2456,7 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_async_batch_annotate_files_rest_bad_request( @@ -2478,10 +2537,14 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_async_batch_annotate_files" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_async_batch_annotate_files_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_async_batch_annotate_files" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.AsyncBatchAnnotateFilesRequest.pb( image_annotator.AsyncBatchAnnotateFilesRequest() ) @@ -2505,6 +2568,7 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.async_batch_annotate_files( request, @@ -2516,6 +2580,7 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p3beta1/test_image_annotator.py b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p3beta1/test_image_annotator.py index d38612cd962f..43e63c030916 100644 --- a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p3beta1/test_image_annotator.py +++ b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p3beta1/test_image_annotator.py @@ -74,6 +74,13 @@ product_search, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -332,6 +339,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -2362,10 +2412,14 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_batch_annotate_images" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_batch_annotate_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_batch_annotate_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.BatchAnnotateImagesRequest.pb( image_annotator.BatchAnnotateImagesRequest() ) @@ -2391,6 +2445,10 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = image_annotator.BatchAnnotateImagesResponse() + post_with_metadata.return_value = ( + image_annotator.BatchAnnotateImagesResponse(), + metadata, + ) client.batch_annotate_images( request, @@ -2402,6 +2460,7 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_async_batch_annotate_files_rest_bad_request( @@ -2482,10 +2541,14 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_async_batch_annotate_files" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_async_batch_annotate_files_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_async_batch_annotate_files" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.AsyncBatchAnnotateFilesRequest.pb( image_annotator.AsyncBatchAnnotateFilesRequest() ) @@ -2509,6 +2572,7 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.async_batch_annotate_files( request, @@ -2520,6 +2584,7 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p3beta1/test_product_search.py b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p3beta1/test_product_search.py index b71651854ec6..675e153e0987 100644 --- a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p3beta1/test_product_search.py +++ b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p3beta1/test_product_search.py @@ -74,6 +74,13 @@ ) from google.cloud.vision_v1p3beta1.types import geometry, product_search_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -328,6 +335,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ProductSearchClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ProductSearchClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -12959,10 +13009,13 @@ def test_create_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_create_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateProductSetRequest.pb( product_search_service.CreateProductSetRequest() ) @@ -12988,6 +13041,7 @@ def test_create_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.create_product_set( request, @@ -12999,6 +13053,7 @@ def test_create_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_product_sets_rest_bad_request( @@ -13083,10 +13138,13 @@ def test_list_product_sets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_product_sets" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_list_product_sets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_product_sets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductSetsRequest.pb( product_search_service.ListProductSetsRequest() ) @@ -13112,6 +13170,10 @@ def test_list_product_sets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductSetsResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductSetsResponse(), + metadata, + ) client.list_product_sets( request, @@ -13123,6 +13185,7 @@ def test_list_product_sets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_product_set_rest_bad_request( @@ -13209,10 +13272,13 @@ def test_get_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_get_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetProductSetRequest.pb( product_search_service.GetProductSetRequest() ) @@ -13238,6 +13304,7 @@ def test_get_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.get_product_set( request, @@ -13249,6 +13316,7 @@ def test_get_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_product_set_rest_bad_request( @@ -13427,10 +13495,13 @@ def test_update_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_update_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_update_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_update_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.UpdateProductSetRequest.pb( product_search_service.UpdateProductSetRequest() ) @@ -13456,6 +13527,7 @@ def test_update_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.update_product_set( request, @@ -13467,6 +13539,7 @@ def test_update_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_product_set_rest_bad_request( @@ -13740,10 +13813,13 @@ def test_create_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_create_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateProductRequest.pb( product_search_service.CreateProductRequest() ) @@ -13769,6 +13845,7 @@ def test_create_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.create_product( request, @@ -13780,6 +13857,7 @@ def test_create_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_products_rest_bad_request( @@ -13864,10 +13942,13 @@ def test_list_products_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_products" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_list_products_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_products" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductsRequest.pb( product_search_service.ListProductsRequest() ) @@ -13893,6 +13974,10 @@ def test_list_products_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductsResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductsResponse(), + metadata, + ) client.list_products( request, @@ -13904,6 +13989,7 @@ def test_list_products_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_product_rest_bad_request( @@ -13994,10 +14080,13 @@ def test_get_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_get_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetProductRequest.pb( product_search_service.GetProductRequest() ) @@ -14023,6 +14112,7 @@ def test_get_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.get_product( request, @@ -14034,6 +14124,7 @@ def test_get_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_product_rest_bad_request( @@ -14202,10 +14293,13 @@ def test_update_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_update_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_update_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_update_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.UpdateProductRequest.pb( product_search_service.UpdateProductRequest() ) @@ -14231,6 +14325,7 @@ def test_update_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.update_product( request, @@ -14242,6 +14337,7 @@ def test_update_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_product_rest_bad_request( @@ -14516,10 +14612,14 @@ def test_create_reference_image_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_reference_image" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_create_reference_image_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_reference_image" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateReferenceImageRequest.pb( product_search_service.CreateReferenceImageRequest() ) @@ -14545,6 +14645,10 @@ def test_create_reference_image_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ReferenceImage() + post_with_metadata.return_value = ( + product_search_service.ReferenceImage(), + metadata, + ) client.create_reference_image( request, @@ -14556,6 +14660,7 @@ def test_create_reference_image_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_reference_image_rest_bad_request( @@ -14757,10 +14862,14 @@ def test_list_reference_images_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_reference_images" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_list_reference_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_reference_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListReferenceImagesRequest.pb( product_search_service.ListReferenceImagesRequest() ) @@ -14786,6 +14895,10 @@ def test_list_reference_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListReferenceImagesResponse() + post_with_metadata.return_value = ( + product_search_service.ListReferenceImagesResponse(), + metadata, + ) client.list_reference_images( request, @@ -14797,6 +14910,7 @@ def test_list_reference_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_reference_image_rest_bad_request( @@ -14887,10 +15001,14 @@ def test_get_reference_image_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_reference_image" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_get_reference_image_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_reference_image" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetReferenceImageRequest.pb( product_search_service.GetReferenceImageRequest() ) @@ -14916,6 +15034,10 @@ def test_get_reference_image_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ReferenceImage() + post_with_metadata.return_value = ( + product_search_service.ReferenceImage(), + metadata, + ) client.get_reference_image( request, @@ -14927,6 +15049,7 @@ def test_get_reference_image_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_add_product_to_product_set_rest_bad_request( @@ -15231,10 +15354,14 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_products_in_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_list_products_in_product_set_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_products_in_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductsInProductSetRequest.pb( product_search_service.ListProductsInProductSetRequest() ) @@ -15260,6 +15387,10 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductsInProductSetResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductsInProductSetResponse(), + metadata, + ) client.list_products_in_product_set( request, @@ -15271,6 +15402,7 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_import_product_sets_rest_bad_request( @@ -15351,10 +15483,14 @@ def test_import_product_sets_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ProductSearchRestInterceptor, "post_import_product_sets" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_import_product_sets_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_import_product_sets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ImportProductSetsRequest.pb( product_search_service.ImportProductSetsRequest() ) @@ -15378,6 +15514,7 @@ def test_import_product_sets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.import_product_sets( request, @@ -15389,6 +15526,7 @@ def test_import_product_sets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p4beta1/test_image_annotator.py b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p4beta1/test_image_annotator.py index 9718f97a0637..817dcefc46aa 100644 --- a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p4beta1/test_image_annotator.py +++ b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p4beta1/test_image_annotator.py @@ -75,6 +75,13 @@ product_search, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -333,6 +340,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ImageAnnotatorClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -3476,10 +3526,14 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_batch_annotate_images" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_batch_annotate_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_batch_annotate_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.BatchAnnotateImagesRequest.pb( image_annotator.BatchAnnotateImagesRequest() ) @@ -3505,6 +3559,10 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = image_annotator.BatchAnnotateImagesResponse() + post_with_metadata.return_value = ( + image_annotator.BatchAnnotateImagesResponse(), + metadata, + ) client.batch_annotate_images( request, @@ -3516,6 +3574,7 @@ def test_batch_annotate_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_batch_annotate_files_rest_bad_request( @@ -3597,10 +3656,14 @@ def test_batch_annotate_files_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_batch_annotate_files" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_batch_annotate_files_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_batch_annotate_files" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.BatchAnnotateFilesRequest.pb( image_annotator.BatchAnnotateFilesRequest() ) @@ -3626,6 +3689,10 @@ def test_batch_annotate_files_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = image_annotator.BatchAnnotateFilesResponse() + post_with_metadata.return_value = ( + image_annotator.BatchAnnotateFilesResponse(), + metadata, + ) client.batch_annotate_files( request, @@ -3637,6 +3704,7 @@ def test_batch_annotate_files_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_async_batch_annotate_images_rest_bad_request( @@ -3717,10 +3785,14 @@ def test_async_batch_annotate_images_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_async_batch_annotate_images" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_async_batch_annotate_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_async_batch_annotate_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.AsyncBatchAnnotateImagesRequest.pb( image_annotator.AsyncBatchAnnotateImagesRequest() ) @@ -3744,6 +3816,7 @@ def test_async_batch_annotate_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.async_batch_annotate_images( request, @@ -3755,6 +3828,7 @@ def test_async_batch_annotate_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_async_batch_annotate_files_rest_bad_request( @@ -3835,10 +3909,14 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ImageAnnotatorRestInterceptor, "post_async_batch_annotate_files" ) as post, mock.patch.object( + transports.ImageAnnotatorRestInterceptor, + "post_async_batch_annotate_files_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ImageAnnotatorRestInterceptor, "pre_async_batch_annotate_files" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = image_annotator.AsyncBatchAnnotateFilesRequest.pb( image_annotator.AsyncBatchAnnotateFilesRequest() ) @@ -3862,6 +3940,7 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.async_batch_annotate_files( request, @@ -3873,6 +3952,7 @@ def test_async_batch_annotate_files_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p4beta1/test_product_search.py b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p4beta1/test_product_search.py index e9d31f2a351f..4e9f183d8964 100644 --- a/packages/google-cloud-vision/tests/unit/gapic/vision_v1p4beta1/test_product_search.py +++ b/packages/google-cloud-vision/tests/unit/gapic/vision_v1p4beta1/test_product_search.py @@ -75,6 +75,13 @@ ) from google.cloud.vision_v1p4beta1.types import geometry, product_search_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -329,6 +336,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ProductSearchClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ProductSearchClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -13512,10 +13562,13 @@ def test_create_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_create_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateProductSetRequest.pb( product_search_service.CreateProductSetRequest() ) @@ -13541,6 +13594,7 @@ def test_create_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.create_product_set( request, @@ -13552,6 +13606,7 @@ def test_create_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_product_sets_rest_bad_request( @@ -13636,10 +13691,13 @@ def test_list_product_sets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_product_sets" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_list_product_sets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_product_sets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductSetsRequest.pb( product_search_service.ListProductSetsRequest() ) @@ -13665,6 +13723,10 @@ def test_list_product_sets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductSetsResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductSetsResponse(), + metadata, + ) client.list_product_sets( request, @@ -13676,6 +13738,7 @@ def test_list_product_sets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_product_set_rest_bad_request( @@ -13762,10 +13825,13 @@ def test_get_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_get_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetProductSetRequest.pb( product_search_service.GetProductSetRequest() ) @@ -13791,6 +13857,7 @@ def test_get_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.get_product_set( request, @@ -13802,6 +13869,7 @@ def test_get_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_product_set_rest_bad_request( @@ -13980,10 +14048,13 @@ def test_update_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_update_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_update_product_set_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_update_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.UpdateProductSetRequest.pb( product_search_service.UpdateProductSetRequest() ) @@ -14009,6 +14080,7 @@ def test_update_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ProductSet() + post_with_metadata.return_value = product_search_service.ProductSet(), metadata client.update_product_set( request, @@ -14020,6 +14092,7 @@ def test_update_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_product_set_rest_bad_request( @@ -14293,10 +14366,13 @@ def test_create_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_create_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateProductRequest.pb( product_search_service.CreateProductRequest() ) @@ -14322,6 +14398,7 @@ def test_create_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.create_product( request, @@ -14333,6 +14410,7 @@ def test_create_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_products_rest_bad_request( @@ -14417,10 +14495,13 @@ def test_list_products_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_products" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_list_products_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_products" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductsRequest.pb( product_search_service.ListProductsRequest() ) @@ -14446,6 +14527,10 @@ def test_list_products_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductsResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductsResponse(), + metadata, + ) client.list_products( request, @@ -14457,6 +14542,7 @@ def test_list_products_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_product_rest_bad_request( @@ -14547,10 +14633,13 @@ def test_get_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_get_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetProductRequest.pb( product_search_service.GetProductRequest() ) @@ -14576,6 +14665,7 @@ def test_get_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.get_product( request, @@ -14587,6 +14677,7 @@ def test_get_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_product_rest_bad_request( @@ -14755,10 +14846,13 @@ def test_update_product_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_update_product" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_update_product_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_update_product" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.UpdateProductRequest.pb( product_search_service.UpdateProductRequest() ) @@ -14784,6 +14878,7 @@ def test_update_product_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.Product() + post_with_metadata.return_value = product_search_service.Product(), metadata client.update_product( request, @@ -14795,6 +14890,7 @@ def test_update_product_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_product_rest_bad_request( @@ -15069,10 +15165,14 @@ def test_create_reference_image_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_create_reference_image" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_create_reference_image_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_create_reference_image" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.CreateReferenceImageRequest.pb( product_search_service.CreateReferenceImageRequest() ) @@ -15098,6 +15198,10 @@ def test_create_reference_image_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ReferenceImage() + post_with_metadata.return_value = ( + product_search_service.ReferenceImage(), + metadata, + ) client.create_reference_image( request, @@ -15109,6 +15213,7 @@ def test_create_reference_image_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_reference_image_rest_bad_request( @@ -15310,10 +15415,14 @@ def test_list_reference_images_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_reference_images" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_list_reference_images_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_reference_images" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListReferenceImagesRequest.pb( product_search_service.ListReferenceImagesRequest() ) @@ -15339,6 +15448,10 @@ def test_list_reference_images_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListReferenceImagesResponse() + post_with_metadata.return_value = ( + product_search_service.ListReferenceImagesResponse(), + metadata, + ) client.list_reference_images( request, @@ -15350,6 +15463,7 @@ def test_list_reference_images_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_reference_image_rest_bad_request( @@ -15440,10 +15554,14 @@ def test_get_reference_image_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_get_reference_image" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_get_reference_image_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_get_reference_image" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.GetReferenceImageRequest.pb( product_search_service.GetReferenceImageRequest() ) @@ -15469,6 +15587,10 @@ def test_get_reference_image_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ReferenceImage() + post_with_metadata.return_value = ( + product_search_service.ReferenceImage(), + metadata, + ) client.get_reference_image( request, @@ -15480,6 +15602,7 @@ def test_get_reference_image_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_add_product_to_product_set_rest_bad_request( @@ -15784,10 +15907,14 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.ProductSearchRestInterceptor, "post_list_products_in_product_set" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_list_products_in_product_set_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_list_products_in_product_set" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ListProductsInProductSetRequest.pb( product_search_service.ListProductsInProductSetRequest() ) @@ -15813,6 +15940,10 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = product_search_service.ListProductsInProductSetResponse() + post_with_metadata.return_value = ( + product_search_service.ListProductsInProductSetResponse(), + metadata, + ) client.list_products_in_product_set( request, @@ -15824,6 +15955,7 @@ def test_list_products_in_product_set_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_import_product_sets_rest_bad_request( @@ -15904,10 +16036,14 @@ def test_import_product_sets_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ProductSearchRestInterceptor, "post_import_product_sets" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, + "post_import_product_sets_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_import_product_sets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.ImportProductSetsRequest.pb( product_search_service.ImportProductSetsRequest() ) @@ -15931,6 +16067,7 @@ def test_import_product_sets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.import_product_sets( request, @@ -15942,6 +16079,7 @@ def test_import_product_sets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_purge_products_rest_bad_request( @@ -16022,10 +16160,13 @@ def test_purge_products_rest_interceptors(null_interceptor): ), mock.patch.object( transports.ProductSearchRestInterceptor, "post_purge_products" ) as post, mock.patch.object( + transports.ProductSearchRestInterceptor, "post_purge_products_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.ProductSearchRestInterceptor, "pre_purge_products" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = product_search_service.PurgeProductsRequest.pb( product_search_service.PurgeProductsRequest() ) @@ -16049,6 +16190,7 @@ def test_purge_products_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.purge_products( request, @@ -16060,6 +16202,7 @@ def test_purge_products_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-visionai/google/cloud/visionai/gapic_version.py b/packages/google-cloud-visionai/google/cloud/visionai/gapic_version.py index 51d2795b9d6b..558c8aab67c5 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai/gapic_version.py +++ b/packages/google-cloud-visionai/google/cloud/visionai/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.1.6" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/gapic_version.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/gapic_version.py index 51d2795b9d6b..558c8aab67c5 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/gapic_version.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.1.6" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/app_platform/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/app_platform/client.py index b69e79da45d5..0dd1cec32a2f 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/app_platform/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/app_platform/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -588,6 +590,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -4049,16 +4078,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -4104,16 +4137,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/app_platform/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/app_platform/transports/rest.py index f7ac39bbab1c..04604685fdc6 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/app_platform/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/app_platform/transports/rest.py @@ -306,12 +306,35 @@ def post_add_application_stream_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for add_application_stream_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_add_application_stream_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_add_application_stream_input` interceptor runs + before the `post_add_application_stream_input_with_metadata` interceptor. """ return response + def post_add_application_stream_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for add_application_stream_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_add_application_stream_input_with_metadata` + interceptor in new development instead of the `post_add_application_stream_input` interceptor. + When both interceptors are used, this `post_add_application_stream_input_with_metadata` interceptor runs after the + `post_add_application_stream_input` interceptor. The (possibly modified) response returned by + `post_add_application_stream_input` will be passed to + `post_add_application_stream_input_with_metadata`. + """ + return response, metadata + def pre_create_application( self, request: platform.CreateApplicationRequest, @@ -331,12 +354,35 @@ def post_create_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_create_application` interceptor runs + before the `post_create_application_with_metadata` interceptor. """ return response + def post_create_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_create_application_with_metadata` + interceptor in new development instead of the `post_create_application` interceptor. + When both interceptors are used, this `post_create_application_with_metadata` interceptor runs after the + `post_create_application` interceptor. The (possibly modified) response returned by + `post_create_application` will be passed to + `post_create_application_with_metadata`. + """ + return response, metadata + def pre_create_application_instances( self, request: platform.CreateApplicationInstancesRequest, @@ -357,12 +403,35 @@ def post_create_application_instances( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_application_instances - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_application_instances_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_create_application_instances` interceptor runs + before the `post_create_application_instances_with_metadata` interceptor. """ return response + def post_create_application_instances_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_application_instances + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_create_application_instances_with_metadata` + interceptor in new development instead of the `post_create_application_instances` interceptor. + When both interceptors are used, this `post_create_application_instances_with_metadata` interceptor runs after the + `post_create_application_instances` interceptor. The (possibly modified) response returned by + `post_create_application_instances` will be passed to + `post_create_application_instances_with_metadata`. + """ + return response, metadata + def pre_create_draft( self, request: platform.CreateDraftRequest, @@ -380,12 +449,35 @@ def post_create_draft( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_draft - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_draft_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_create_draft` interceptor runs + before the `post_create_draft_with_metadata` interceptor. """ return response + def post_create_draft_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_draft + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_create_draft_with_metadata` + interceptor in new development instead of the `post_create_draft` interceptor. + When both interceptors are used, this `post_create_draft_with_metadata` interceptor runs after the + `post_create_draft` interceptor. The (possibly modified) response returned by + `post_create_draft` will be passed to + `post_create_draft_with_metadata`. + """ + return response, metadata + def pre_create_processor( self, request: platform.CreateProcessorRequest, @@ -405,12 +497,35 @@ def post_create_processor( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_processor - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_processor_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_create_processor` interceptor runs + before the `post_create_processor_with_metadata` interceptor. """ return response + def post_create_processor_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_processor + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_create_processor_with_metadata` + interceptor in new development instead of the `post_create_processor` interceptor. + When both interceptors are used, this `post_create_processor_with_metadata` interceptor runs after the + `post_create_processor` interceptor. The (possibly modified) response returned by + `post_create_processor` will be passed to + `post_create_processor_with_metadata`. + """ + return response, metadata + def pre_delete_application( self, request: platform.DeleteApplicationRequest, @@ -430,12 +545,35 @@ def post_delete_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_delete_application` interceptor runs + before the `post_delete_application_with_metadata` interceptor. """ return response + def post_delete_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_delete_application_with_metadata` + interceptor in new development instead of the `post_delete_application` interceptor. + When both interceptors are used, this `post_delete_application_with_metadata` interceptor runs after the + `post_delete_application` interceptor. The (possibly modified) response returned by + `post_delete_application` will be passed to + `post_delete_application_with_metadata`. + """ + return response, metadata + def pre_delete_application_instances( self, request: platform.DeleteApplicationInstancesRequest, @@ -456,12 +594,35 @@ def post_delete_application_instances( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_application_instances - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_application_instances_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_delete_application_instances` interceptor runs + before the `post_delete_application_instances_with_metadata` interceptor. """ return response + def post_delete_application_instances_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_application_instances + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_delete_application_instances_with_metadata` + interceptor in new development instead of the `post_delete_application_instances` interceptor. + When both interceptors are used, this `post_delete_application_instances_with_metadata` interceptor runs after the + `post_delete_application_instances` interceptor. The (possibly modified) response returned by + `post_delete_application_instances` will be passed to + `post_delete_application_instances_with_metadata`. + """ + return response, metadata + def pre_delete_draft( self, request: platform.DeleteDraftRequest, @@ -479,12 +640,35 @@ def post_delete_draft( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_draft - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_draft_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_delete_draft` interceptor runs + before the `post_delete_draft_with_metadata` interceptor. """ return response + def post_delete_draft_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_draft + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_delete_draft_with_metadata` + interceptor in new development instead of the `post_delete_draft` interceptor. + When both interceptors are used, this `post_delete_draft_with_metadata` interceptor runs after the + `post_delete_draft` interceptor. The (possibly modified) response returned by + `post_delete_draft` will be passed to + `post_delete_draft_with_metadata`. + """ + return response, metadata + def pre_delete_processor( self, request: platform.DeleteProcessorRequest, @@ -504,12 +688,35 @@ def post_delete_processor( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_processor - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_processor_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_delete_processor` interceptor runs + before the `post_delete_processor_with_metadata` interceptor. """ return response + def post_delete_processor_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_processor + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_delete_processor_with_metadata` + interceptor in new development instead of the `post_delete_processor` interceptor. + When both interceptors are used, this `post_delete_processor_with_metadata` interceptor runs after the + `post_delete_processor` interceptor. The (possibly modified) response returned by + `post_delete_processor` will be passed to + `post_delete_processor_with_metadata`. + """ + return response, metadata + def pre_deploy_application( self, request: platform.DeployApplicationRequest, @@ -529,12 +736,35 @@ def post_deploy_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for deploy_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_deploy_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_deploy_application` interceptor runs + before the `post_deploy_application_with_metadata` interceptor. """ return response + def post_deploy_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for deploy_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_deploy_application_with_metadata` + interceptor in new development instead of the `post_deploy_application` interceptor. + When both interceptors are used, this `post_deploy_application_with_metadata` interceptor runs after the + `post_deploy_application` interceptor. The (possibly modified) response returned by + `post_deploy_application` will be passed to + `post_deploy_application_with_metadata`. + """ + return response, metadata + def pre_get_application( self, request: platform.GetApplicationRequest, @@ -552,12 +782,35 @@ def post_get_application( ) -> platform.Application: """Post-rpc interceptor for get_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_get_application` interceptor runs + before the `post_get_application_with_metadata` interceptor. """ return response + def post_get_application_with_metadata( + self, + response: platform.Application, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.Application, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_get_application_with_metadata` + interceptor in new development instead of the `post_get_application` interceptor. + When both interceptors are used, this `post_get_application_with_metadata` interceptor runs after the + `post_get_application` interceptor. The (possibly modified) response returned by + `post_get_application` will be passed to + `post_get_application_with_metadata`. + """ + return response, metadata + def pre_get_draft( self, request: platform.GetDraftRequest, @@ -573,12 +826,35 @@ def pre_get_draft( def post_get_draft(self, response: platform.Draft) -> platform.Draft: """Post-rpc interceptor for get_draft - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_draft_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_get_draft` interceptor runs + before the `post_get_draft_with_metadata` interceptor. """ return response + def post_get_draft_with_metadata( + self, + response: platform.Draft, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.Draft, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_draft + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_get_draft_with_metadata` + interceptor in new development instead of the `post_get_draft` interceptor. + When both interceptors are used, this `post_get_draft_with_metadata` interceptor runs after the + `post_get_draft` interceptor. The (possibly modified) response returned by + `post_get_draft` will be passed to + `post_get_draft_with_metadata`. + """ + return response, metadata + def pre_get_instance( self, request: platform.GetInstanceRequest, @@ -594,12 +870,35 @@ def pre_get_instance( def post_get_instance(self, response: platform.Instance) -> platform.Instance: """Post-rpc interceptor for get_instance - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_instance_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_get_instance` interceptor runs + before the `post_get_instance_with_metadata` interceptor. """ return response + def post_get_instance_with_metadata( + self, + response: platform.Instance, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.Instance, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_instance + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_get_instance_with_metadata` + interceptor in new development instead of the `post_get_instance` interceptor. + When both interceptors are used, this `post_get_instance_with_metadata` interceptor runs after the + `post_get_instance` interceptor. The (possibly modified) response returned by + `post_get_instance` will be passed to + `post_get_instance_with_metadata`. + """ + return response, metadata + def pre_get_processor( self, request: platform.GetProcessorRequest, @@ -615,12 +914,35 @@ def pre_get_processor( def post_get_processor(self, response: platform.Processor) -> platform.Processor: """Post-rpc interceptor for get_processor - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_processor_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_get_processor` interceptor runs + before the `post_get_processor_with_metadata` interceptor. """ return response + def post_get_processor_with_metadata( + self, + response: platform.Processor, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.Processor, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_processor + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_get_processor_with_metadata` + interceptor in new development instead of the `post_get_processor` interceptor. + When both interceptors are used, this `post_get_processor_with_metadata` interceptor runs after the + `post_get_processor` interceptor. The (possibly modified) response returned by + `post_get_processor` will be passed to + `post_get_processor_with_metadata`. + """ + return response, metadata + def pre_list_applications( self, request: platform.ListApplicationsRequest, @@ -640,12 +962,37 @@ def post_list_applications( ) -> platform.ListApplicationsResponse: """Post-rpc interceptor for list_applications - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_applications_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_applications` interceptor runs + before the `post_list_applications_with_metadata` interceptor. """ return response + def post_list_applications_with_metadata( + self, + response: platform.ListApplicationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + platform.ListApplicationsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_applications + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_applications_with_metadata` + interceptor in new development instead of the `post_list_applications` interceptor. + When both interceptors are used, this `post_list_applications_with_metadata` interceptor runs after the + `post_list_applications` interceptor. The (possibly modified) response returned by + `post_list_applications` will be passed to + `post_list_applications_with_metadata`. + """ + return response, metadata + def pre_list_drafts( self, request: platform.ListDraftsRequest, @@ -663,12 +1010,35 @@ def post_list_drafts( ) -> platform.ListDraftsResponse: """Post-rpc interceptor for list_drafts - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_drafts_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_drafts` interceptor runs + before the `post_list_drafts_with_metadata` interceptor. """ return response + def post_list_drafts_with_metadata( + self, + response: platform.ListDraftsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.ListDraftsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_drafts + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_drafts_with_metadata` + interceptor in new development instead of the `post_list_drafts` interceptor. + When both interceptors are used, this `post_list_drafts_with_metadata` interceptor runs after the + `post_list_drafts` interceptor. The (possibly modified) response returned by + `post_list_drafts` will be passed to + `post_list_drafts_with_metadata`. + """ + return response, metadata + def pre_list_instances( self, request: platform.ListInstancesRequest, @@ -686,12 +1056,35 @@ def post_list_instances( ) -> platform.ListInstancesResponse: """Post-rpc interceptor for list_instances - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_instances_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_instances` interceptor runs + before the `post_list_instances_with_metadata` interceptor. """ return response + def post_list_instances_with_metadata( + self, + response: platform.ListInstancesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.ListInstancesResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_instances + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_instances_with_metadata` + interceptor in new development instead of the `post_list_instances` interceptor. + When both interceptors are used, this `post_list_instances_with_metadata` interceptor runs after the + `post_list_instances` interceptor. The (possibly modified) response returned by + `post_list_instances` will be passed to + `post_list_instances_with_metadata`. + """ + return response, metadata + def pre_list_prebuilt_processors( self, request: platform.ListPrebuiltProcessorsRequest, @@ -711,12 +1104,37 @@ def post_list_prebuilt_processors( ) -> platform.ListPrebuiltProcessorsResponse: """Post-rpc interceptor for list_prebuilt_processors - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_prebuilt_processors_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_prebuilt_processors` interceptor runs + before the `post_list_prebuilt_processors_with_metadata` interceptor. """ return response + def post_list_prebuilt_processors_with_metadata( + self, + response: platform.ListPrebuiltProcessorsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + platform.ListPrebuiltProcessorsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_prebuilt_processors + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_prebuilt_processors_with_metadata` + interceptor in new development instead of the `post_list_prebuilt_processors` interceptor. + When both interceptors are used, this `post_list_prebuilt_processors_with_metadata` interceptor runs after the + `post_list_prebuilt_processors` interceptor. The (possibly modified) response returned by + `post_list_prebuilt_processors` will be passed to + `post_list_prebuilt_processors_with_metadata`. + """ + return response, metadata + def pre_list_processors( self, request: platform.ListProcessorsRequest, @@ -734,12 +1152,37 @@ def post_list_processors( ) -> platform.ListProcessorsResponse: """Post-rpc interceptor for list_processors - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_processors_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_processors` interceptor runs + before the `post_list_processors_with_metadata` interceptor. """ return response + def post_list_processors_with_metadata( + self, + response: platform.ListProcessorsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + platform.ListProcessorsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_processors + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_processors_with_metadata` + interceptor in new development instead of the `post_list_processors` interceptor. + When both interceptors are used, this `post_list_processors_with_metadata` interceptor runs after the + `post_list_processors` interceptor. The (possibly modified) response returned by + `post_list_processors` will be passed to + `post_list_processors_with_metadata`. + """ + return response, metadata + def pre_remove_application_stream_input( self, request: platform.RemoveApplicationStreamInputRequest, @@ -760,12 +1203,35 @@ def post_remove_application_stream_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for remove_application_stream_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_remove_application_stream_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_remove_application_stream_input` interceptor runs + before the `post_remove_application_stream_input_with_metadata` interceptor. """ return response + def post_remove_application_stream_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for remove_application_stream_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_remove_application_stream_input_with_metadata` + interceptor in new development instead of the `post_remove_application_stream_input` interceptor. + When both interceptors are used, this `post_remove_application_stream_input_with_metadata` interceptor runs after the + `post_remove_application_stream_input` interceptor. The (possibly modified) response returned by + `post_remove_application_stream_input` will be passed to + `post_remove_application_stream_input_with_metadata`. + """ + return response, metadata + def pre_undeploy_application( self, request: platform.UndeployApplicationRequest, @@ -785,12 +1251,35 @@ def post_undeploy_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for undeploy_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_undeploy_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_undeploy_application` interceptor runs + before the `post_undeploy_application_with_metadata` interceptor. """ return response + def post_undeploy_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for undeploy_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_undeploy_application_with_metadata` + interceptor in new development instead of the `post_undeploy_application` interceptor. + When both interceptors are used, this `post_undeploy_application_with_metadata` interceptor runs after the + `post_undeploy_application` interceptor. The (possibly modified) response returned by + `post_undeploy_application` will be passed to + `post_undeploy_application_with_metadata`. + """ + return response, metadata + def pre_update_application( self, request: platform.UpdateApplicationRequest, @@ -810,12 +1299,35 @@ def post_update_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_application` interceptor runs + before the `post_update_application_with_metadata` interceptor. """ return response + def post_update_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_application_with_metadata` + interceptor in new development instead of the `post_update_application` interceptor. + When both interceptors are used, this `post_update_application_with_metadata` interceptor runs after the + `post_update_application` interceptor. The (possibly modified) response returned by + `post_update_application` will be passed to + `post_update_application_with_metadata`. + """ + return response, metadata + def pre_update_application_instances( self, request: platform.UpdateApplicationInstancesRequest, @@ -836,12 +1348,35 @@ def post_update_application_instances( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_application_instances - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_application_instances_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_application_instances` interceptor runs + before the `post_update_application_instances_with_metadata` interceptor. """ return response + def post_update_application_instances_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_application_instances + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_application_instances_with_metadata` + interceptor in new development instead of the `post_update_application_instances` interceptor. + When both interceptors are used, this `post_update_application_instances_with_metadata` interceptor runs after the + `post_update_application_instances` interceptor. The (possibly modified) response returned by + `post_update_application_instances` will be passed to + `post_update_application_instances_with_metadata`. + """ + return response, metadata + def pre_update_application_stream_input( self, request: platform.UpdateApplicationStreamInputRequest, @@ -862,12 +1397,35 @@ def post_update_application_stream_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_application_stream_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_application_stream_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_application_stream_input` interceptor runs + before the `post_update_application_stream_input_with_metadata` interceptor. """ return response + def post_update_application_stream_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_application_stream_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_application_stream_input_with_metadata` + interceptor in new development instead of the `post_update_application_stream_input` interceptor. + When both interceptors are used, this `post_update_application_stream_input_with_metadata` interceptor runs after the + `post_update_application_stream_input` interceptor. The (possibly modified) response returned by + `post_update_application_stream_input` will be passed to + `post_update_application_stream_input_with_metadata`. + """ + return response, metadata + def pre_update_draft( self, request: platform.UpdateDraftRequest, @@ -885,12 +1443,35 @@ def post_update_draft( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_draft - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_draft_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_draft` interceptor runs + before the `post_update_draft_with_metadata` interceptor. """ return response + def post_update_draft_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_draft + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_draft_with_metadata` + interceptor in new development instead of the `post_update_draft` interceptor. + When both interceptors are used, this `post_update_draft_with_metadata` interceptor runs after the + `post_update_draft` interceptor. The (possibly modified) response returned by + `post_update_draft` will be passed to + `post_update_draft_with_metadata`. + """ + return response, metadata + def pre_update_processor( self, request: platform.UpdateProcessorRequest, @@ -910,12 +1491,35 @@ def post_update_processor( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_processor - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_processor_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_processor` interceptor runs + before the `post_update_processor_with_metadata` interceptor. """ return response + def post_update_processor_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_processor + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_processor_with_metadata` + interceptor in new development instead of the `post_update_processor` interceptor. + When both interceptors are used, this `post_update_processor_with_metadata` interceptor runs after the + `post_update_processor` interceptor. The (possibly modified) response returned by + `post_update_processor` will be passed to + `post_update_processor_with_metadata`. + """ + return response, metadata + def pre_cancel_operation( self, request: operations_pb2.CancelOperationRequest, @@ -1312,6 +1916,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_add_application_stream_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_add_application_stream_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1461,6 +2069,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1615,6 +2227,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_application_instances(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_application_instances_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1768,6 +2384,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_draft(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_draft_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1917,6 +2537,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_processor(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_processor_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2060,6 +2684,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2214,6 +2842,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_application_instances(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_application_instances_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2359,6 +2991,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_draft(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_draft_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2502,6 +3138,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_processor(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_processor_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2651,6 +3291,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_deploy_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_deploy_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2791,6 +3435,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2933,6 +3581,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_draft(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_draft_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3079,6 +3731,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_instance(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_instance_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3225,6 +3881,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_processor(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_processor_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3370,6 +4030,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_applications(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_applications_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3519,6 +4183,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_drafts(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_drafts_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3664,6 +4332,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_instances(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_instances_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3815,6 +4487,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_prebuilt_processors(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_prebuilt_processors_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3960,6 +4636,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_processors(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_processors_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4114,6 +4794,13 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_remove_application_stream_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_remove_application_stream_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4264,6 +4951,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_undeploy_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_undeploy_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4413,6 +5104,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4567,6 +5262,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_application_instances(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_application_instances_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4721,6 +5420,13 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_application_stream_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_update_application_stream_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4874,6 +5580,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_draft(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_draft_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5023,6 +5733,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_processor(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_processor_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/health_check_service/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/health_check_service/client.py index ca4030762e7c..1884fc99211f 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/health_check_service/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/health_check_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -490,6 +492,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -832,16 +861,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -887,16 +920,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/health_check_service/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/health_check_service/transports/rest.py index b40ac0368cb7..a138e81208b2 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/health_check_service/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/health_check_service/transports/rest.py @@ -105,12 +105,37 @@ def post_health_check( ) -> health_service.HealthCheckResponse: """Post-rpc interceptor for health_check - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_health_check_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the HealthCheckService server but before - it is returned to user code. + it is returned to user code. This `post_health_check` interceptor runs + before the `post_health_check_with_metadata` interceptor. """ return response + def post_health_check_with_metadata( + self, + response: health_service.HealthCheckResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + health_service.HealthCheckResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for health_check + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the HealthCheckService server but before it is returned to user code. + + We recommend only using this `post_health_check_with_metadata` + interceptor in new development instead of the `post_health_check` interceptor. + When both interceptors are used, this `post_health_check_with_metadata` interceptor runs after the + `post_health_check` interceptor. The (possibly modified) response returned by + `post_health_check` will be passed to + `post_health_check_with_metadata`. + """ + return response, metadata + def pre_cancel_operation( self, request: operations_pb2.CancelOperationRequest, @@ -416,6 +441,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_health_check(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_health_check_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/live_video_analytics/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/live_video_analytics/client.py index 45f7465972b7..593d128dc07a 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/live_video_analytics/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/live_video_analytics/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -567,6 +569,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -3054,16 +3083,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -3109,16 +3142,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/live_video_analytics/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/live_video_analytics/transports/rest.py index 03adc94ff4e8..e8559a0f913a 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/live_video_analytics/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/live_video_analytics/transports/rest.py @@ -241,12 +241,35 @@ def post_batch_run_process( ) -> operations_pb2.Operation: """Post-rpc interceptor for batch_run_process - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_run_process_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_batch_run_process` interceptor runs + before the `post_batch_run_process_with_metadata` interceptor. """ return response + def post_batch_run_process_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for batch_run_process + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_batch_run_process_with_metadata` + interceptor in new development instead of the `post_batch_run_process` interceptor. + When both interceptors are used, this `post_batch_run_process_with_metadata` interceptor runs after the + `post_batch_run_process` interceptor. The (possibly modified) response returned by + `post_batch_run_process` will be passed to + `post_batch_run_process_with_metadata`. + """ + return response, metadata + def pre_create_analysis( self, request: lva_service.CreateAnalysisRequest, @@ -266,12 +289,35 @@ def post_create_analysis( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_analysis - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_analysis_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_create_analysis` interceptor runs + before the `post_create_analysis_with_metadata` interceptor. """ return response + def post_create_analysis_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_analysis + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_create_analysis_with_metadata` + interceptor in new development instead of the `post_create_analysis` interceptor. + When both interceptors are used, this `post_create_analysis_with_metadata` interceptor runs after the + `post_create_analysis` interceptor. The (possibly modified) response returned by + `post_create_analysis` will be passed to + `post_create_analysis_with_metadata`. + """ + return response, metadata + def pre_create_operator( self, request: lva_service.CreateOperatorRequest, @@ -291,12 +337,35 @@ def post_create_operator( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_operator - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_operator_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_create_operator` interceptor runs + before the `post_create_operator_with_metadata` interceptor. """ return response + def post_create_operator_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_operator + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_create_operator_with_metadata` + interceptor in new development instead of the `post_create_operator` interceptor. + When both interceptors are used, this `post_create_operator_with_metadata` interceptor runs after the + `post_create_operator` interceptor. The (possibly modified) response returned by + `post_create_operator` will be passed to + `post_create_operator_with_metadata`. + """ + return response, metadata + def pre_create_process( self, request: lva_service.CreateProcessRequest, @@ -316,12 +385,35 @@ def post_create_process( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_process - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_process_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_create_process` interceptor runs + before the `post_create_process_with_metadata` interceptor. """ return response + def post_create_process_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_process + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_create_process_with_metadata` + interceptor in new development instead of the `post_create_process` interceptor. + When both interceptors are used, this `post_create_process_with_metadata` interceptor runs after the + `post_create_process` interceptor. The (possibly modified) response returned by + `post_create_process` will be passed to + `post_create_process_with_metadata`. + """ + return response, metadata + def pre_delete_analysis( self, request: lva_service.DeleteAnalysisRequest, @@ -341,12 +433,35 @@ def post_delete_analysis( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_analysis - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_analysis_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_delete_analysis` interceptor runs + before the `post_delete_analysis_with_metadata` interceptor. """ return response + def post_delete_analysis_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_analysis + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_delete_analysis_with_metadata` + interceptor in new development instead of the `post_delete_analysis` interceptor. + When both interceptors are used, this `post_delete_analysis_with_metadata` interceptor runs after the + `post_delete_analysis` interceptor. The (possibly modified) response returned by + `post_delete_analysis` will be passed to + `post_delete_analysis_with_metadata`. + """ + return response, metadata + def pre_delete_operator( self, request: lva_service.DeleteOperatorRequest, @@ -366,12 +481,35 @@ def post_delete_operator( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_operator - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_operator_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_delete_operator` interceptor runs + before the `post_delete_operator_with_metadata` interceptor. """ return response + def post_delete_operator_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_operator + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_delete_operator_with_metadata` + interceptor in new development instead of the `post_delete_operator` interceptor. + When both interceptors are used, this `post_delete_operator_with_metadata` interceptor runs after the + `post_delete_operator` interceptor. The (possibly modified) response returned by + `post_delete_operator` will be passed to + `post_delete_operator_with_metadata`. + """ + return response, metadata + def pre_delete_process( self, request: lva_service.DeleteProcessRequest, @@ -391,12 +529,35 @@ def post_delete_process( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_process - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_process_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_delete_process` interceptor runs + before the `post_delete_process_with_metadata` interceptor. """ return response + def post_delete_process_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_process + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_delete_process_with_metadata` + interceptor in new development instead of the `post_delete_process` interceptor. + When both interceptors are used, this `post_delete_process_with_metadata` interceptor runs after the + `post_delete_process` interceptor. The (possibly modified) response returned by + `post_delete_process` will be passed to + `post_delete_process_with_metadata`. + """ + return response, metadata + def pre_get_analysis( self, request: lva_service.GetAnalysisRequest, @@ -414,12 +575,35 @@ def post_get_analysis( ) -> lva_resources.Analysis: """Post-rpc interceptor for get_analysis - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_analysis_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_get_analysis` interceptor runs + before the `post_get_analysis_with_metadata` interceptor. """ return response + def post_get_analysis_with_metadata( + self, + response: lva_resources.Analysis, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[lva_resources.Analysis, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_analysis + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_get_analysis_with_metadata` + interceptor in new development instead of the `post_get_analysis` interceptor. + When both interceptors are used, this `post_get_analysis_with_metadata` interceptor runs after the + `post_get_analysis` interceptor. The (possibly modified) response returned by + `post_get_analysis` will be passed to + `post_get_analysis_with_metadata`. + """ + return response, metadata + def pre_get_operator( self, request: lva_service.GetOperatorRequest, @@ -437,12 +621,35 @@ def post_get_operator( ) -> lva_resources.Operator: """Post-rpc interceptor for get_operator - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_operator_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_get_operator` interceptor runs + before the `post_get_operator_with_metadata` interceptor. """ return response + def post_get_operator_with_metadata( + self, + response: lva_resources.Operator, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[lva_resources.Operator, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_operator + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_get_operator_with_metadata` + interceptor in new development instead of the `post_get_operator` interceptor. + When both interceptors are used, this `post_get_operator_with_metadata` interceptor runs after the + `post_get_operator` interceptor. The (possibly modified) response returned by + `post_get_operator` will be passed to + `post_get_operator_with_metadata`. + """ + return response, metadata + def pre_get_process( self, request: lva_service.GetProcessRequest, @@ -460,12 +667,35 @@ def post_get_process( ) -> lva_resources.Process: """Post-rpc interceptor for get_process - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_process_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_get_process` interceptor runs + before the `post_get_process_with_metadata` interceptor. """ return response + def post_get_process_with_metadata( + self, + response: lva_resources.Process, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[lva_resources.Process, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_process + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_get_process_with_metadata` + interceptor in new development instead of the `post_get_process` interceptor. + When both interceptors are used, this `post_get_process_with_metadata` interceptor runs after the + `post_get_process` interceptor. The (possibly modified) response returned by + `post_get_process` will be passed to + `post_get_process_with_metadata`. + """ + return response, metadata + def pre_list_analyses( self, request: lva_service.ListAnalysesRequest, @@ -485,12 +715,37 @@ def post_list_analyses( ) -> lva_service.ListAnalysesResponse: """Post-rpc interceptor for list_analyses - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_analyses_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_list_analyses` interceptor runs + before the `post_list_analyses_with_metadata` interceptor. """ return response + def post_list_analyses_with_metadata( + self, + response: lva_service.ListAnalysesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + lva_service.ListAnalysesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_analyses + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_list_analyses_with_metadata` + interceptor in new development instead of the `post_list_analyses` interceptor. + When both interceptors are used, this `post_list_analyses_with_metadata` interceptor runs after the + `post_list_analyses` interceptor. The (possibly modified) response returned by + `post_list_analyses` will be passed to + `post_list_analyses_with_metadata`. + """ + return response, metadata + def pre_list_operators( self, request: lva_service.ListOperatorsRequest, @@ -510,12 +765,37 @@ def post_list_operators( ) -> lva_service.ListOperatorsResponse: """Post-rpc interceptor for list_operators - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_operators_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_list_operators` interceptor runs + before the `post_list_operators_with_metadata` interceptor. """ return response + def post_list_operators_with_metadata( + self, + response: lva_service.ListOperatorsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + lva_service.ListOperatorsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_operators + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_list_operators_with_metadata` + interceptor in new development instead of the `post_list_operators` interceptor. + When both interceptors are used, this `post_list_operators_with_metadata` interceptor runs after the + `post_list_operators` interceptor. The (possibly modified) response returned by + `post_list_operators` will be passed to + `post_list_operators_with_metadata`. + """ + return response, metadata + def pre_list_processes( self, request: lva_service.ListProcessesRequest, @@ -535,12 +815,37 @@ def post_list_processes( ) -> lva_service.ListProcessesResponse: """Post-rpc interceptor for list_processes - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_processes_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_list_processes` interceptor runs + before the `post_list_processes_with_metadata` interceptor. """ return response + def post_list_processes_with_metadata( + self, + response: lva_service.ListProcessesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + lva_service.ListProcessesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_processes + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_list_processes_with_metadata` + interceptor in new development instead of the `post_list_processes` interceptor. + When both interceptors are used, this `post_list_processes_with_metadata` interceptor runs after the + `post_list_processes` interceptor. The (possibly modified) response returned by + `post_list_processes` will be passed to + `post_list_processes_with_metadata`. + """ + return response, metadata + def pre_list_public_operators( self, request: lva_service.ListPublicOperatorsRequest, @@ -560,12 +865,37 @@ def post_list_public_operators( ) -> lva_service.ListPublicOperatorsResponse: """Post-rpc interceptor for list_public_operators - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_public_operators_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_list_public_operators` interceptor runs + before the `post_list_public_operators_with_metadata` interceptor. """ return response + def post_list_public_operators_with_metadata( + self, + response: lva_service.ListPublicOperatorsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + lva_service.ListPublicOperatorsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_public_operators + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_list_public_operators_with_metadata` + interceptor in new development instead of the `post_list_public_operators` interceptor. + When both interceptors are used, this `post_list_public_operators_with_metadata` interceptor runs after the + `post_list_public_operators` interceptor. The (possibly modified) response returned by + `post_list_public_operators` will be passed to + `post_list_public_operators_with_metadata`. + """ + return response, metadata + def pre_resolve_operator_info( self, request: lva_service.ResolveOperatorInfoRequest, @@ -585,12 +915,37 @@ def post_resolve_operator_info( ) -> lva_service.ResolveOperatorInfoResponse: """Post-rpc interceptor for resolve_operator_info - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_resolve_operator_info_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_resolve_operator_info` interceptor runs + before the `post_resolve_operator_info_with_metadata` interceptor. """ return response + def post_resolve_operator_info_with_metadata( + self, + response: lva_service.ResolveOperatorInfoResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + lva_service.ResolveOperatorInfoResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for resolve_operator_info + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_resolve_operator_info_with_metadata` + interceptor in new development instead of the `post_resolve_operator_info` interceptor. + When both interceptors are used, this `post_resolve_operator_info_with_metadata` interceptor runs after the + `post_resolve_operator_info` interceptor. The (possibly modified) response returned by + `post_resolve_operator_info` will be passed to + `post_resolve_operator_info_with_metadata`. + """ + return response, metadata + def pre_update_analysis( self, request: lva_service.UpdateAnalysisRequest, @@ -610,12 +965,35 @@ def post_update_analysis( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_analysis - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_analysis_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_update_analysis` interceptor runs + before the `post_update_analysis_with_metadata` interceptor. """ return response + def post_update_analysis_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_analysis + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_update_analysis_with_metadata` + interceptor in new development instead of the `post_update_analysis` interceptor. + When both interceptors are used, this `post_update_analysis_with_metadata` interceptor runs after the + `post_update_analysis` interceptor. The (possibly modified) response returned by + `post_update_analysis` will be passed to + `post_update_analysis_with_metadata`. + """ + return response, metadata + def pre_update_operator( self, request: lva_service.UpdateOperatorRequest, @@ -635,12 +1013,35 @@ def post_update_operator( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_operator - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_operator_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_update_operator` interceptor runs + before the `post_update_operator_with_metadata` interceptor. """ return response + def post_update_operator_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_operator + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_update_operator_with_metadata` + interceptor in new development instead of the `post_update_operator` interceptor. + When both interceptors are used, this `post_update_operator_with_metadata` interceptor runs after the + `post_update_operator` interceptor. The (possibly modified) response returned by + `post_update_operator` will be passed to + `post_update_operator_with_metadata`. + """ + return response, metadata + def pre_update_process( self, request: lva_service.UpdateProcessRequest, @@ -660,12 +1061,35 @@ def post_update_process( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_process - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_process_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_update_process` interceptor runs + before the `post_update_process_with_metadata` interceptor. """ return response + def post_update_process_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_process + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_update_process_with_metadata` + interceptor in new development instead of the `post_update_process` interceptor. + When both interceptors are used, this `post_update_process_with_metadata` interceptor runs after the + `post_update_process` interceptor. The (possibly modified) response returned by + `post_update_process` will be passed to + `post_update_process_with_metadata`. + """ + return response, metadata + def pre_cancel_operation( self, request: operations_pb2.CancelOperationRequest, @@ -1061,6 +1485,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_run_process(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_run_process_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1209,6 +1637,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_analysis(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_analysis_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1357,6 +1789,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_operator(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_operator_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1505,6 +1941,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_process(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_process_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1647,6 +2087,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_analysis(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_analysis_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1789,6 +2233,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_operator(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_operator_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1931,6 +2379,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_process(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_process_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2074,6 +2526,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_analysis(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_analysis_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2217,6 +2673,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_operator(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_operator_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2359,6 +2819,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_process(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_process_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2503,6 +2967,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_analyses(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_analyses_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2649,6 +3117,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_operators(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_operators_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2795,6 +3267,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_processes(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_processes_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2945,6 +3421,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_public_operators(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_public_operators_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3101,6 +3581,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_resolve_operator_info(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_resolve_operator_info_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3251,6 +3735,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_analysis(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_analysis_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3399,6 +3887,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_operator(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_operator_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3547,6 +4039,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_process(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_process_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streaming_service/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streaming_service/client.py index ec2c0017dd81..e276fdeedfb5 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streaming_service/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streaming_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -493,6 +495,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -1233,16 +1262,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -1288,16 +1321,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streaming_service/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streaming_service/transports/rest.py index 72884e194c76..076a3eebab37 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streaming_service/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streaming_service/transports/rest.py @@ -121,12 +121,35 @@ def post_acquire_lease( ) -> streaming_service.Lease: """Post-rpc interceptor for acquire_lease - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_acquire_lease_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamingService server but before - it is returned to user code. + it is returned to user code. This `post_acquire_lease` interceptor runs + before the `post_acquire_lease_with_metadata` interceptor. """ return response + def post_acquire_lease_with_metadata( + self, + response: streaming_service.Lease, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streaming_service.Lease, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for acquire_lease + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamingService server but before it is returned to user code. + + We recommend only using this `post_acquire_lease_with_metadata` + interceptor in new development instead of the `post_acquire_lease` interceptor. + When both interceptors are used, this `post_acquire_lease_with_metadata` interceptor runs after the + `post_acquire_lease` interceptor. The (possibly modified) response returned by + `post_acquire_lease` will be passed to + `post_acquire_lease_with_metadata`. + """ + return response, metadata + def pre_release_lease( self, request: streaming_service.ReleaseLeaseRequest, @@ -146,12 +169,37 @@ def post_release_lease( ) -> streaming_service.ReleaseLeaseResponse: """Post-rpc interceptor for release_lease - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_release_lease_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamingService server but before - it is returned to user code. + it is returned to user code. This `post_release_lease` interceptor runs + before the `post_release_lease_with_metadata` interceptor. """ return response + def post_release_lease_with_metadata( + self, + response: streaming_service.ReleaseLeaseResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streaming_service.ReleaseLeaseResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for release_lease + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamingService server but before it is returned to user code. + + We recommend only using this `post_release_lease_with_metadata` + interceptor in new development instead of the `post_release_lease` interceptor. + When both interceptors are used, this `post_release_lease_with_metadata` interceptor runs after the + `post_release_lease` interceptor. The (possibly modified) response returned by + `post_release_lease` will be passed to + `post_release_lease_with_metadata`. + """ + return response, metadata + def pre_renew_lease( self, request: streaming_service.RenewLeaseRequest, @@ -171,12 +219,35 @@ def post_renew_lease( ) -> streaming_service.Lease: """Post-rpc interceptor for renew_lease - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_renew_lease_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamingService server but before - it is returned to user code. + it is returned to user code. This `post_renew_lease` interceptor runs + before the `post_renew_lease_with_metadata` interceptor. """ return response + def post_renew_lease_with_metadata( + self, + response: streaming_service.Lease, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streaming_service.Lease, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for renew_lease + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamingService server but before it is returned to user code. + + We recommend only using this `post_renew_lease_with_metadata` + interceptor in new development instead of the `post_renew_lease` interceptor. + When both interceptors are used, this `post_renew_lease_with_metadata` interceptor runs after the + `post_renew_lease` interceptor. The (possibly modified) response returned by + `post_renew_lease` will be passed to + `post_renew_lease_with_metadata`. + """ + return response, metadata + def pre_cancel_operation( self, request: operations_pb2.CancelOperationRequest, @@ -484,6 +555,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_acquire_lease(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_acquire_lease_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -666,6 +741,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_release_lease(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_release_lease_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -814,6 +893,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_renew_lease(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_renew_lease_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streams_service/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streams_service/client.py index 3c3c2e121e4e..05d5591bfe54 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streams_service/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streams_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -596,6 +598,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -3701,16 +3730,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -3756,16 +3789,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streams_service/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streams_service/transports/rest.py index f41c3b236278..9b7555377524 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streams_service/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/streams_service/transports/rest.py @@ -281,12 +281,35 @@ def post_create_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_create_cluster` interceptor runs + before the `post_create_cluster_with_metadata` interceptor. """ return response + def post_create_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_create_cluster_with_metadata` + interceptor in new development instead of the `post_create_cluster` interceptor. + When both interceptors are used, this `post_create_cluster_with_metadata` interceptor runs after the + `post_create_cluster` interceptor. The (possibly modified) response returned by + `post_create_cluster` will be passed to + `post_create_cluster_with_metadata`. + """ + return response, metadata + def pre_create_event( self, request: streams_service.CreateEventRequest, @@ -306,12 +329,35 @@ def post_create_event( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_create_event` interceptor runs + before the `post_create_event_with_metadata` interceptor. """ return response + def post_create_event_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_create_event_with_metadata` + interceptor in new development instead of the `post_create_event` interceptor. + When both interceptors are used, this `post_create_event_with_metadata` interceptor runs after the + `post_create_event` interceptor. The (possibly modified) response returned by + `post_create_event` will be passed to + `post_create_event_with_metadata`. + """ + return response, metadata + def pre_create_series( self, request: streams_service.CreateSeriesRequest, @@ -331,12 +377,35 @@ def post_create_series( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_create_series` interceptor runs + before the `post_create_series_with_metadata` interceptor. """ return response + def post_create_series_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_create_series_with_metadata` + interceptor in new development instead of the `post_create_series` interceptor. + When both interceptors are used, this `post_create_series_with_metadata` interceptor runs after the + `post_create_series` interceptor. The (possibly modified) response returned by + `post_create_series` will be passed to + `post_create_series_with_metadata`. + """ + return response, metadata + def pre_create_stream( self, request: streams_service.CreateStreamRequest, @@ -356,12 +425,35 @@ def post_create_stream( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_stream - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_stream_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_create_stream` interceptor runs + before the `post_create_stream_with_metadata` interceptor. """ return response + def post_create_stream_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_stream + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_create_stream_with_metadata` + interceptor in new development instead of the `post_create_stream` interceptor. + When both interceptors are used, this `post_create_stream_with_metadata` interceptor runs after the + `post_create_stream` interceptor. The (possibly modified) response returned by + `post_create_stream` will be passed to + `post_create_stream_with_metadata`. + """ + return response, metadata + def pre_delete_cluster( self, request: streams_service.DeleteClusterRequest, @@ -381,12 +473,35 @@ def post_delete_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_cluster` interceptor runs + before the `post_delete_cluster_with_metadata` interceptor. """ return response + def post_delete_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_delete_cluster_with_metadata` + interceptor in new development instead of the `post_delete_cluster` interceptor. + When both interceptors are used, this `post_delete_cluster_with_metadata` interceptor runs after the + `post_delete_cluster` interceptor. The (possibly modified) response returned by + `post_delete_cluster` will be passed to + `post_delete_cluster_with_metadata`. + """ + return response, metadata + def pre_delete_event( self, request: streams_service.DeleteEventRequest, @@ -406,12 +521,35 @@ def post_delete_event( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_event` interceptor runs + before the `post_delete_event_with_metadata` interceptor. """ return response + def post_delete_event_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_delete_event_with_metadata` + interceptor in new development instead of the `post_delete_event` interceptor. + When both interceptors are used, this `post_delete_event_with_metadata` interceptor runs after the + `post_delete_event` interceptor. The (possibly modified) response returned by + `post_delete_event` will be passed to + `post_delete_event_with_metadata`. + """ + return response, metadata + def pre_delete_series( self, request: streams_service.DeleteSeriesRequest, @@ -431,12 +569,35 @@ def post_delete_series( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_series` interceptor runs + before the `post_delete_series_with_metadata` interceptor. """ return response + def post_delete_series_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_delete_series_with_metadata` + interceptor in new development instead of the `post_delete_series` interceptor. + When both interceptors are used, this `post_delete_series_with_metadata` interceptor runs after the + `post_delete_series` interceptor. The (possibly modified) response returned by + `post_delete_series` will be passed to + `post_delete_series_with_metadata`. + """ + return response, metadata + def pre_delete_stream( self, request: streams_service.DeleteStreamRequest, @@ -456,12 +617,35 @@ def post_delete_stream( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_stream - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_stream_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_stream` interceptor runs + before the `post_delete_stream_with_metadata` interceptor. """ return response + def post_delete_stream_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_stream + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_delete_stream_with_metadata` + interceptor in new development instead of the `post_delete_stream` interceptor. + When both interceptors are used, this `post_delete_stream_with_metadata` interceptor runs after the + `post_delete_stream` interceptor. The (possibly modified) response returned by + `post_delete_stream` will be passed to + `post_delete_stream_with_metadata`. + """ + return response, metadata + def pre_generate_stream_hls_token( self, request: streams_service.GenerateStreamHlsTokenRequest, @@ -482,12 +666,38 @@ def post_generate_stream_hls_token( ) -> streams_service.GenerateStreamHlsTokenResponse: """Post-rpc interceptor for generate_stream_hls_token - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_generate_stream_hls_token_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_generate_stream_hls_token` interceptor runs + before the `post_generate_stream_hls_token_with_metadata` interceptor. """ return response + def post_generate_stream_hls_token_with_metadata( + self, + response: streams_service.GenerateStreamHlsTokenResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.GenerateStreamHlsTokenResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for generate_stream_hls_token + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_generate_stream_hls_token_with_metadata` + interceptor in new development instead of the `post_generate_stream_hls_token` interceptor. + When both interceptors are used, this `post_generate_stream_hls_token_with_metadata` interceptor runs after the + `post_generate_stream_hls_token` interceptor. The (possibly modified) response returned by + `post_generate_stream_hls_token` will be passed to + `post_generate_stream_hls_token_with_metadata`. + """ + return response, metadata + def pre_get_cluster( self, request: streams_service.GetClusterRequest, @@ -505,12 +715,35 @@ def pre_get_cluster( def post_get_cluster(self, response: common.Cluster) -> common.Cluster: """Post-rpc interceptor for get_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_cluster` interceptor runs + before the `post_get_cluster_with_metadata` interceptor. """ return response + def post_get_cluster_with_metadata( + self, + response: common.Cluster, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[common.Cluster, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_cluster_with_metadata` + interceptor in new development instead of the `post_get_cluster` interceptor. + When both interceptors are used, this `post_get_cluster_with_metadata` interceptor runs after the + `post_get_cluster` interceptor. The (possibly modified) response returned by + `post_get_cluster` will be passed to + `post_get_cluster_with_metadata`. + """ + return response, metadata + def pre_get_event( self, request: streams_service.GetEventRequest, @@ -530,12 +763,35 @@ def post_get_event( ) -> streams_resources.Event: """Post-rpc interceptor for get_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_event` interceptor runs + before the `post_get_event_with_metadata` interceptor. """ return response + def post_get_event_with_metadata( + self, + response: streams_resources.Event, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streams_resources.Event, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_event_with_metadata` + interceptor in new development instead of the `post_get_event` interceptor. + When both interceptors are used, this `post_get_event_with_metadata` interceptor runs after the + `post_get_event` interceptor. The (possibly modified) response returned by + `post_get_event` will be passed to + `post_get_event_with_metadata`. + """ + return response, metadata + def pre_get_series( self, request: streams_service.GetSeriesRequest, @@ -555,12 +811,35 @@ def post_get_series( ) -> streams_resources.Series: """Post-rpc interceptor for get_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_series` interceptor runs + before the `post_get_series_with_metadata` interceptor. """ return response + def post_get_series_with_metadata( + self, + response: streams_resources.Series, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streams_resources.Series, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_series_with_metadata` + interceptor in new development instead of the `post_get_series` interceptor. + When both interceptors are used, this `post_get_series_with_metadata` interceptor runs after the + `post_get_series` interceptor. The (possibly modified) response returned by + `post_get_series` will be passed to + `post_get_series_with_metadata`. + """ + return response, metadata + def pre_get_stream( self, request: streams_service.GetStreamRequest, @@ -580,12 +859,35 @@ def post_get_stream( ) -> streams_resources.Stream: """Post-rpc interceptor for get_stream - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_stream_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_stream` interceptor runs + before the `post_get_stream_with_metadata` interceptor. """ return response + def post_get_stream_with_metadata( + self, + response: streams_resources.Stream, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streams_resources.Stream, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_stream + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_stream_with_metadata` + interceptor in new development instead of the `post_get_stream` interceptor. + When both interceptors are used, this `post_get_stream_with_metadata` interceptor runs after the + `post_get_stream` interceptor. The (possibly modified) response returned by + `post_get_stream` will be passed to + `post_get_stream_with_metadata`. + """ + return response, metadata + def pre_get_stream_thumbnail( self, request: streams_service.GetStreamThumbnailRequest, @@ -606,12 +908,35 @@ def post_get_stream_thumbnail( ) -> operations_pb2.Operation: """Post-rpc interceptor for get_stream_thumbnail - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_stream_thumbnail_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_stream_thumbnail` interceptor runs + before the `post_get_stream_thumbnail_with_metadata` interceptor. """ return response + def post_get_stream_thumbnail_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_stream_thumbnail + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_stream_thumbnail_with_metadata` + interceptor in new development instead of the `post_get_stream_thumbnail` interceptor. + When both interceptors are used, this `post_get_stream_thumbnail_with_metadata` interceptor runs after the + `post_get_stream_thumbnail` interceptor. The (possibly modified) response returned by + `post_get_stream_thumbnail` will be passed to + `post_get_stream_thumbnail_with_metadata`. + """ + return response, metadata + def pre_list_clusters( self, request: streams_service.ListClustersRequest, @@ -631,12 +956,37 @@ def post_list_clusters( ) -> streams_service.ListClustersResponse: """Post-rpc interceptor for list_clusters - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_clusters_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_list_clusters` interceptor runs + before the `post_list_clusters_with_metadata` interceptor. """ return response + def post_list_clusters_with_metadata( + self, + response: streams_service.ListClustersResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.ListClustersResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_clusters + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_list_clusters_with_metadata` + interceptor in new development instead of the `post_list_clusters` interceptor. + When both interceptors are used, this `post_list_clusters_with_metadata` interceptor runs after the + `post_list_clusters` interceptor. The (possibly modified) response returned by + `post_list_clusters` will be passed to + `post_list_clusters_with_metadata`. + """ + return response, metadata + def pre_list_events( self, request: streams_service.ListEventsRequest, @@ -656,12 +1006,37 @@ def post_list_events( ) -> streams_service.ListEventsResponse: """Post-rpc interceptor for list_events - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_events_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_list_events` interceptor runs + before the `post_list_events_with_metadata` interceptor. """ return response + def post_list_events_with_metadata( + self, + response: streams_service.ListEventsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.ListEventsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_events + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_list_events_with_metadata` + interceptor in new development instead of the `post_list_events` interceptor. + When both interceptors are used, this `post_list_events_with_metadata` interceptor runs after the + `post_list_events` interceptor. The (possibly modified) response returned by + `post_list_events` will be passed to + `post_list_events_with_metadata`. + """ + return response, metadata + def pre_list_series( self, request: streams_service.ListSeriesRequest, @@ -681,12 +1056,37 @@ def post_list_series( ) -> streams_service.ListSeriesResponse: """Post-rpc interceptor for list_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_list_series` interceptor runs + before the `post_list_series_with_metadata` interceptor. """ return response + def post_list_series_with_metadata( + self, + response: streams_service.ListSeriesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.ListSeriesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_list_series_with_metadata` + interceptor in new development instead of the `post_list_series` interceptor. + When both interceptors are used, this `post_list_series_with_metadata` interceptor runs after the + `post_list_series` interceptor. The (possibly modified) response returned by + `post_list_series` will be passed to + `post_list_series_with_metadata`. + """ + return response, metadata + def pre_list_streams( self, request: streams_service.ListStreamsRequest, @@ -706,12 +1106,37 @@ def post_list_streams( ) -> streams_service.ListStreamsResponse: """Post-rpc interceptor for list_streams - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_streams_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_list_streams` interceptor runs + before the `post_list_streams_with_metadata` interceptor. """ return response + def post_list_streams_with_metadata( + self, + response: streams_service.ListStreamsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.ListStreamsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_streams + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_list_streams_with_metadata` + interceptor in new development instead of the `post_list_streams` interceptor. + When both interceptors are used, this `post_list_streams_with_metadata` interceptor runs after the + `post_list_streams` interceptor. The (possibly modified) response returned by + `post_list_streams` will be passed to + `post_list_streams_with_metadata`. + """ + return response, metadata + def pre_materialize_channel( self, request: streams_service.MaterializeChannelRequest, @@ -732,12 +1157,35 @@ def post_materialize_channel( ) -> operations_pb2.Operation: """Post-rpc interceptor for materialize_channel - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_materialize_channel_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_materialize_channel` interceptor runs + before the `post_materialize_channel_with_metadata` interceptor. """ return response + def post_materialize_channel_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for materialize_channel + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_materialize_channel_with_metadata` + interceptor in new development instead of the `post_materialize_channel` interceptor. + When both interceptors are used, this `post_materialize_channel_with_metadata` interceptor runs after the + `post_materialize_channel` interceptor. The (possibly modified) response returned by + `post_materialize_channel` will be passed to + `post_materialize_channel_with_metadata`. + """ + return response, metadata + def pre_update_cluster( self, request: streams_service.UpdateClusterRequest, @@ -757,12 +1205,35 @@ def post_update_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_update_cluster` interceptor runs + before the `post_update_cluster_with_metadata` interceptor. """ return response + def post_update_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_update_cluster_with_metadata` + interceptor in new development instead of the `post_update_cluster` interceptor. + When both interceptors are used, this `post_update_cluster_with_metadata` interceptor runs after the + `post_update_cluster` interceptor. The (possibly modified) response returned by + `post_update_cluster` will be passed to + `post_update_cluster_with_metadata`. + """ + return response, metadata + def pre_update_event( self, request: streams_service.UpdateEventRequest, @@ -782,12 +1253,35 @@ def post_update_event( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_update_event` interceptor runs + before the `post_update_event_with_metadata` interceptor. """ return response + def post_update_event_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_update_event_with_metadata` + interceptor in new development instead of the `post_update_event` interceptor. + When both interceptors are used, this `post_update_event_with_metadata` interceptor runs after the + `post_update_event` interceptor. The (possibly modified) response returned by + `post_update_event` will be passed to + `post_update_event_with_metadata`. + """ + return response, metadata + def pre_update_series( self, request: streams_service.UpdateSeriesRequest, @@ -807,12 +1301,35 @@ def post_update_series( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_update_series` interceptor runs + before the `post_update_series_with_metadata` interceptor. """ return response + def post_update_series_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_update_series_with_metadata` + interceptor in new development instead of the `post_update_series` interceptor. + When both interceptors are used, this `post_update_series_with_metadata` interceptor runs after the + `post_update_series` interceptor. The (possibly modified) response returned by + `post_update_series` will be passed to + `post_update_series_with_metadata`. + """ + return response, metadata + def pre_update_stream( self, request: streams_service.UpdateStreamRequest, @@ -832,12 +1349,35 @@ def post_update_stream( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_stream - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_stream_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_update_stream` interceptor runs + before the `post_update_stream_with_metadata` interceptor. """ return response + def post_update_stream_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_stream + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_update_stream_with_metadata` + interceptor in new development instead of the `post_update_stream` interceptor. + When both interceptors are used, this `post_update_stream_with_metadata` interceptor runs after the + `post_update_stream` interceptor. The (possibly modified) response returned by + `post_update_stream` will be passed to + `post_update_stream_with_metadata`. + """ + return response, metadata + def pre_cancel_operation( self, request: operations_pb2.CancelOperationRequest, @@ -1231,6 +1771,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1378,6 +1922,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1525,6 +2073,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1672,6 +2224,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_stream(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_stream_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1813,6 +2369,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1954,6 +2514,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2095,6 +2659,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2236,6 +2804,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_stream(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_stream_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2390,6 +2962,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_generate_stream_hls_token(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_generate_stream_hls_token_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2536,6 +3112,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2680,6 +3260,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2824,6 +3408,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2974,6 +3562,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_stream(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_stream_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3124,6 +3716,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_stream_thumbnail(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_stream_thumbnail_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3267,6 +3863,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_clusters(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_clusters_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3414,6 +4014,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_events(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_events_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3561,6 +4165,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3706,6 +4314,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_streams(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_streams_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3857,6 +4469,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_materialize_channel(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_materialize_channel_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4004,6 +4620,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4151,6 +4771,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4298,6 +4922,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4445,6 +5073,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_stream(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_stream_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/warehouse/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/warehouse/client.py index b16c5d797ff1..aba79a6fdb35 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/warehouse/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/warehouse/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -687,6 +689,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -8145,16 +8174,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -8200,16 +8233,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/warehouse/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/warehouse/transports/rest.py index 845f3c188a16..24fbdb41566c 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1/services/warehouse/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1/services/warehouse/transports/rest.py @@ -574,12 +574,37 @@ def post_add_collection_item( ) -> warehouse.AddCollectionItemResponse: """Post-rpc interceptor for add_collection_item - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_add_collection_item_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_add_collection_item` interceptor runs + before the `post_add_collection_item_with_metadata` interceptor. """ return response + def post_add_collection_item_with_metadata( + self, + response: warehouse.AddCollectionItemResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.AddCollectionItemResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for add_collection_item + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_add_collection_item_with_metadata` + interceptor in new development instead of the `post_add_collection_item` interceptor. + When both interceptors are used, this `post_add_collection_item_with_metadata` interceptor runs after the + `post_add_collection_item` interceptor. The (possibly modified) response returned by + `post_add_collection_item` will be passed to + `post_add_collection_item_with_metadata`. + """ + return response, metadata + def pre_analyze_asset( self, request: warehouse.AnalyzeAssetRequest, @@ -597,12 +622,35 @@ def post_analyze_asset( ) -> operations_pb2.Operation: """Post-rpc interceptor for analyze_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_analyze_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_analyze_asset` interceptor runs + before the `post_analyze_asset_with_metadata` interceptor. """ return response + def post_analyze_asset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for analyze_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_analyze_asset_with_metadata` + interceptor in new development instead of the `post_analyze_asset` interceptor. + When both interceptors are used, this `post_analyze_asset_with_metadata` interceptor runs after the + `post_analyze_asset` interceptor. The (possibly modified) response returned by + `post_analyze_asset` will be passed to + `post_analyze_asset_with_metadata`. + """ + return response, metadata + def pre_analyze_corpus( self, request: warehouse.AnalyzeCorpusRequest, @@ -620,12 +668,35 @@ def post_analyze_corpus( ) -> operations_pb2.Operation: """Post-rpc interceptor for analyze_corpus - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_analyze_corpus_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_analyze_corpus` interceptor runs + before the `post_analyze_corpus_with_metadata` interceptor. """ return response + def post_analyze_corpus_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for analyze_corpus + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_analyze_corpus_with_metadata` + interceptor in new development instead of the `post_analyze_corpus` interceptor. + When both interceptors are used, this `post_analyze_corpus_with_metadata` interceptor runs after the + `post_analyze_corpus` interceptor. The (possibly modified) response returned by + `post_analyze_corpus` will be passed to + `post_analyze_corpus_with_metadata`. + """ + return response, metadata + def pre_clip_asset( self, request: warehouse.ClipAssetRequest, @@ -643,12 +714,35 @@ def post_clip_asset( ) -> warehouse.ClipAssetResponse: """Post-rpc interceptor for clip_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_clip_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_clip_asset` interceptor runs + before the `post_clip_asset_with_metadata` interceptor. """ return response + def post_clip_asset_with_metadata( + self, + response: warehouse.ClipAssetResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.ClipAssetResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for clip_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_clip_asset_with_metadata` + interceptor in new development instead of the `post_clip_asset` interceptor. + When both interceptors are used, this `post_clip_asset_with_metadata` interceptor runs after the + `post_clip_asset` interceptor. The (possibly modified) response returned by + `post_clip_asset` will be passed to + `post_clip_asset_with_metadata`. + """ + return response, metadata + def pre_create_annotation( self, request: warehouse.CreateAnnotationRequest, @@ -668,12 +762,35 @@ def post_create_annotation( ) -> warehouse.Annotation: """Post-rpc interceptor for create_annotation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_annotation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_annotation` interceptor runs + before the `post_create_annotation_with_metadata` interceptor. """ return response + def post_create_annotation_with_metadata( + self, + response: warehouse.Annotation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Annotation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_annotation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_annotation_with_metadata` + interceptor in new development instead of the `post_create_annotation` interceptor. + When both interceptors are used, this `post_create_annotation_with_metadata` interceptor runs after the + `post_create_annotation` interceptor. The (possibly modified) response returned by + `post_create_annotation` will be passed to + `post_create_annotation_with_metadata`. + """ + return response, metadata + def pre_create_asset( self, request: warehouse.CreateAssetRequest, @@ -689,12 +806,35 @@ def pre_create_asset( def post_create_asset(self, response: warehouse.Asset) -> warehouse.Asset: """Post-rpc interceptor for create_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_asset` interceptor runs + before the `post_create_asset_with_metadata` interceptor. """ return response + def post_create_asset_with_metadata( + self, + response: warehouse.Asset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Asset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_asset_with_metadata` + interceptor in new development instead of the `post_create_asset` interceptor. + When both interceptors are used, this `post_create_asset_with_metadata` interceptor runs after the + `post_create_asset` interceptor. The (possibly modified) response returned by + `post_create_asset` will be passed to + `post_create_asset_with_metadata`. + """ + return response, metadata + def pre_create_collection( self, request: warehouse.CreateCollectionRequest, @@ -714,12 +854,35 @@ def post_create_collection( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_collection - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_collection_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_collection` interceptor runs + before the `post_create_collection_with_metadata` interceptor. """ return response + def post_create_collection_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_collection + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_collection_with_metadata` + interceptor in new development instead of the `post_create_collection` interceptor. + When both interceptors are used, this `post_create_collection_with_metadata` interceptor runs after the + `post_create_collection` interceptor. The (possibly modified) response returned by + `post_create_collection` will be passed to + `post_create_collection_with_metadata`. + """ + return response, metadata + def pre_create_corpus( self, request: warehouse.CreateCorpusRequest, @@ -737,12 +900,35 @@ def post_create_corpus( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_corpus - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_corpus_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_corpus` interceptor runs + before the `post_create_corpus_with_metadata` interceptor. """ return response + def post_create_corpus_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_corpus + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_corpus_with_metadata` + interceptor in new development instead of the `post_create_corpus` interceptor. + When both interceptors are used, this `post_create_corpus_with_metadata` interceptor runs after the + `post_create_corpus` interceptor. The (possibly modified) response returned by + `post_create_corpus` will be passed to + `post_create_corpus_with_metadata`. + """ + return response, metadata + def pre_create_data_schema( self, request: warehouse.CreateDataSchemaRequest, @@ -762,12 +948,35 @@ def post_create_data_schema( ) -> warehouse.DataSchema: """Post-rpc interceptor for create_data_schema - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_data_schema_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_data_schema` interceptor runs + before the `post_create_data_schema_with_metadata` interceptor. """ return response + def post_create_data_schema_with_metadata( + self, + response: warehouse.DataSchema, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.DataSchema, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_data_schema + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_data_schema_with_metadata` + interceptor in new development instead of the `post_create_data_schema` interceptor. + When both interceptors are used, this `post_create_data_schema_with_metadata` interceptor runs after the + `post_create_data_schema` interceptor. The (possibly modified) response returned by + `post_create_data_schema` will be passed to + `post_create_data_schema_with_metadata`. + """ + return response, metadata + def pre_create_index( self, request: warehouse.CreateIndexRequest, @@ -785,12 +994,35 @@ def post_create_index( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_index - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_index_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_index` interceptor runs + before the `post_create_index_with_metadata` interceptor. """ return response + def post_create_index_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_index + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_index_with_metadata` + interceptor in new development instead of the `post_create_index` interceptor. + When both interceptors are used, this `post_create_index_with_metadata` interceptor runs after the + `post_create_index` interceptor. The (possibly modified) response returned by + `post_create_index` will be passed to + `post_create_index_with_metadata`. + """ + return response, metadata + def pre_create_index_endpoint( self, request: warehouse.CreateIndexEndpointRequest, @@ -810,12 +1042,35 @@ def post_create_index_endpoint( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_index_endpoint - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_index_endpoint_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_index_endpoint` interceptor runs + before the `post_create_index_endpoint_with_metadata` interceptor. """ return response + def post_create_index_endpoint_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_index_endpoint + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_index_endpoint_with_metadata` + interceptor in new development instead of the `post_create_index_endpoint` interceptor. + When both interceptors are used, this `post_create_index_endpoint_with_metadata` interceptor runs after the + `post_create_index_endpoint` interceptor. The (possibly modified) response returned by + `post_create_index_endpoint` will be passed to + `post_create_index_endpoint_with_metadata`. + """ + return response, metadata + def pre_create_search_config( self, request: warehouse.CreateSearchConfigRequest, @@ -835,12 +1090,35 @@ def post_create_search_config( ) -> warehouse.SearchConfig: """Post-rpc interceptor for create_search_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_search_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_search_config` interceptor runs + before the `post_create_search_config_with_metadata` interceptor. """ return response + def post_create_search_config_with_metadata( + self, + response: warehouse.SearchConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_search_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_search_config_with_metadata` + interceptor in new development instead of the `post_create_search_config` interceptor. + When both interceptors are used, this `post_create_search_config_with_metadata` interceptor runs after the + `post_create_search_config` interceptor. The (possibly modified) response returned by + `post_create_search_config` will be passed to + `post_create_search_config_with_metadata`. + """ + return response, metadata + def pre_create_search_hypernym( self, request: warehouse.CreateSearchHypernymRequest, @@ -860,12 +1138,35 @@ def post_create_search_hypernym( ) -> warehouse.SearchHypernym: """Post-rpc interceptor for create_search_hypernym - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_search_hypernym_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_search_hypernym` interceptor runs + before the `post_create_search_hypernym_with_metadata` interceptor. """ return response + def post_create_search_hypernym_with_metadata( + self, + response: warehouse.SearchHypernym, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchHypernym, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_search_hypernym + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_search_hypernym_with_metadata` + interceptor in new development instead of the `post_create_search_hypernym` interceptor. + When both interceptors are used, this `post_create_search_hypernym_with_metadata` interceptor runs after the + `post_create_search_hypernym` interceptor. The (possibly modified) response returned by + `post_create_search_hypernym` will be passed to + `post_create_search_hypernym_with_metadata`. + """ + return response, metadata + def pre_delete_annotation( self, request: warehouse.DeleteAnnotationRequest, @@ -897,12 +1198,35 @@ def post_delete_asset( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_delete_asset` interceptor runs + before the `post_delete_asset_with_metadata` interceptor. """ return response + def post_delete_asset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_delete_asset_with_metadata` + interceptor in new development instead of the `post_delete_asset` interceptor. + When both interceptors are used, this `post_delete_asset_with_metadata` interceptor runs after the + `post_delete_asset` interceptor. The (possibly modified) response returned by + `post_delete_asset` will be passed to + `post_delete_asset_with_metadata`. + """ + return response, metadata + def pre_delete_collection( self, request: warehouse.DeleteCollectionRequest, @@ -922,12 +1246,35 @@ def post_delete_collection( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_collection - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_collection_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_delete_collection` interceptor runs + before the `post_delete_collection_with_metadata` interceptor. """ return response + def post_delete_collection_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_collection + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_delete_collection_with_metadata` + interceptor in new development instead of the `post_delete_collection` interceptor. + When both interceptors are used, this `post_delete_collection_with_metadata` interceptor runs after the + `post_delete_collection` interceptor. The (possibly modified) response returned by + `post_delete_collection` will be passed to + `post_delete_collection_with_metadata`. + """ + return response, metadata + def pre_delete_corpus( self, request: warehouse.DeleteCorpusRequest, @@ -971,12 +1318,35 @@ def post_delete_index( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_index - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_index_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_delete_index` interceptor runs + before the `post_delete_index_with_metadata` interceptor. """ return response + def post_delete_index_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_index + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_delete_index_with_metadata` + interceptor in new development instead of the `post_delete_index` interceptor. + When both interceptors are used, this `post_delete_index_with_metadata` interceptor runs after the + `post_delete_index` interceptor. The (possibly modified) response returned by + `post_delete_index` will be passed to + `post_delete_index_with_metadata`. + """ + return response, metadata + def pre_delete_index_endpoint( self, request: warehouse.DeleteIndexEndpointRequest, @@ -996,12 +1366,35 @@ def post_delete_index_endpoint( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_index_endpoint - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_index_endpoint_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_delete_index_endpoint` interceptor runs + before the `post_delete_index_endpoint_with_metadata` interceptor. """ return response + def post_delete_index_endpoint_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_index_endpoint + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_delete_index_endpoint_with_metadata` + interceptor in new development instead of the `post_delete_index_endpoint` interceptor. + When both interceptors are used, this `post_delete_index_endpoint_with_metadata` interceptor runs after the + `post_delete_index_endpoint` interceptor. The (possibly modified) response returned by + `post_delete_index_endpoint` will be passed to + `post_delete_index_endpoint_with_metadata`. + """ + return response, metadata + def pre_delete_search_config( self, request: warehouse.DeleteSearchConfigRequest, @@ -1047,12 +1440,35 @@ def post_deploy_index( ) -> operations_pb2.Operation: """Post-rpc interceptor for deploy_index - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_deploy_index_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_deploy_index` interceptor runs + before the `post_deploy_index_with_metadata` interceptor. """ return response + def post_deploy_index_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for deploy_index + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_deploy_index_with_metadata` + interceptor in new development instead of the `post_deploy_index` interceptor. + When both interceptors are used, this `post_deploy_index_with_metadata` interceptor runs after the + `post_deploy_index` interceptor. The (possibly modified) response returned by + `post_deploy_index` will be passed to + `post_deploy_index_with_metadata`. + """ + return response, metadata + def pre_generate_hls_uri( self, request: warehouse.GenerateHlsUriRequest, @@ -1072,12 +1488,37 @@ def post_generate_hls_uri( ) -> warehouse.GenerateHlsUriResponse: """Post-rpc interceptor for generate_hls_uri - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_generate_hls_uri_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_generate_hls_uri` interceptor runs + before the `post_generate_hls_uri_with_metadata` interceptor. """ return response + def post_generate_hls_uri_with_metadata( + self, + response: warehouse.GenerateHlsUriResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.GenerateHlsUriResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for generate_hls_uri + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_generate_hls_uri_with_metadata` + interceptor in new development instead of the `post_generate_hls_uri` interceptor. + When both interceptors are used, this `post_generate_hls_uri_with_metadata` interceptor runs after the + `post_generate_hls_uri` interceptor. The (possibly modified) response returned by + `post_generate_hls_uri` will be passed to + `post_generate_hls_uri_with_metadata`. + """ + return response, metadata + def pre_generate_retrieval_url( self, request: warehouse.GenerateRetrievalUrlRequest, @@ -1097,12 +1538,37 @@ def post_generate_retrieval_url( ) -> warehouse.GenerateRetrievalUrlResponse: """Post-rpc interceptor for generate_retrieval_url - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_generate_retrieval_url_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_generate_retrieval_url` interceptor runs + before the `post_generate_retrieval_url_with_metadata` interceptor. """ return response + def post_generate_retrieval_url_with_metadata( + self, + response: warehouse.GenerateRetrievalUrlResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.GenerateRetrievalUrlResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for generate_retrieval_url + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_generate_retrieval_url_with_metadata` + interceptor in new development instead of the `post_generate_retrieval_url` interceptor. + When both interceptors are used, this `post_generate_retrieval_url_with_metadata` interceptor runs after the + `post_generate_retrieval_url` interceptor. The (possibly modified) response returned by + `post_generate_retrieval_url` will be passed to + `post_generate_retrieval_url_with_metadata`. + """ + return response, metadata + def pre_get_annotation( self, request: warehouse.GetAnnotationRequest, @@ -1120,12 +1586,35 @@ def post_get_annotation( ) -> warehouse.Annotation: """Post-rpc interceptor for get_annotation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_annotation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_annotation` interceptor runs + before the `post_get_annotation_with_metadata` interceptor. """ return response + def post_get_annotation_with_metadata( + self, + response: warehouse.Annotation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Annotation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_annotation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_annotation_with_metadata` + interceptor in new development instead of the `post_get_annotation` interceptor. + When both interceptors are used, this `post_get_annotation_with_metadata` interceptor runs after the + `post_get_annotation` interceptor. The (possibly modified) response returned by + `post_get_annotation` will be passed to + `post_get_annotation_with_metadata`. + """ + return response, metadata + def pre_get_asset( self, request: warehouse.GetAssetRequest, @@ -1141,12 +1630,35 @@ def pre_get_asset( def post_get_asset(self, response: warehouse.Asset) -> warehouse.Asset: """Post-rpc interceptor for get_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_asset` interceptor runs + before the `post_get_asset_with_metadata` interceptor. """ return response + def post_get_asset_with_metadata( + self, + response: warehouse.Asset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Asset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_asset_with_metadata` + interceptor in new development instead of the `post_get_asset` interceptor. + When both interceptors are used, this `post_get_asset_with_metadata` interceptor runs after the + `post_get_asset` interceptor. The (possibly modified) response returned by + `post_get_asset` will be passed to + `post_get_asset_with_metadata`. + """ + return response, metadata + def pre_get_collection( self, request: warehouse.GetCollectionRequest, @@ -1164,12 +1676,35 @@ def post_get_collection( ) -> warehouse.Collection: """Post-rpc interceptor for get_collection - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_collection_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_collection` interceptor runs + before the `post_get_collection_with_metadata` interceptor. """ return response + def post_get_collection_with_metadata( + self, + response: warehouse.Collection, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Collection, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_collection + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_collection_with_metadata` + interceptor in new development instead of the `post_get_collection` interceptor. + When both interceptors are used, this `post_get_collection_with_metadata` interceptor runs after the + `post_get_collection` interceptor. The (possibly modified) response returned by + `post_get_collection` will be passed to + `post_get_collection_with_metadata`. + """ + return response, metadata + def pre_get_corpus( self, request: warehouse.GetCorpusRequest, @@ -1185,12 +1720,35 @@ def pre_get_corpus( def post_get_corpus(self, response: warehouse.Corpus) -> warehouse.Corpus: """Post-rpc interceptor for get_corpus - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_corpus_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_corpus` interceptor runs + before the `post_get_corpus_with_metadata` interceptor. """ return response + def post_get_corpus_with_metadata( + self, + response: warehouse.Corpus, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Corpus, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_corpus + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_corpus_with_metadata` + interceptor in new development instead of the `post_get_corpus` interceptor. + When both interceptors are used, this `post_get_corpus_with_metadata` interceptor runs after the + `post_get_corpus` interceptor. The (possibly modified) response returned by + `post_get_corpus` will be passed to + `post_get_corpus_with_metadata`. + """ + return response, metadata + def pre_get_data_schema( self, request: warehouse.GetDataSchemaRequest, @@ -1208,12 +1766,35 @@ def post_get_data_schema( ) -> warehouse.DataSchema: """Post-rpc interceptor for get_data_schema - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_data_schema_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_data_schema` interceptor runs + before the `post_get_data_schema_with_metadata` interceptor. """ return response + def post_get_data_schema_with_metadata( + self, + response: warehouse.DataSchema, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.DataSchema, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_data_schema + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_data_schema_with_metadata` + interceptor in new development instead of the `post_get_data_schema` interceptor. + When both interceptors are used, this `post_get_data_schema_with_metadata` interceptor runs after the + `post_get_data_schema` interceptor. The (possibly modified) response returned by + `post_get_data_schema` will be passed to + `post_get_data_schema_with_metadata`. + """ + return response, metadata + def pre_get_index( self, request: warehouse.GetIndexRequest, @@ -1229,12 +1810,35 @@ def pre_get_index( def post_get_index(self, response: warehouse.Index) -> warehouse.Index: """Post-rpc interceptor for get_index - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_index_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_index` interceptor runs + before the `post_get_index_with_metadata` interceptor. """ return response + def post_get_index_with_metadata( + self, + response: warehouse.Index, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Index, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_index + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_index_with_metadata` + interceptor in new development instead of the `post_get_index` interceptor. + When both interceptors are used, this `post_get_index_with_metadata` interceptor runs after the + `post_get_index` interceptor. The (possibly modified) response returned by + `post_get_index` will be passed to + `post_get_index_with_metadata`. + """ + return response, metadata + def pre_get_index_endpoint( self, request: warehouse.GetIndexEndpointRequest, @@ -1254,12 +1858,35 @@ def post_get_index_endpoint( ) -> warehouse.IndexEndpoint: """Post-rpc interceptor for get_index_endpoint - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_index_endpoint_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_index_endpoint` interceptor runs + before the `post_get_index_endpoint_with_metadata` interceptor. """ return response + def post_get_index_endpoint_with_metadata( + self, + response: warehouse.IndexEndpoint, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.IndexEndpoint, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_index_endpoint + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_index_endpoint_with_metadata` + interceptor in new development instead of the `post_get_index_endpoint` interceptor. + When both interceptors are used, this `post_get_index_endpoint_with_metadata` interceptor runs after the + `post_get_index_endpoint` interceptor. The (possibly modified) response returned by + `post_get_index_endpoint` will be passed to + `post_get_index_endpoint_with_metadata`. + """ + return response, metadata + def pre_get_search_config( self, request: warehouse.GetSearchConfigRequest, @@ -1279,12 +1906,35 @@ def post_get_search_config( ) -> warehouse.SearchConfig: """Post-rpc interceptor for get_search_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_search_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_search_config` interceptor runs + before the `post_get_search_config_with_metadata` interceptor. """ return response + def post_get_search_config_with_metadata( + self, + response: warehouse.SearchConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_search_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_search_config_with_metadata` + interceptor in new development instead of the `post_get_search_config` interceptor. + When both interceptors are used, this `post_get_search_config_with_metadata` interceptor runs after the + `post_get_search_config` interceptor. The (possibly modified) response returned by + `post_get_search_config` will be passed to + `post_get_search_config_with_metadata`. + """ + return response, metadata + def pre_get_search_hypernym( self, request: warehouse.GetSearchHypernymRequest, @@ -1304,12 +1954,35 @@ def post_get_search_hypernym( ) -> warehouse.SearchHypernym: """Post-rpc interceptor for get_search_hypernym - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_search_hypernym_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_search_hypernym` interceptor runs + before the `post_get_search_hypernym_with_metadata` interceptor. """ return response + def post_get_search_hypernym_with_metadata( + self, + response: warehouse.SearchHypernym, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchHypernym, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_search_hypernym + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_search_hypernym_with_metadata` + interceptor in new development instead of the `post_get_search_hypernym` interceptor. + When both interceptors are used, this `post_get_search_hypernym_with_metadata` interceptor runs after the + `post_get_search_hypernym` interceptor. The (possibly modified) response returned by + `post_get_search_hypernym` will be passed to + `post_get_search_hypernym_with_metadata`. + """ + return response, metadata + def pre_import_assets( self, request: warehouse.ImportAssetsRequest, @@ -1327,12 +2000,35 @@ def post_import_assets( ) -> operations_pb2.Operation: """Post-rpc interceptor for import_assets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_import_assets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_import_assets` interceptor runs + before the `post_import_assets_with_metadata` interceptor. """ return response + def post_import_assets_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for import_assets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_import_assets_with_metadata` + interceptor in new development instead of the `post_import_assets` interceptor. + When both interceptors are used, this `post_import_assets_with_metadata` interceptor runs after the + `post_import_assets` interceptor. The (possibly modified) response returned by + `post_import_assets` will be passed to + `post_import_assets_with_metadata`. + """ + return response, metadata + def pre_index_asset( self, request: warehouse.IndexAssetRequest, @@ -1350,12 +2046,35 @@ def post_index_asset( ) -> operations_pb2.Operation: """Post-rpc interceptor for index_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_index_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_index_asset` interceptor runs + before the `post_index_asset_with_metadata` interceptor. """ return response + def post_index_asset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for index_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_index_asset_with_metadata` + interceptor in new development instead of the `post_index_asset` interceptor. + When both interceptors are used, this `post_index_asset_with_metadata` interceptor runs after the + `post_index_asset` interceptor. The (possibly modified) response returned by + `post_index_asset` will be passed to + `post_index_asset_with_metadata`. + """ + return response, metadata + def pre_list_annotations( self, request: warehouse.ListAnnotationsRequest, @@ -1375,12 +2094,37 @@ def post_list_annotations( ) -> warehouse.ListAnnotationsResponse: """Post-rpc interceptor for list_annotations - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_annotations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_annotations` interceptor runs + before the `post_list_annotations_with_metadata` interceptor. """ return response + def post_list_annotations_with_metadata( + self, + response: warehouse.ListAnnotationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListAnnotationsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_annotations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_annotations_with_metadata` + interceptor in new development instead of the `post_list_annotations` interceptor. + When both interceptors are used, this `post_list_annotations_with_metadata` interceptor runs after the + `post_list_annotations` interceptor. The (possibly modified) response returned by + `post_list_annotations` will be passed to + `post_list_annotations_with_metadata`. + """ + return response, metadata + def pre_list_assets( self, request: warehouse.ListAssetsRequest, @@ -1398,12 +2142,35 @@ def post_list_assets( ) -> warehouse.ListAssetsResponse: """Post-rpc interceptor for list_assets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_assets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_assets` interceptor runs + before the `post_list_assets_with_metadata` interceptor. """ return response + def post_list_assets_with_metadata( + self, + response: warehouse.ListAssetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.ListAssetsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_assets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_assets_with_metadata` + interceptor in new development instead of the `post_list_assets` interceptor. + When both interceptors are used, this `post_list_assets_with_metadata` interceptor runs after the + `post_list_assets` interceptor. The (possibly modified) response returned by + `post_list_assets` will be passed to + `post_list_assets_with_metadata`. + """ + return response, metadata + def pre_list_collections( self, request: warehouse.ListCollectionsRequest, @@ -1423,12 +2190,37 @@ def post_list_collections( ) -> warehouse.ListCollectionsResponse: """Post-rpc interceptor for list_collections - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_collections_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_collections` interceptor runs + before the `post_list_collections_with_metadata` interceptor. """ return response + def post_list_collections_with_metadata( + self, + response: warehouse.ListCollectionsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListCollectionsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_collections + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_collections_with_metadata` + interceptor in new development instead of the `post_list_collections` interceptor. + When both interceptors are used, this `post_list_collections_with_metadata` interceptor runs after the + `post_list_collections` interceptor. The (possibly modified) response returned by + `post_list_collections` will be passed to + `post_list_collections_with_metadata`. + """ + return response, metadata + def pre_list_corpora( self, request: warehouse.ListCorporaRequest, @@ -1446,12 +2238,35 @@ def post_list_corpora( ) -> warehouse.ListCorporaResponse: """Post-rpc interceptor for list_corpora - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_corpora_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_corpora` interceptor runs + before the `post_list_corpora_with_metadata` interceptor. """ return response + def post_list_corpora_with_metadata( + self, + response: warehouse.ListCorporaResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.ListCorporaResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_corpora + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_corpora_with_metadata` + interceptor in new development instead of the `post_list_corpora` interceptor. + When both interceptors are used, this `post_list_corpora_with_metadata` interceptor runs after the + `post_list_corpora` interceptor. The (possibly modified) response returned by + `post_list_corpora` will be passed to + `post_list_corpora_with_metadata`. + """ + return response, metadata + def pre_list_data_schemas( self, request: warehouse.ListDataSchemasRequest, @@ -1471,12 +2286,37 @@ def post_list_data_schemas( ) -> warehouse.ListDataSchemasResponse: """Post-rpc interceptor for list_data_schemas - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_data_schemas_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_data_schemas` interceptor runs + before the `post_list_data_schemas_with_metadata` interceptor. """ return response + def post_list_data_schemas_with_metadata( + self, + response: warehouse.ListDataSchemasResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListDataSchemasResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_data_schemas + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_data_schemas_with_metadata` + interceptor in new development instead of the `post_list_data_schemas` interceptor. + When both interceptors are used, this `post_list_data_schemas_with_metadata` interceptor runs after the + `post_list_data_schemas` interceptor. The (possibly modified) response returned by + `post_list_data_schemas` will be passed to + `post_list_data_schemas_with_metadata`. + """ + return response, metadata + def pre_list_index_endpoints( self, request: warehouse.ListIndexEndpointsRequest, @@ -1496,12 +2336,37 @@ def post_list_index_endpoints( ) -> warehouse.ListIndexEndpointsResponse: """Post-rpc interceptor for list_index_endpoints - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_index_endpoints_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_index_endpoints` interceptor runs + before the `post_list_index_endpoints_with_metadata` interceptor. """ return response + def post_list_index_endpoints_with_metadata( + self, + response: warehouse.ListIndexEndpointsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListIndexEndpointsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_index_endpoints + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_index_endpoints_with_metadata` + interceptor in new development instead of the `post_list_index_endpoints` interceptor. + When both interceptors are used, this `post_list_index_endpoints_with_metadata` interceptor runs after the + `post_list_index_endpoints` interceptor. The (possibly modified) response returned by + `post_list_index_endpoints` will be passed to + `post_list_index_endpoints_with_metadata`. + """ + return response, metadata + def pre_list_indexes( self, request: warehouse.ListIndexesRequest, @@ -1519,12 +2384,35 @@ def post_list_indexes( ) -> warehouse.ListIndexesResponse: """Post-rpc interceptor for list_indexes - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_indexes_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_indexes` interceptor runs + before the `post_list_indexes_with_metadata` interceptor. """ return response + def post_list_indexes_with_metadata( + self, + response: warehouse.ListIndexesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.ListIndexesResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_indexes + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_indexes_with_metadata` + interceptor in new development instead of the `post_list_indexes` interceptor. + When both interceptors are used, this `post_list_indexes_with_metadata` interceptor runs after the + `post_list_indexes` interceptor. The (possibly modified) response returned by + `post_list_indexes` will be passed to + `post_list_indexes_with_metadata`. + """ + return response, metadata + def pre_list_search_configs( self, request: warehouse.ListSearchConfigsRequest, @@ -1544,11 +2432,36 @@ def post_list_search_configs( ) -> warehouse.ListSearchConfigsResponse: """Post-rpc interceptor for list_search_configs - Override in a subclass to manipulate the response - after it is returned by the Warehouse server but before - it is returned to user code. + DEPRECATED. Please use the `post_list_search_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response + after it is returned by the Warehouse server but before + it is returned to user code. This `post_list_search_configs` interceptor runs + before the `post_list_search_configs_with_metadata` interceptor. + """ + return response + + def post_list_search_configs_with_metadata( + self, + response: warehouse.ListSearchConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListSearchConfigsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_search_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_search_configs_with_metadata` + interceptor in new development instead of the `post_list_search_configs` interceptor. + When both interceptors are used, this `post_list_search_configs_with_metadata` interceptor runs after the + `post_list_search_configs` interceptor. The (possibly modified) response returned by + `post_list_search_configs` will be passed to + `post_list_search_configs_with_metadata`. """ - return response + return response, metadata def pre_list_search_hypernyms( self, @@ -1569,12 +2482,37 @@ def post_list_search_hypernyms( ) -> warehouse.ListSearchHypernymsResponse: """Post-rpc interceptor for list_search_hypernyms - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_search_hypernyms_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_search_hypernyms` interceptor runs + before the `post_list_search_hypernyms_with_metadata` interceptor. """ return response + def post_list_search_hypernyms_with_metadata( + self, + response: warehouse.ListSearchHypernymsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListSearchHypernymsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_search_hypernyms + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_search_hypernyms_with_metadata` + interceptor in new development instead of the `post_list_search_hypernyms` interceptor. + When both interceptors are used, this `post_list_search_hypernyms_with_metadata` interceptor runs after the + `post_list_search_hypernyms` interceptor. The (possibly modified) response returned by + `post_list_search_hypernyms` will be passed to + `post_list_search_hypernyms_with_metadata`. + """ + return response, metadata + def pre_remove_collection_item( self, request: warehouse.RemoveCollectionItemRequest, @@ -1594,12 +2532,37 @@ def post_remove_collection_item( ) -> warehouse.RemoveCollectionItemResponse: """Post-rpc interceptor for remove_collection_item - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_remove_collection_item_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_remove_collection_item` interceptor runs + before the `post_remove_collection_item_with_metadata` interceptor. """ return response + def post_remove_collection_item_with_metadata( + self, + response: warehouse.RemoveCollectionItemResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.RemoveCollectionItemResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for remove_collection_item + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_remove_collection_item_with_metadata` + interceptor in new development instead of the `post_remove_collection_item` interceptor. + When both interceptors are used, this `post_remove_collection_item_with_metadata` interceptor runs after the + `post_remove_collection_item` interceptor. The (possibly modified) response returned by + `post_remove_collection_item` will be passed to + `post_remove_collection_item_with_metadata`. + """ + return response, metadata + def pre_remove_index_asset( self, request: warehouse.RemoveIndexAssetRequest, @@ -1619,12 +2582,35 @@ def post_remove_index_asset( ) -> operations_pb2.Operation: """Post-rpc interceptor for remove_index_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_remove_index_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_remove_index_asset` interceptor runs + before the `post_remove_index_asset_with_metadata` interceptor. """ return response + def post_remove_index_asset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for remove_index_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_remove_index_asset_with_metadata` + interceptor in new development instead of the `post_remove_index_asset` interceptor. + When both interceptors are used, this `post_remove_index_asset_with_metadata` interceptor runs after the + `post_remove_index_asset` interceptor. The (possibly modified) response returned by + `post_remove_index_asset` will be passed to + `post_remove_index_asset_with_metadata`. + """ + return response, metadata + def pre_search_assets( self, request: warehouse.SearchAssetsRequest, @@ -1642,12 +2628,35 @@ def post_search_assets( ) -> warehouse.SearchAssetsResponse: """Post-rpc interceptor for search_assets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_search_assets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_search_assets` interceptor runs + before the `post_search_assets_with_metadata` interceptor. """ return response + def post_search_assets_with_metadata( + self, + response: warehouse.SearchAssetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchAssetsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for search_assets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_search_assets_with_metadata` + interceptor in new development instead of the `post_search_assets` interceptor. + When both interceptors are used, this `post_search_assets_with_metadata` interceptor runs after the + `post_search_assets` interceptor. The (possibly modified) response returned by + `post_search_assets` will be passed to + `post_search_assets_with_metadata`. + """ + return response, metadata + def pre_search_index_endpoint( self, request: warehouse.SearchIndexEndpointRequest, @@ -1667,12 +2676,37 @@ def post_search_index_endpoint( ) -> warehouse.SearchIndexEndpointResponse: """Post-rpc interceptor for search_index_endpoint - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_search_index_endpoint_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_search_index_endpoint` interceptor runs + before the `post_search_index_endpoint_with_metadata` interceptor. """ return response + def post_search_index_endpoint_with_metadata( + self, + response: warehouse.SearchIndexEndpointResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.SearchIndexEndpointResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for search_index_endpoint + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_search_index_endpoint_with_metadata` + interceptor in new development instead of the `post_search_index_endpoint` interceptor. + When both interceptors are used, this `post_search_index_endpoint_with_metadata` interceptor runs after the + `post_search_index_endpoint` interceptor. The (possibly modified) response returned by + `post_search_index_endpoint` will be passed to + `post_search_index_endpoint_with_metadata`. + """ + return response, metadata + def pre_undeploy_index( self, request: warehouse.UndeployIndexRequest, @@ -1690,12 +2724,35 @@ def post_undeploy_index( ) -> operations_pb2.Operation: """Post-rpc interceptor for undeploy_index - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_undeploy_index_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_undeploy_index` interceptor runs + before the `post_undeploy_index_with_metadata` interceptor. """ return response + def post_undeploy_index_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for undeploy_index + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_undeploy_index_with_metadata` + interceptor in new development instead of the `post_undeploy_index` interceptor. + When both interceptors are used, this `post_undeploy_index_with_metadata` interceptor runs after the + `post_undeploy_index` interceptor. The (possibly modified) response returned by + `post_undeploy_index` will be passed to + `post_undeploy_index_with_metadata`. + """ + return response, metadata + def pre_update_annotation( self, request: warehouse.UpdateAnnotationRequest, @@ -1715,12 +2772,35 @@ def post_update_annotation( ) -> warehouse.Annotation: """Post-rpc interceptor for update_annotation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_annotation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_annotation` interceptor runs + before the `post_update_annotation_with_metadata` interceptor. """ return response + def post_update_annotation_with_metadata( + self, + response: warehouse.Annotation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Annotation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_annotation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_annotation_with_metadata` + interceptor in new development instead of the `post_update_annotation` interceptor. + When both interceptors are used, this `post_update_annotation_with_metadata` interceptor runs after the + `post_update_annotation` interceptor. The (possibly modified) response returned by + `post_update_annotation` will be passed to + `post_update_annotation_with_metadata`. + """ + return response, metadata + def pre_update_asset( self, request: warehouse.UpdateAssetRequest, @@ -1736,12 +2816,35 @@ def pre_update_asset( def post_update_asset(self, response: warehouse.Asset) -> warehouse.Asset: """Post-rpc interceptor for update_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_asset` interceptor runs + before the `post_update_asset_with_metadata` interceptor. """ return response + def post_update_asset_with_metadata( + self, + response: warehouse.Asset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Asset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_asset_with_metadata` + interceptor in new development instead of the `post_update_asset` interceptor. + When both interceptors are used, this `post_update_asset_with_metadata` interceptor runs after the + `post_update_asset` interceptor. The (possibly modified) response returned by + `post_update_asset` will be passed to + `post_update_asset_with_metadata`. + """ + return response, metadata + def pre_update_collection( self, request: warehouse.UpdateCollectionRequest, @@ -1761,12 +2864,35 @@ def post_update_collection( ) -> warehouse.Collection: """Post-rpc interceptor for update_collection - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_collection_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_collection` interceptor runs + before the `post_update_collection_with_metadata` interceptor. """ return response + def post_update_collection_with_metadata( + self, + response: warehouse.Collection, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Collection, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_collection + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_collection_with_metadata` + interceptor in new development instead of the `post_update_collection` interceptor. + When both interceptors are used, this `post_update_collection_with_metadata` interceptor runs after the + `post_update_collection` interceptor. The (possibly modified) response returned by + `post_update_collection` will be passed to + `post_update_collection_with_metadata`. + """ + return response, metadata + def pre_update_corpus( self, request: warehouse.UpdateCorpusRequest, @@ -1782,12 +2908,35 @@ def pre_update_corpus( def post_update_corpus(self, response: warehouse.Corpus) -> warehouse.Corpus: """Post-rpc interceptor for update_corpus - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_corpus_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_corpus` interceptor runs + before the `post_update_corpus_with_metadata` interceptor. """ return response + def post_update_corpus_with_metadata( + self, + response: warehouse.Corpus, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Corpus, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_corpus + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_corpus_with_metadata` + interceptor in new development instead of the `post_update_corpus` interceptor. + When both interceptors are used, this `post_update_corpus_with_metadata` interceptor runs after the + `post_update_corpus` interceptor. The (possibly modified) response returned by + `post_update_corpus` will be passed to + `post_update_corpus_with_metadata`. + """ + return response, metadata + def pre_update_data_schema( self, request: warehouse.UpdateDataSchemaRequest, @@ -1807,12 +2956,35 @@ def post_update_data_schema( ) -> warehouse.DataSchema: """Post-rpc interceptor for update_data_schema - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_data_schema_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_data_schema` interceptor runs + before the `post_update_data_schema_with_metadata` interceptor. """ return response + def post_update_data_schema_with_metadata( + self, + response: warehouse.DataSchema, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.DataSchema, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_data_schema + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_data_schema_with_metadata` + interceptor in new development instead of the `post_update_data_schema` interceptor. + When both interceptors are used, this `post_update_data_schema_with_metadata` interceptor runs after the + `post_update_data_schema` interceptor. The (possibly modified) response returned by + `post_update_data_schema` will be passed to + `post_update_data_schema_with_metadata`. + """ + return response, metadata + def pre_update_index( self, request: warehouse.UpdateIndexRequest, @@ -1830,12 +3002,35 @@ def post_update_index( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_index - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_index_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_index` interceptor runs + before the `post_update_index_with_metadata` interceptor. """ return response + def post_update_index_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_index + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_index_with_metadata` + interceptor in new development instead of the `post_update_index` interceptor. + When both interceptors are used, this `post_update_index_with_metadata` interceptor runs after the + `post_update_index` interceptor. The (possibly modified) response returned by + `post_update_index` will be passed to + `post_update_index_with_metadata`. + """ + return response, metadata + def pre_update_index_endpoint( self, request: warehouse.UpdateIndexEndpointRequest, @@ -1855,12 +3050,35 @@ def post_update_index_endpoint( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_index_endpoint - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_index_endpoint_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_index_endpoint` interceptor runs + before the `post_update_index_endpoint_with_metadata` interceptor. """ return response + def post_update_index_endpoint_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_index_endpoint + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_index_endpoint_with_metadata` + interceptor in new development instead of the `post_update_index_endpoint` interceptor. + When both interceptors are used, this `post_update_index_endpoint_with_metadata` interceptor runs after the + `post_update_index_endpoint` interceptor. The (possibly modified) response returned by + `post_update_index_endpoint` will be passed to + `post_update_index_endpoint_with_metadata`. + """ + return response, metadata + def pre_update_search_config( self, request: warehouse.UpdateSearchConfigRequest, @@ -1880,12 +3098,35 @@ def post_update_search_config( ) -> warehouse.SearchConfig: """Post-rpc interceptor for update_search_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_search_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_search_config` interceptor runs + before the `post_update_search_config_with_metadata` interceptor. """ return response + def post_update_search_config_with_metadata( + self, + response: warehouse.SearchConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_search_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_search_config_with_metadata` + interceptor in new development instead of the `post_update_search_config` interceptor. + When both interceptors are used, this `post_update_search_config_with_metadata` interceptor runs after the + `post_update_search_config` interceptor. The (possibly modified) response returned by + `post_update_search_config` will be passed to + `post_update_search_config_with_metadata`. + """ + return response, metadata + def pre_update_search_hypernym( self, request: warehouse.UpdateSearchHypernymRequest, @@ -1905,12 +3146,35 @@ def post_update_search_hypernym( ) -> warehouse.SearchHypernym: """Post-rpc interceptor for update_search_hypernym - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_search_hypernym_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_search_hypernym` interceptor runs + before the `post_update_search_hypernym_with_metadata` interceptor. """ return response + def post_update_search_hypernym_with_metadata( + self, + response: warehouse.SearchHypernym, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchHypernym, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_search_hypernym + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_search_hypernym_with_metadata` + interceptor in new development instead of the `post_update_search_hypernym` interceptor. + When both interceptors are used, this `post_update_search_hypernym_with_metadata` interceptor runs after the + `post_update_search_hypernym` interceptor. The (possibly modified) response returned by + `post_update_search_hypernym` will be passed to + `post_update_search_hypernym_with_metadata`. + """ + return response, metadata + def pre_upload_asset( self, request: warehouse.UploadAssetRequest, @@ -1928,12 +3192,35 @@ def post_upload_asset( ) -> operations_pb2.Operation: """Post-rpc interceptor for upload_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_upload_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_upload_asset` interceptor runs + before the `post_upload_asset_with_metadata` interceptor. """ return response + def post_upload_asset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for upload_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_upload_asset_with_metadata` + interceptor in new development instead of the `post_upload_asset` interceptor. + When both interceptors are used, this `post_upload_asset_with_metadata` interceptor runs after the + `post_upload_asset` interceptor. The (possibly modified) response returned by + `post_upload_asset` will be passed to + `post_upload_asset_with_metadata`. + """ + return response, metadata + def pre_view_collection_items( self, request: warehouse.ViewCollectionItemsRequest, @@ -1953,12 +3240,37 @@ def post_view_collection_items( ) -> warehouse.ViewCollectionItemsResponse: """Post-rpc interceptor for view_collection_items - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_view_collection_items_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_view_collection_items` interceptor runs + before the `post_view_collection_items_with_metadata` interceptor. """ return response + def post_view_collection_items_with_metadata( + self, + response: warehouse.ViewCollectionItemsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ViewCollectionItemsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for view_collection_items + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_view_collection_items_with_metadata` + interceptor in new development instead of the `post_view_collection_items` interceptor. + When both interceptors are used, this `post_view_collection_items_with_metadata` interceptor runs after the + `post_view_collection_items` interceptor. The (possibly modified) response returned by + `post_view_collection_items` will be passed to + `post_view_collection_items_with_metadata`. + """ + return response, metadata + def pre_view_indexed_assets( self, request: warehouse.ViewIndexedAssetsRequest, @@ -1978,12 +3290,37 @@ def post_view_indexed_assets( ) -> warehouse.ViewIndexedAssetsResponse: """Post-rpc interceptor for view_indexed_assets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_view_indexed_assets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_view_indexed_assets` interceptor runs + before the `post_view_indexed_assets_with_metadata` interceptor. """ return response + def post_view_indexed_assets_with_metadata( + self, + response: warehouse.ViewIndexedAssetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ViewIndexedAssetsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for view_indexed_assets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_view_indexed_assets_with_metadata` + interceptor in new development instead of the `post_view_indexed_assets` interceptor. + When both interceptors are used, this `post_view_indexed_assets_with_metadata` interceptor runs after the + `post_view_indexed_assets` interceptor. The (possibly modified) response returned by + `post_view_indexed_assets` will be passed to + `post_view_indexed_assets_with_metadata`. + """ + return response, metadata + def pre_cancel_operation( self, request: operations_pb2.CancelOperationRequest, @@ -2377,6 +3714,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_add_collection_item(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_add_collection_item_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2530,6 +3871,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_analyze_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_analyze_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2683,6 +4028,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_analyze_corpus(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_analyze_corpus_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2831,6 +4180,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_clip_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_clip_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2982,6 +4335,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_annotation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_annotation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3138,6 +4495,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3287,6 +4648,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_collection(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_collection_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3438,6 +4803,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_corpus(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_corpus_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3589,6 +4958,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_data_schema(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_data_schema_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3738,6 +5111,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_index(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_index_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3888,6 +5265,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_index_endpoint(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_index_endpoint_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4040,6 +5421,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_search_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_search_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4194,6 +5579,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_search_hypernym(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_search_hypernym_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4446,6 +5835,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4590,6 +5983,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_collection(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_collection_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4951,6 +6348,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_index(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_index_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5095,6 +6496,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_index_endpoint(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_index_endpoint_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5462,6 +6867,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_deploy_index(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_deploy_index_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5619,6 +7028,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_generate_hls_uri(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_generate_hls_uri_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5772,6 +7185,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_generate_retrieval_url(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_generate_retrieval_url_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5922,6 +7339,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_annotation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_annotation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6069,6 +7490,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6217,6 +7642,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_collection(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_collection_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6363,6 +7792,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_corpus(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_corpus_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6510,6 +7943,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_data_schema(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_data_schema_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6655,6 +8092,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_index(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_index_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6799,6 +8240,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_index_endpoint(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_index_endpoint_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6946,6 +8391,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_search_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_search_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7094,6 +8543,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_search_hypernym(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_search_hypernym_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7245,6 +8698,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_import_assets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_import_assets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7394,6 +8851,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_index_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_index_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7557,6 +9018,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_annotations(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_annotations_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7701,6 +9166,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_assets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_assets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7845,6 +9314,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_collections(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_collections_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7989,6 +9462,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_corpora(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_corpora_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8133,6 +9610,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_data_schemas(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_data_schemas_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8280,6 +9761,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_index_endpoints(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_index_endpoints_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8424,6 +9909,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_indexes(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_indexes_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8569,6 +10058,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_search_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_search_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8716,6 +10209,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_search_hypernyms(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_search_hypernyms_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8869,6 +10366,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_remove_collection_item(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_remove_collection_item_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9020,6 +10521,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_remove_index_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_remove_index_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9170,6 +10675,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_search_assets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_search_assets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9321,6 +10830,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_search_index_endpoint(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_search_index_endpoint_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9477,6 +10990,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_undeploy_index(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_undeploy_index_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9629,6 +11146,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_annotation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_annotation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9784,6 +11305,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9936,6 +11461,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_collection(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_collection_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10090,6 +11619,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_corpus(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_corpus_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10241,6 +11774,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_data_schema(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_data_schema_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10390,6 +11927,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_index(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_index_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10540,6 +12081,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_index_endpoint(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_index_endpoint_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10692,6 +12237,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_search_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_search_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10846,6 +12395,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_search_hypernym(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_search_hypernym_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10995,6 +12548,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_upload_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_upload_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11140,6 +12697,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_view_collection_items(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_view_collection_items_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11287,6 +12848,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_view_indexed_assets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_view_indexed_assets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/gapic_version.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/gapic_version.py index 51d2795b9d6b..558c8aab67c5 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/gapic_version.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.1.6" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/app_platform/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/app_platform/client.py index 382e32a19406..08631c3d61fb 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/app_platform/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/app_platform/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -588,6 +590,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -4048,16 +4077,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -4103,16 +4136,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -4335,16 +4372,20 @@ def set_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_iam_policy( self, @@ -4457,16 +4498,20 @@ def get_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def test_iam_permissions( self, @@ -4517,16 +4562,20 @@ def test_iam_permissions( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_location( self, @@ -4572,16 +4621,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -4627,16 +4680,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/app_platform/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/app_platform/transports/rest.py index cb7e4a563e90..c83d31d30122 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/app_platform/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/app_platform/transports/rest.py @@ -306,12 +306,35 @@ def post_add_application_stream_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for add_application_stream_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_add_application_stream_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_add_application_stream_input` interceptor runs + before the `post_add_application_stream_input_with_metadata` interceptor. """ return response + def post_add_application_stream_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for add_application_stream_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_add_application_stream_input_with_metadata` + interceptor in new development instead of the `post_add_application_stream_input` interceptor. + When both interceptors are used, this `post_add_application_stream_input_with_metadata` interceptor runs after the + `post_add_application_stream_input` interceptor. The (possibly modified) response returned by + `post_add_application_stream_input` will be passed to + `post_add_application_stream_input_with_metadata`. + """ + return response, metadata + def pre_create_application( self, request: platform.CreateApplicationRequest, @@ -331,12 +354,35 @@ def post_create_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_create_application` interceptor runs + before the `post_create_application_with_metadata` interceptor. """ return response + def post_create_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_create_application_with_metadata` + interceptor in new development instead of the `post_create_application` interceptor. + When both interceptors are used, this `post_create_application_with_metadata` interceptor runs after the + `post_create_application` interceptor. The (possibly modified) response returned by + `post_create_application` will be passed to + `post_create_application_with_metadata`. + """ + return response, metadata + def pre_create_application_instances( self, request: platform.CreateApplicationInstancesRequest, @@ -357,12 +403,35 @@ def post_create_application_instances( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_application_instances - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_application_instances_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_create_application_instances` interceptor runs + before the `post_create_application_instances_with_metadata` interceptor. """ return response + def post_create_application_instances_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_application_instances + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_create_application_instances_with_metadata` + interceptor in new development instead of the `post_create_application_instances` interceptor. + When both interceptors are used, this `post_create_application_instances_with_metadata` interceptor runs after the + `post_create_application_instances` interceptor. The (possibly modified) response returned by + `post_create_application_instances` will be passed to + `post_create_application_instances_with_metadata`. + """ + return response, metadata + def pre_create_draft( self, request: platform.CreateDraftRequest, @@ -380,12 +449,35 @@ def post_create_draft( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_draft - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_draft_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_create_draft` interceptor runs + before the `post_create_draft_with_metadata` interceptor. """ return response + def post_create_draft_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_draft + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_create_draft_with_metadata` + interceptor in new development instead of the `post_create_draft` interceptor. + When both interceptors are used, this `post_create_draft_with_metadata` interceptor runs after the + `post_create_draft` interceptor. The (possibly modified) response returned by + `post_create_draft` will be passed to + `post_create_draft_with_metadata`. + """ + return response, metadata + def pre_create_processor( self, request: platform.CreateProcessorRequest, @@ -405,12 +497,35 @@ def post_create_processor( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_processor - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_processor_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_create_processor` interceptor runs + before the `post_create_processor_with_metadata` interceptor. """ return response + def post_create_processor_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_processor + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_create_processor_with_metadata` + interceptor in new development instead of the `post_create_processor` interceptor. + When both interceptors are used, this `post_create_processor_with_metadata` interceptor runs after the + `post_create_processor` interceptor. The (possibly modified) response returned by + `post_create_processor` will be passed to + `post_create_processor_with_metadata`. + """ + return response, metadata + def pre_delete_application( self, request: platform.DeleteApplicationRequest, @@ -430,12 +545,35 @@ def post_delete_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_delete_application` interceptor runs + before the `post_delete_application_with_metadata` interceptor. """ return response + def post_delete_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_delete_application_with_metadata` + interceptor in new development instead of the `post_delete_application` interceptor. + When both interceptors are used, this `post_delete_application_with_metadata` interceptor runs after the + `post_delete_application` interceptor. The (possibly modified) response returned by + `post_delete_application` will be passed to + `post_delete_application_with_metadata`. + """ + return response, metadata + def pre_delete_application_instances( self, request: platform.DeleteApplicationInstancesRequest, @@ -456,12 +594,35 @@ def post_delete_application_instances( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_application_instances - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_application_instances_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_delete_application_instances` interceptor runs + before the `post_delete_application_instances_with_metadata` interceptor. """ return response + def post_delete_application_instances_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_application_instances + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_delete_application_instances_with_metadata` + interceptor in new development instead of the `post_delete_application_instances` interceptor. + When both interceptors are used, this `post_delete_application_instances_with_metadata` interceptor runs after the + `post_delete_application_instances` interceptor. The (possibly modified) response returned by + `post_delete_application_instances` will be passed to + `post_delete_application_instances_with_metadata`. + """ + return response, metadata + def pre_delete_draft( self, request: platform.DeleteDraftRequest, @@ -479,12 +640,35 @@ def post_delete_draft( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_draft - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_draft_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_delete_draft` interceptor runs + before the `post_delete_draft_with_metadata` interceptor. """ return response + def post_delete_draft_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_draft + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_delete_draft_with_metadata` + interceptor in new development instead of the `post_delete_draft` interceptor. + When both interceptors are used, this `post_delete_draft_with_metadata` interceptor runs after the + `post_delete_draft` interceptor. The (possibly modified) response returned by + `post_delete_draft` will be passed to + `post_delete_draft_with_metadata`. + """ + return response, metadata + def pre_delete_processor( self, request: platform.DeleteProcessorRequest, @@ -504,12 +688,35 @@ def post_delete_processor( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_processor - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_processor_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_delete_processor` interceptor runs + before the `post_delete_processor_with_metadata` interceptor. """ return response + def post_delete_processor_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_processor + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_delete_processor_with_metadata` + interceptor in new development instead of the `post_delete_processor` interceptor. + When both interceptors are used, this `post_delete_processor_with_metadata` interceptor runs after the + `post_delete_processor` interceptor. The (possibly modified) response returned by + `post_delete_processor` will be passed to + `post_delete_processor_with_metadata`. + """ + return response, metadata + def pre_deploy_application( self, request: platform.DeployApplicationRequest, @@ -529,12 +736,35 @@ def post_deploy_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for deploy_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_deploy_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_deploy_application` interceptor runs + before the `post_deploy_application_with_metadata` interceptor. """ return response + def post_deploy_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for deploy_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_deploy_application_with_metadata` + interceptor in new development instead of the `post_deploy_application` interceptor. + When both interceptors are used, this `post_deploy_application_with_metadata` interceptor runs after the + `post_deploy_application` interceptor. The (possibly modified) response returned by + `post_deploy_application` will be passed to + `post_deploy_application_with_metadata`. + """ + return response, metadata + def pre_get_application( self, request: platform.GetApplicationRequest, @@ -552,12 +782,35 @@ def post_get_application( ) -> platform.Application: """Post-rpc interceptor for get_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_get_application` interceptor runs + before the `post_get_application_with_metadata` interceptor. """ return response + def post_get_application_with_metadata( + self, + response: platform.Application, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.Application, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_get_application_with_metadata` + interceptor in new development instead of the `post_get_application` interceptor. + When both interceptors are used, this `post_get_application_with_metadata` interceptor runs after the + `post_get_application` interceptor. The (possibly modified) response returned by + `post_get_application` will be passed to + `post_get_application_with_metadata`. + """ + return response, metadata + def pre_get_draft( self, request: platform.GetDraftRequest, @@ -573,12 +826,35 @@ def pre_get_draft( def post_get_draft(self, response: platform.Draft) -> platform.Draft: """Post-rpc interceptor for get_draft - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_draft_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_get_draft` interceptor runs + before the `post_get_draft_with_metadata` interceptor. """ return response + def post_get_draft_with_metadata( + self, + response: platform.Draft, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.Draft, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_draft + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_get_draft_with_metadata` + interceptor in new development instead of the `post_get_draft` interceptor. + When both interceptors are used, this `post_get_draft_with_metadata` interceptor runs after the + `post_get_draft` interceptor. The (possibly modified) response returned by + `post_get_draft` will be passed to + `post_get_draft_with_metadata`. + """ + return response, metadata + def pre_get_instance( self, request: platform.GetInstanceRequest, @@ -594,12 +870,35 @@ def pre_get_instance( def post_get_instance(self, response: platform.Instance) -> platform.Instance: """Post-rpc interceptor for get_instance - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_instance_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_get_instance` interceptor runs + before the `post_get_instance_with_metadata` interceptor. """ return response + def post_get_instance_with_metadata( + self, + response: platform.Instance, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.Instance, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_instance + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_get_instance_with_metadata` + interceptor in new development instead of the `post_get_instance` interceptor. + When both interceptors are used, this `post_get_instance_with_metadata` interceptor runs after the + `post_get_instance` interceptor. The (possibly modified) response returned by + `post_get_instance` will be passed to + `post_get_instance_with_metadata`. + """ + return response, metadata + def pre_get_processor( self, request: platform.GetProcessorRequest, @@ -615,12 +914,35 @@ def pre_get_processor( def post_get_processor(self, response: platform.Processor) -> platform.Processor: """Post-rpc interceptor for get_processor - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_processor_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_get_processor` interceptor runs + before the `post_get_processor_with_metadata` interceptor. """ return response + def post_get_processor_with_metadata( + self, + response: platform.Processor, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.Processor, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_processor + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_get_processor_with_metadata` + interceptor in new development instead of the `post_get_processor` interceptor. + When both interceptors are used, this `post_get_processor_with_metadata` interceptor runs after the + `post_get_processor` interceptor. The (possibly modified) response returned by + `post_get_processor` will be passed to + `post_get_processor_with_metadata`. + """ + return response, metadata + def pre_list_applications( self, request: platform.ListApplicationsRequest, @@ -640,12 +962,37 @@ def post_list_applications( ) -> platform.ListApplicationsResponse: """Post-rpc interceptor for list_applications - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_applications_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_applications` interceptor runs + before the `post_list_applications_with_metadata` interceptor. """ return response + def post_list_applications_with_metadata( + self, + response: platform.ListApplicationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + platform.ListApplicationsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_applications + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_applications_with_metadata` + interceptor in new development instead of the `post_list_applications` interceptor. + When both interceptors are used, this `post_list_applications_with_metadata` interceptor runs after the + `post_list_applications` interceptor. The (possibly modified) response returned by + `post_list_applications` will be passed to + `post_list_applications_with_metadata`. + """ + return response, metadata + def pre_list_drafts( self, request: platform.ListDraftsRequest, @@ -663,12 +1010,35 @@ def post_list_drafts( ) -> platform.ListDraftsResponse: """Post-rpc interceptor for list_drafts - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_drafts_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_drafts` interceptor runs + before the `post_list_drafts_with_metadata` interceptor. """ return response + def post_list_drafts_with_metadata( + self, + response: platform.ListDraftsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.ListDraftsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_drafts + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_drafts_with_metadata` + interceptor in new development instead of the `post_list_drafts` interceptor. + When both interceptors are used, this `post_list_drafts_with_metadata` interceptor runs after the + `post_list_drafts` interceptor. The (possibly modified) response returned by + `post_list_drafts` will be passed to + `post_list_drafts_with_metadata`. + """ + return response, metadata + def pre_list_instances( self, request: platform.ListInstancesRequest, @@ -686,12 +1056,35 @@ def post_list_instances( ) -> platform.ListInstancesResponse: """Post-rpc interceptor for list_instances - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_instances_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_instances` interceptor runs + before the `post_list_instances_with_metadata` interceptor. """ return response + def post_list_instances_with_metadata( + self, + response: platform.ListInstancesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[platform.ListInstancesResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_instances + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_instances_with_metadata` + interceptor in new development instead of the `post_list_instances` interceptor. + When both interceptors are used, this `post_list_instances_with_metadata` interceptor runs after the + `post_list_instances` interceptor. The (possibly modified) response returned by + `post_list_instances` will be passed to + `post_list_instances_with_metadata`. + """ + return response, metadata + def pre_list_prebuilt_processors( self, request: platform.ListPrebuiltProcessorsRequest, @@ -711,12 +1104,37 @@ def post_list_prebuilt_processors( ) -> platform.ListPrebuiltProcessorsResponse: """Post-rpc interceptor for list_prebuilt_processors - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_prebuilt_processors_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_prebuilt_processors` interceptor runs + before the `post_list_prebuilt_processors_with_metadata` interceptor. """ return response + def post_list_prebuilt_processors_with_metadata( + self, + response: platform.ListPrebuiltProcessorsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + platform.ListPrebuiltProcessorsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_prebuilt_processors + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_prebuilt_processors_with_metadata` + interceptor in new development instead of the `post_list_prebuilt_processors` interceptor. + When both interceptors are used, this `post_list_prebuilt_processors_with_metadata` interceptor runs after the + `post_list_prebuilt_processors` interceptor. The (possibly modified) response returned by + `post_list_prebuilt_processors` will be passed to + `post_list_prebuilt_processors_with_metadata`. + """ + return response, metadata + def pre_list_processors( self, request: platform.ListProcessorsRequest, @@ -734,12 +1152,37 @@ def post_list_processors( ) -> platform.ListProcessorsResponse: """Post-rpc interceptor for list_processors - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_processors_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_list_processors` interceptor runs + before the `post_list_processors_with_metadata` interceptor. """ return response + def post_list_processors_with_metadata( + self, + response: platform.ListProcessorsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + platform.ListProcessorsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_processors + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_list_processors_with_metadata` + interceptor in new development instead of the `post_list_processors` interceptor. + When both interceptors are used, this `post_list_processors_with_metadata` interceptor runs after the + `post_list_processors` interceptor. The (possibly modified) response returned by + `post_list_processors` will be passed to + `post_list_processors_with_metadata`. + """ + return response, metadata + def pre_remove_application_stream_input( self, request: platform.RemoveApplicationStreamInputRequest, @@ -760,12 +1203,35 @@ def post_remove_application_stream_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for remove_application_stream_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_remove_application_stream_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_remove_application_stream_input` interceptor runs + before the `post_remove_application_stream_input_with_metadata` interceptor. """ return response + def post_remove_application_stream_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for remove_application_stream_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_remove_application_stream_input_with_metadata` + interceptor in new development instead of the `post_remove_application_stream_input` interceptor. + When both interceptors are used, this `post_remove_application_stream_input_with_metadata` interceptor runs after the + `post_remove_application_stream_input` interceptor. The (possibly modified) response returned by + `post_remove_application_stream_input` will be passed to + `post_remove_application_stream_input_with_metadata`. + """ + return response, metadata + def pre_undeploy_application( self, request: platform.UndeployApplicationRequest, @@ -785,12 +1251,35 @@ def post_undeploy_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for undeploy_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_undeploy_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_undeploy_application` interceptor runs + before the `post_undeploy_application_with_metadata` interceptor. """ return response + def post_undeploy_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for undeploy_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_undeploy_application_with_metadata` + interceptor in new development instead of the `post_undeploy_application` interceptor. + When both interceptors are used, this `post_undeploy_application_with_metadata` interceptor runs after the + `post_undeploy_application` interceptor. The (possibly modified) response returned by + `post_undeploy_application` will be passed to + `post_undeploy_application_with_metadata`. + """ + return response, metadata + def pre_update_application( self, request: platform.UpdateApplicationRequest, @@ -810,12 +1299,35 @@ def post_update_application( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_application - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_application_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_application` interceptor runs + before the `post_update_application_with_metadata` interceptor. """ return response + def post_update_application_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_application + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_application_with_metadata` + interceptor in new development instead of the `post_update_application` interceptor. + When both interceptors are used, this `post_update_application_with_metadata` interceptor runs after the + `post_update_application` interceptor. The (possibly modified) response returned by + `post_update_application` will be passed to + `post_update_application_with_metadata`. + """ + return response, metadata + def pre_update_application_instances( self, request: platform.UpdateApplicationInstancesRequest, @@ -836,12 +1348,35 @@ def post_update_application_instances( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_application_instances - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_application_instances_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_application_instances` interceptor runs + before the `post_update_application_instances_with_metadata` interceptor. """ return response + def post_update_application_instances_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_application_instances + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_application_instances_with_metadata` + interceptor in new development instead of the `post_update_application_instances` interceptor. + When both interceptors are used, this `post_update_application_instances_with_metadata` interceptor runs after the + `post_update_application_instances` interceptor. The (possibly modified) response returned by + `post_update_application_instances` will be passed to + `post_update_application_instances_with_metadata`. + """ + return response, metadata + def pre_update_application_stream_input( self, request: platform.UpdateApplicationStreamInputRequest, @@ -862,12 +1397,35 @@ def post_update_application_stream_input( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_application_stream_input - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_application_stream_input_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_application_stream_input` interceptor runs + before the `post_update_application_stream_input_with_metadata` interceptor. """ return response + def post_update_application_stream_input_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_application_stream_input + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_application_stream_input_with_metadata` + interceptor in new development instead of the `post_update_application_stream_input` interceptor. + When both interceptors are used, this `post_update_application_stream_input_with_metadata` interceptor runs after the + `post_update_application_stream_input` interceptor. The (possibly modified) response returned by + `post_update_application_stream_input` will be passed to + `post_update_application_stream_input_with_metadata`. + """ + return response, metadata + def pre_update_draft( self, request: platform.UpdateDraftRequest, @@ -885,12 +1443,35 @@ def post_update_draft( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_draft - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_draft_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_draft` interceptor runs + before the `post_update_draft_with_metadata` interceptor. """ return response + def post_update_draft_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_draft + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_draft_with_metadata` + interceptor in new development instead of the `post_update_draft` interceptor. + When both interceptors are used, this `post_update_draft_with_metadata` interceptor runs after the + `post_update_draft` interceptor. The (possibly modified) response returned by + `post_update_draft` will be passed to + `post_update_draft_with_metadata`. + """ + return response, metadata + def pre_update_processor( self, request: platform.UpdateProcessorRequest, @@ -910,12 +1491,35 @@ def post_update_processor( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_processor - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_processor_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AppPlatform server but before - it is returned to user code. + it is returned to user code. This `post_update_processor` interceptor runs + before the `post_update_processor_with_metadata` interceptor. """ return response + def post_update_processor_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_processor + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AppPlatform server but before it is returned to user code. + + We recommend only using this `post_update_processor_with_metadata` + interceptor in new development instead of the `post_update_processor` interceptor. + When both interceptors are used, this `post_update_processor_with_metadata` interceptor runs after the + `post_update_processor` interceptor. The (possibly modified) response returned by + `post_update_processor` will be passed to + `post_update_processor_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -1414,6 +2018,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_add_application_stream_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_add_application_stream_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1563,6 +2171,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1717,6 +2329,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_application_instances(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_application_instances_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1870,6 +2486,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_draft(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_draft_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2019,6 +2639,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_processor(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_processor_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2162,6 +2786,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2316,6 +2944,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_application_instances(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_application_instances_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2461,6 +3093,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_draft(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_draft_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2604,6 +3240,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_processor(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_processor_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2753,6 +3393,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_deploy_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_deploy_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2893,6 +3537,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3035,6 +3683,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_draft(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_draft_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3179,6 +3831,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_instance(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_instance_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3325,6 +3981,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_processor(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_processor_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3470,6 +4130,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_applications(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_applications_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3619,6 +4283,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_drafts(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_drafts_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3764,6 +4432,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_instances(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_instances_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3915,6 +4587,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_prebuilt_processors(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_prebuilt_processors_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4060,6 +4736,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_processors(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_processors_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4214,6 +4894,13 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_remove_application_stream_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_remove_application_stream_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4364,6 +5051,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_undeploy_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_undeploy_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4513,6 +5204,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_application(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_application_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4667,6 +5362,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_application_instances(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_application_instances_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4821,6 +5520,13 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_application_stream_input(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_update_application_stream_input_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4974,6 +5680,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_draft(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_draft_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5123,6 +5833,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_processor(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_processor_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/live_video_analytics/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/live_video_analytics/client.py index 4fe984f02f39..86a4c2932c14 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/live_video_analytics/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/live_video_analytics/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -521,6 +523,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -1394,16 +1423,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -1449,16 +1482,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -1681,16 +1718,20 @@ def set_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_iam_policy( self, @@ -1803,16 +1844,20 @@ def get_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def test_iam_permissions( self, @@ -1863,16 +1908,20 @@ def test_iam_permissions( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_location( self, @@ -1918,16 +1967,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -1973,16 +2026,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/live_video_analytics/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/live_video_analytics/transports/rest.py index 9726c2f9f2da..bd7487d7b844 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/live_video_analytics/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/live_video_analytics/transports/rest.py @@ -137,12 +137,35 @@ def post_create_analysis( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_analysis - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_analysis_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_create_analysis` interceptor runs + before the `post_create_analysis_with_metadata` interceptor. """ return response + def post_create_analysis_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_analysis + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_create_analysis_with_metadata` + interceptor in new development instead of the `post_create_analysis` interceptor. + When both interceptors are used, this `post_create_analysis_with_metadata` interceptor runs after the + `post_create_analysis` interceptor. The (possibly modified) response returned by + `post_create_analysis` will be passed to + `post_create_analysis_with_metadata`. + """ + return response, metadata + def pre_delete_analysis( self, request: lva_service.DeleteAnalysisRequest, @@ -162,12 +185,35 @@ def post_delete_analysis( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_analysis - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_analysis_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_delete_analysis` interceptor runs + before the `post_delete_analysis_with_metadata` interceptor. """ return response + def post_delete_analysis_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_analysis + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_delete_analysis_with_metadata` + interceptor in new development instead of the `post_delete_analysis` interceptor. + When both interceptors are used, this `post_delete_analysis_with_metadata` interceptor runs after the + `post_delete_analysis` interceptor. The (possibly modified) response returned by + `post_delete_analysis` will be passed to + `post_delete_analysis_with_metadata`. + """ + return response, metadata + def pre_get_analysis( self, request: lva_service.GetAnalysisRequest, @@ -185,12 +231,35 @@ def post_get_analysis( ) -> lva_resources.Analysis: """Post-rpc interceptor for get_analysis - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_analysis_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_get_analysis` interceptor runs + before the `post_get_analysis_with_metadata` interceptor. """ return response + def post_get_analysis_with_metadata( + self, + response: lva_resources.Analysis, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[lva_resources.Analysis, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_analysis + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_get_analysis_with_metadata` + interceptor in new development instead of the `post_get_analysis` interceptor. + When both interceptors are used, this `post_get_analysis_with_metadata` interceptor runs after the + `post_get_analysis` interceptor. The (possibly modified) response returned by + `post_get_analysis` will be passed to + `post_get_analysis_with_metadata`. + """ + return response, metadata + def pre_list_analyses( self, request: lva_service.ListAnalysesRequest, @@ -210,12 +279,37 @@ def post_list_analyses( ) -> lva_service.ListAnalysesResponse: """Post-rpc interceptor for list_analyses - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_analyses_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_list_analyses` interceptor runs + before the `post_list_analyses_with_metadata` interceptor. """ return response + def post_list_analyses_with_metadata( + self, + response: lva_service.ListAnalysesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + lva_service.ListAnalysesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_analyses + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_list_analyses_with_metadata` + interceptor in new development instead of the `post_list_analyses` interceptor. + When both interceptors are used, this `post_list_analyses_with_metadata` interceptor runs after the + `post_list_analyses` interceptor. The (possibly modified) response returned by + `post_list_analyses` will be passed to + `post_list_analyses_with_metadata`. + """ + return response, metadata + def pre_update_analysis( self, request: lva_service.UpdateAnalysisRequest, @@ -235,12 +329,35 @@ def post_update_analysis( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_analysis - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_analysis_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the LiveVideoAnalytics server but before - it is returned to user code. + it is returned to user code. This `post_update_analysis` interceptor runs + before the `post_update_analysis_with_metadata` interceptor. """ return response + def post_update_analysis_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_analysis + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the LiveVideoAnalytics server but before it is returned to user code. + + We recommend only using this `post_update_analysis_with_metadata` + interceptor in new development instead of the `post_update_analysis` interceptor. + When both interceptors are used, this `post_update_analysis_with_metadata` interceptor runs after the + `post_update_analysis` interceptor. The (possibly modified) response returned by + `post_update_analysis` will be passed to + `post_update_analysis_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -735,6 +852,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_analysis(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_analysis_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -877,6 +998,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_analysis(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_analysis_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1020,6 +1145,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_analysis(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_analysis_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1164,6 +1293,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_analyses(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_analyses_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1314,6 +1447,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_analysis(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_analysis_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streaming_service/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streaming_service/client.py index 0a371a4072da..486519c74dd3 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streaming_service/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streaming_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -493,6 +495,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -1233,16 +1262,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -1288,16 +1321,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -1520,16 +1557,20 @@ def set_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_iam_policy( self, @@ -1642,16 +1683,20 @@ def get_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def test_iam_permissions( self, @@ -1702,16 +1747,20 @@ def test_iam_permissions( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_location( self, @@ -1757,16 +1806,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -1812,16 +1865,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streaming_service/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streaming_service/transports/rest.py index 23b0d32277e5..00c7ad4eee0b 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streaming_service/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streaming_service/transports/rest.py @@ -121,12 +121,35 @@ def post_acquire_lease( ) -> streaming_service.Lease: """Post-rpc interceptor for acquire_lease - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_acquire_lease_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamingService server but before - it is returned to user code. + it is returned to user code. This `post_acquire_lease` interceptor runs + before the `post_acquire_lease_with_metadata` interceptor. """ return response + def post_acquire_lease_with_metadata( + self, + response: streaming_service.Lease, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streaming_service.Lease, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for acquire_lease + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamingService server but before it is returned to user code. + + We recommend only using this `post_acquire_lease_with_metadata` + interceptor in new development instead of the `post_acquire_lease` interceptor. + When both interceptors are used, this `post_acquire_lease_with_metadata` interceptor runs after the + `post_acquire_lease` interceptor. The (possibly modified) response returned by + `post_acquire_lease` will be passed to + `post_acquire_lease_with_metadata`. + """ + return response, metadata + def pre_release_lease( self, request: streaming_service.ReleaseLeaseRequest, @@ -146,12 +169,37 @@ def post_release_lease( ) -> streaming_service.ReleaseLeaseResponse: """Post-rpc interceptor for release_lease - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_release_lease_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamingService server but before - it is returned to user code. + it is returned to user code. This `post_release_lease` interceptor runs + before the `post_release_lease_with_metadata` interceptor. """ return response + def post_release_lease_with_metadata( + self, + response: streaming_service.ReleaseLeaseResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streaming_service.ReleaseLeaseResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for release_lease + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamingService server but before it is returned to user code. + + We recommend only using this `post_release_lease_with_metadata` + interceptor in new development instead of the `post_release_lease` interceptor. + When both interceptors are used, this `post_release_lease_with_metadata` interceptor runs after the + `post_release_lease` interceptor. The (possibly modified) response returned by + `post_release_lease` will be passed to + `post_release_lease_with_metadata`. + """ + return response, metadata + def pre_renew_lease( self, request: streaming_service.RenewLeaseRequest, @@ -171,12 +219,35 @@ def post_renew_lease( ) -> streaming_service.Lease: """Post-rpc interceptor for renew_lease - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_renew_lease_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamingService server but before - it is returned to user code. + it is returned to user code. This `post_renew_lease` interceptor runs + before the `post_renew_lease_with_metadata` interceptor. """ return response + def post_renew_lease_with_metadata( + self, + response: streaming_service.Lease, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streaming_service.Lease, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for renew_lease + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamingService server but before it is returned to user code. + + We recommend only using this `post_renew_lease_with_metadata` + interceptor in new development instead of the `post_renew_lease` interceptor. + When both interceptors are used, this `post_renew_lease_with_metadata` interceptor runs after the + `post_renew_lease` interceptor. The (possibly modified) response returned by + `post_renew_lease` will be passed to + `post_renew_lease_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -606,6 +677,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_acquire_lease(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_acquire_lease_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -788,6 +863,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_release_lease(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_release_lease_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -936,6 +1015,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_renew_lease(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_renew_lease_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streams_service/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streams_service/client.py index 282450c55c96..bb096fa7748f 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streams_service/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streams_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -600,6 +602,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -3571,16 +3600,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -3626,16 +3659,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -3858,16 +3895,20 @@ def set_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_iam_policy( self, @@ -3980,16 +4021,20 @@ def get_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def test_iam_permissions( self, @@ -4040,16 +4085,20 @@ def test_iam_permissions( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_location( self, @@ -4095,16 +4144,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -4150,16 +4203,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streams_service/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streams_service/transports/rest.py index 460b0d633a66..be886a375f3d 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streams_service/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/streams_service/transports/rest.py @@ -277,12 +277,35 @@ def post_create_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_create_cluster` interceptor runs + before the `post_create_cluster_with_metadata` interceptor. """ return response + def post_create_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_create_cluster_with_metadata` + interceptor in new development instead of the `post_create_cluster` interceptor. + When both interceptors are used, this `post_create_cluster_with_metadata` interceptor runs after the + `post_create_cluster` interceptor. The (possibly modified) response returned by + `post_create_cluster` will be passed to + `post_create_cluster_with_metadata`. + """ + return response, metadata + def pre_create_event( self, request: streams_service.CreateEventRequest, @@ -302,12 +325,35 @@ def post_create_event( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_create_event` interceptor runs + before the `post_create_event_with_metadata` interceptor. """ return response + def post_create_event_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_create_event_with_metadata` + interceptor in new development instead of the `post_create_event` interceptor. + When both interceptors are used, this `post_create_event_with_metadata` interceptor runs after the + `post_create_event` interceptor. The (possibly modified) response returned by + `post_create_event` will be passed to + `post_create_event_with_metadata`. + """ + return response, metadata + def pre_create_series( self, request: streams_service.CreateSeriesRequest, @@ -327,12 +373,35 @@ def post_create_series( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_create_series` interceptor runs + before the `post_create_series_with_metadata` interceptor. """ return response + def post_create_series_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_create_series_with_metadata` + interceptor in new development instead of the `post_create_series` interceptor. + When both interceptors are used, this `post_create_series_with_metadata` interceptor runs after the + `post_create_series` interceptor. The (possibly modified) response returned by + `post_create_series` will be passed to + `post_create_series_with_metadata`. + """ + return response, metadata + def pre_create_stream( self, request: streams_service.CreateStreamRequest, @@ -352,12 +421,35 @@ def post_create_stream( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_stream - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_stream_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_create_stream` interceptor runs + before the `post_create_stream_with_metadata` interceptor. """ return response + def post_create_stream_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_stream + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_create_stream_with_metadata` + interceptor in new development instead of the `post_create_stream` interceptor. + When both interceptors are used, this `post_create_stream_with_metadata` interceptor runs after the + `post_create_stream` interceptor. The (possibly modified) response returned by + `post_create_stream` will be passed to + `post_create_stream_with_metadata`. + """ + return response, metadata + def pre_delete_cluster( self, request: streams_service.DeleteClusterRequest, @@ -377,12 +469,35 @@ def post_delete_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_cluster` interceptor runs + before the `post_delete_cluster_with_metadata` interceptor. """ return response + def post_delete_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_delete_cluster_with_metadata` + interceptor in new development instead of the `post_delete_cluster` interceptor. + When both interceptors are used, this `post_delete_cluster_with_metadata` interceptor runs after the + `post_delete_cluster` interceptor. The (possibly modified) response returned by + `post_delete_cluster` will be passed to + `post_delete_cluster_with_metadata`. + """ + return response, metadata + def pre_delete_event( self, request: streams_service.DeleteEventRequest, @@ -402,12 +517,35 @@ def post_delete_event( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_event` interceptor runs + before the `post_delete_event_with_metadata` interceptor. """ return response + def post_delete_event_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_delete_event_with_metadata` + interceptor in new development instead of the `post_delete_event` interceptor. + When both interceptors are used, this `post_delete_event_with_metadata` interceptor runs after the + `post_delete_event` interceptor. The (possibly modified) response returned by + `post_delete_event` will be passed to + `post_delete_event_with_metadata`. + """ + return response, metadata + def pre_delete_series( self, request: streams_service.DeleteSeriesRequest, @@ -427,12 +565,35 @@ def post_delete_series( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_series` interceptor runs + before the `post_delete_series_with_metadata` interceptor. """ return response + def post_delete_series_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_delete_series_with_metadata` + interceptor in new development instead of the `post_delete_series` interceptor. + When both interceptors are used, this `post_delete_series_with_metadata` interceptor runs after the + `post_delete_series` interceptor. The (possibly modified) response returned by + `post_delete_series` will be passed to + `post_delete_series_with_metadata`. + """ + return response, metadata + def pre_delete_stream( self, request: streams_service.DeleteStreamRequest, @@ -452,12 +613,35 @@ def post_delete_stream( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_stream - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_stream_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_delete_stream` interceptor runs + before the `post_delete_stream_with_metadata` interceptor. """ return response + def post_delete_stream_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_stream + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_delete_stream_with_metadata` + interceptor in new development instead of the `post_delete_stream` interceptor. + When both interceptors are used, this `post_delete_stream_with_metadata` interceptor runs after the + `post_delete_stream` interceptor. The (possibly modified) response returned by + `post_delete_stream` will be passed to + `post_delete_stream_with_metadata`. + """ + return response, metadata + def pre_generate_stream_hls_token( self, request: streams_service.GenerateStreamHlsTokenRequest, @@ -478,12 +662,38 @@ def post_generate_stream_hls_token( ) -> streams_service.GenerateStreamHlsTokenResponse: """Post-rpc interceptor for generate_stream_hls_token - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_generate_stream_hls_token_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_generate_stream_hls_token` interceptor runs + before the `post_generate_stream_hls_token_with_metadata` interceptor. """ return response + def post_generate_stream_hls_token_with_metadata( + self, + response: streams_service.GenerateStreamHlsTokenResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.GenerateStreamHlsTokenResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for generate_stream_hls_token + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_generate_stream_hls_token_with_metadata` + interceptor in new development instead of the `post_generate_stream_hls_token` interceptor. + When both interceptors are used, this `post_generate_stream_hls_token_with_metadata` interceptor runs after the + `post_generate_stream_hls_token` interceptor. The (possibly modified) response returned by + `post_generate_stream_hls_token` will be passed to + `post_generate_stream_hls_token_with_metadata`. + """ + return response, metadata + def pre_get_cluster( self, request: streams_service.GetClusterRequest, @@ -501,12 +711,35 @@ def pre_get_cluster( def post_get_cluster(self, response: common.Cluster) -> common.Cluster: """Post-rpc interceptor for get_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_cluster` interceptor runs + before the `post_get_cluster_with_metadata` interceptor. """ return response + def post_get_cluster_with_metadata( + self, + response: common.Cluster, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[common.Cluster, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_cluster_with_metadata` + interceptor in new development instead of the `post_get_cluster` interceptor. + When both interceptors are used, this `post_get_cluster_with_metadata` interceptor runs after the + `post_get_cluster` interceptor. The (possibly modified) response returned by + `post_get_cluster` will be passed to + `post_get_cluster_with_metadata`. + """ + return response, metadata + def pre_get_event( self, request: streams_service.GetEventRequest, @@ -526,12 +759,35 @@ def post_get_event( ) -> streams_resources.Event: """Post-rpc interceptor for get_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_event` interceptor runs + before the `post_get_event_with_metadata` interceptor. """ return response + def post_get_event_with_metadata( + self, + response: streams_resources.Event, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streams_resources.Event, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_event_with_metadata` + interceptor in new development instead of the `post_get_event` interceptor. + When both interceptors are used, this `post_get_event_with_metadata` interceptor runs after the + `post_get_event` interceptor. The (possibly modified) response returned by + `post_get_event` will be passed to + `post_get_event_with_metadata`. + """ + return response, metadata + def pre_get_series( self, request: streams_service.GetSeriesRequest, @@ -551,12 +807,35 @@ def post_get_series( ) -> streams_resources.Series: """Post-rpc interceptor for get_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_series` interceptor runs + before the `post_get_series_with_metadata` interceptor. """ return response + def post_get_series_with_metadata( + self, + response: streams_resources.Series, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streams_resources.Series, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_series_with_metadata` + interceptor in new development instead of the `post_get_series` interceptor. + When both interceptors are used, this `post_get_series_with_metadata` interceptor runs after the + `post_get_series` interceptor. The (possibly modified) response returned by + `post_get_series` will be passed to + `post_get_series_with_metadata`. + """ + return response, metadata + def pre_get_stream( self, request: streams_service.GetStreamRequest, @@ -576,12 +855,35 @@ def post_get_stream( ) -> streams_resources.Stream: """Post-rpc interceptor for get_stream - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_stream_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_get_stream` interceptor runs + before the `post_get_stream_with_metadata` interceptor. """ return response + def post_get_stream_with_metadata( + self, + response: streams_resources.Stream, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[streams_resources.Stream, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_stream + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_get_stream_with_metadata` + interceptor in new development instead of the `post_get_stream` interceptor. + When both interceptors are used, this `post_get_stream_with_metadata` interceptor runs after the + `post_get_stream` interceptor. The (possibly modified) response returned by + `post_get_stream` will be passed to + `post_get_stream_with_metadata`. + """ + return response, metadata + def pre_list_clusters( self, request: streams_service.ListClustersRequest, @@ -601,12 +903,37 @@ def post_list_clusters( ) -> streams_service.ListClustersResponse: """Post-rpc interceptor for list_clusters - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_clusters_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_list_clusters` interceptor runs + before the `post_list_clusters_with_metadata` interceptor. """ return response + def post_list_clusters_with_metadata( + self, + response: streams_service.ListClustersResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.ListClustersResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_clusters + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_list_clusters_with_metadata` + interceptor in new development instead of the `post_list_clusters` interceptor. + When both interceptors are used, this `post_list_clusters_with_metadata` interceptor runs after the + `post_list_clusters` interceptor. The (possibly modified) response returned by + `post_list_clusters` will be passed to + `post_list_clusters_with_metadata`. + """ + return response, metadata + def pre_list_events( self, request: streams_service.ListEventsRequest, @@ -626,12 +953,37 @@ def post_list_events( ) -> streams_service.ListEventsResponse: """Post-rpc interceptor for list_events - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_events_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_list_events` interceptor runs + before the `post_list_events_with_metadata` interceptor. """ return response + def post_list_events_with_metadata( + self, + response: streams_service.ListEventsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.ListEventsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_events + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_list_events_with_metadata` + interceptor in new development instead of the `post_list_events` interceptor. + When both interceptors are used, this `post_list_events_with_metadata` interceptor runs after the + `post_list_events` interceptor. The (possibly modified) response returned by + `post_list_events` will be passed to + `post_list_events_with_metadata`. + """ + return response, metadata + def pre_list_series( self, request: streams_service.ListSeriesRequest, @@ -651,12 +1003,37 @@ def post_list_series( ) -> streams_service.ListSeriesResponse: """Post-rpc interceptor for list_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_list_series` interceptor runs + before the `post_list_series_with_metadata` interceptor. """ return response + def post_list_series_with_metadata( + self, + response: streams_service.ListSeriesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.ListSeriesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_list_series_with_metadata` + interceptor in new development instead of the `post_list_series` interceptor. + When both interceptors are used, this `post_list_series_with_metadata` interceptor runs after the + `post_list_series` interceptor. The (possibly modified) response returned by + `post_list_series` will be passed to + `post_list_series_with_metadata`. + """ + return response, metadata + def pre_list_streams( self, request: streams_service.ListStreamsRequest, @@ -676,12 +1053,37 @@ def post_list_streams( ) -> streams_service.ListStreamsResponse: """Post-rpc interceptor for list_streams - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_streams_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_list_streams` interceptor runs + before the `post_list_streams_with_metadata` interceptor. """ return response + def post_list_streams_with_metadata( + self, + response: streams_service.ListStreamsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + streams_service.ListStreamsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_streams + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_list_streams_with_metadata` + interceptor in new development instead of the `post_list_streams` interceptor. + When both interceptors are used, this `post_list_streams_with_metadata` interceptor runs after the + `post_list_streams` interceptor. The (possibly modified) response returned by + `post_list_streams` will be passed to + `post_list_streams_with_metadata`. + """ + return response, metadata + def pre_materialize_channel( self, request: streams_service.MaterializeChannelRequest, @@ -702,12 +1104,35 @@ def post_materialize_channel( ) -> operations_pb2.Operation: """Post-rpc interceptor for materialize_channel - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_materialize_channel_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_materialize_channel` interceptor runs + before the `post_materialize_channel_with_metadata` interceptor. """ return response + def post_materialize_channel_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for materialize_channel + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_materialize_channel_with_metadata` + interceptor in new development instead of the `post_materialize_channel` interceptor. + When both interceptors are used, this `post_materialize_channel_with_metadata` interceptor runs after the + `post_materialize_channel` interceptor. The (possibly modified) response returned by + `post_materialize_channel` will be passed to + `post_materialize_channel_with_metadata`. + """ + return response, metadata + def pre_update_cluster( self, request: streams_service.UpdateClusterRequest, @@ -727,12 +1152,35 @@ def post_update_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_update_cluster` interceptor runs + before the `post_update_cluster_with_metadata` interceptor. """ return response + def post_update_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_update_cluster_with_metadata` + interceptor in new development instead of the `post_update_cluster` interceptor. + When both interceptors are used, this `post_update_cluster_with_metadata` interceptor runs after the + `post_update_cluster` interceptor. The (possibly modified) response returned by + `post_update_cluster` will be passed to + `post_update_cluster_with_metadata`. + """ + return response, metadata + def pre_update_event( self, request: streams_service.UpdateEventRequest, @@ -752,12 +1200,35 @@ def post_update_event( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_event - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_event_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_update_event` interceptor runs + before the `post_update_event_with_metadata` interceptor. """ return response + def post_update_event_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_event + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_update_event_with_metadata` + interceptor in new development instead of the `post_update_event` interceptor. + When both interceptors are used, this `post_update_event_with_metadata` interceptor runs after the + `post_update_event` interceptor. The (possibly modified) response returned by + `post_update_event` will be passed to + `post_update_event_with_metadata`. + """ + return response, metadata + def pre_update_series( self, request: streams_service.UpdateSeriesRequest, @@ -777,12 +1248,35 @@ def post_update_series( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_series - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_series_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_update_series` interceptor runs + before the `post_update_series_with_metadata` interceptor. """ return response + def post_update_series_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_series + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_update_series_with_metadata` + interceptor in new development instead of the `post_update_series` interceptor. + When both interceptors are used, this `post_update_series_with_metadata` interceptor runs after the + `post_update_series` interceptor. The (possibly modified) response returned by + `post_update_series` will be passed to + `post_update_series_with_metadata`. + """ + return response, metadata + def pre_update_stream( self, request: streams_service.UpdateStreamRequest, @@ -802,12 +1296,35 @@ def post_update_stream( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_stream - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_stream_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the StreamsService server but before - it is returned to user code. + it is returned to user code. This `post_update_stream` interceptor runs + before the `post_update_stream_with_metadata` interceptor. """ return response + def post_update_stream_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_stream + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the StreamsService server but before it is returned to user code. + + We recommend only using this `post_update_stream_with_metadata` + interceptor in new development instead of the `post_update_stream` interceptor. + When both interceptors are used, this `post_update_stream_with_metadata` interceptor runs after the + `post_update_stream` interceptor. The (possibly modified) response returned by + `post_update_stream` will be passed to + `post_update_stream_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -1303,6 +1820,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1450,6 +1971,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1597,6 +2122,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1744,6 +2273,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_stream(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_stream_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1885,6 +2418,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2026,6 +2563,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2167,6 +2708,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2308,6 +2853,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_stream(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_stream_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2462,6 +3011,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_generate_stream_hls_token(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_generate_stream_hls_token_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2608,6 +3161,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2752,6 +3309,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2896,6 +3457,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3046,6 +3611,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_stream(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_stream_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3189,6 +3758,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_clusters(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_clusters_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3336,6 +3909,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_events(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_events_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3483,6 +4060,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3628,6 +4209,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_streams(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_streams_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3779,6 +4364,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_materialize_channel(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_materialize_channel_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3926,6 +4515,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4073,6 +4666,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_event(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_event_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4220,6 +4817,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_series(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_series_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4367,6 +4968,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_stream(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_stream_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/warehouse/client.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/warehouse/client.py index 86ac74731ecd..7e14deb1cbe3 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/warehouse/client.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/warehouse/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -592,6 +594,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -4105,16 +4134,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -4160,16 +4193,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -4392,16 +4429,20 @@ def set_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_iam_policy( self, @@ -4514,16 +4555,20 @@ def get_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def test_iam_permissions( self, @@ -4574,16 +4619,20 @@ def test_iam_permissions( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_location( self, @@ -4629,16 +4678,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -4684,16 +4737,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/warehouse/transports/rest.py b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/warehouse/transports/rest.py index dbc0337847e6..d83c4325bdb2 100644 --- a/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/warehouse/transports/rest.py +++ b/packages/google-cloud-visionai/google/cloud/visionai_v1alpha1/services/warehouse/transports/rest.py @@ -304,12 +304,35 @@ def post_clip_asset( ) -> warehouse.ClipAssetResponse: """Post-rpc interceptor for clip_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_clip_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_clip_asset` interceptor runs + before the `post_clip_asset_with_metadata` interceptor. """ return response + def post_clip_asset_with_metadata( + self, + response: warehouse.ClipAssetResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.ClipAssetResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for clip_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_clip_asset_with_metadata` + interceptor in new development instead of the `post_clip_asset` interceptor. + When both interceptors are used, this `post_clip_asset_with_metadata` interceptor runs after the + `post_clip_asset` interceptor. The (possibly modified) response returned by + `post_clip_asset` will be passed to + `post_clip_asset_with_metadata`. + """ + return response, metadata + def pre_create_annotation( self, request: warehouse.CreateAnnotationRequest, @@ -329,12 +352,35 @@ def post_create_annotation( ) -> warehouse.Annotation: """Post-rpc interceptor for create_annotation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_annotation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_annotation` interceptor runs + before the `post_create_annotation_with_metadata` interceptor. """ return response + def post_create_annotation_with_metadata( + self, + response: warehouse.Annotation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Annotation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_annotation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_annotation_with_metadata` + interceptor in new development instead of the `post_create_annotation` interceptor. + When both interceptors are used, this `post_create_annotation_with_metadata` interceptor runs after the + `post_create_annotation` interceptor. The (possibly modified) response returned by + `post_create_annotation` will be passed to + `post_create_annotation_with_metadata`. + """ + return response, metadata + def pre_create_asset( self, request: warehouse.CreateAssetRequest, @@ -350,12 +396,35 @@ def pre_create_asset( def post_create_asset(self, response: warehouse.Asset) -> warehouse.Asset: """Post-rpc interceptor for create_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_asset` interceptor runs + before the `post_create_asset_with_metadata` interceptor. """ return response + def post_create_asset_with_metadata( + self, + response: warehouse.Asset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Asset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_asset_with_metadata` + interceptor in new development instead of the `post_create_asset` interceptor. + When both interceptors are used, this `post_create_asset_with_metadata` interceptor runs after the + `post_create_asset` interceptor. The (possibly modified) response returned by + `post_create_asset` will be passed to + `post_create_asset_with_metadata`. + """ + return response, metadata + def pre_create_corpus( self, request: warehouse.CreateCorpusRequest, @@ -373,12 +442,35 @@ def post_create_corpus( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_corpus - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_corpus_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_corpus` interceptor runs + before the `post_create_corpus_with_metadata` interceptor. """ return response + def post_create_corpus_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_corpus + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_corpus_with_metadata` + interceptor in new development instead of the `post_create_corpus` interceptor. + When both interceptors are used, this `post_create_corpus_with_metadata` interceptor runs after the + `post_create_corpus` interceptor. The (possibly modified) response returned by + `post_create_corpus` will be passed to + `post_create_corpus_with_metadata`. + """ + return response, metadata + def pre_create_data_schema( self, request: warehouse.CreateDataSchemaRequest, @@ -398,12 +490,35 @@ def post_create_data_schema( ) -> warehouse.DataSchema: """Post-rpc interceptor for create_data_schema - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_data_schema_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_data_schema` interceptor runs + before the `post_create_data_schema_with_metadata` interceptor. """ return response + def post_create_data_schema_with_metadata( + self, + response: warehouse.DataSchema, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.DataSchema, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_data_schema + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_data_schema_with_metadata` + interceptor in new development instead of the `post_create_data_schema` interceptor. + When both interceptors are used, this `post_create_data_schema_with_metadata` interceptor runs after the + `post_create_data_schema` interceptor. The (possibly modified) response returned by + `post_create_data_schema` will be passed to + `post_create_data_schema_with_metadata`. + """ + return response, metadata + def pre_create_search_config( self, request: warehouse.CreateSearchConfigRequest, @@ -423,12 +538,35 @@ def post_create_search_config( ) -> warehouse.SearchConfig: """Post-rpc interceptor for create_search_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_search_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_create_search_config` interceptor runs + before the `post_create_search_config_with_metadata` interceptor. """ return response + def post_create_search_config_with_metadata( + self, + response: warehouse.SearchConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_search_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_create_search_config_with_metadata` + interceptor in new development instead of the `post_create_search_config` interceptor. + When both interceptors are used, this `post_create_search_config_with_metadata` interceptor runs after the + `post_create_search_config` interceptor. The (possibly modified) response returned by + `post_create_search_config` will be passed to + `post_create_search_config_with_metadata`. + """ + return response, metadata + def pre_delete_annotation( self, request: warehouse.DeleteAnnotationRequest, @@ -460,12 +598,35 @@ def post_delete_asset( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_delete_asset` interceptor runs + before the `post_delete_asset_with_metadata` interceptor. """ return response + def post_delete_asset_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_delete_asset_with_metadata` + interceptor in new development instead of the `post_delete_asset` interceptor. + When both interceptors are used, this `post_delete_asset_with_metadata` interceptor runs after the + `post_delete_asset` interceptor. The (possibly modified) response returned by + `post_delete_asset` will be passed to + `post_delete_asset_with_metadata`. + """ + return response, metadata + def pre_delete_corpus( self, request: warehouse.DeleteCorpusRequest, @@ -525,12 +686,37 @@ def post_generate_hls_uri( ) -> warehouse.GenerateHlsUriResponse: """Post-rpc interceptor for generate_hls_uri - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_generate_hls_uri_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_generate_hls_uri` interceptor runs + before the `post_generate_hls_uri_with_metadata` interceptor. """ return response + def post_generate_hls_uri_with_metadata( + self, + response: warehouse.GenerateHlsUriResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.GenerateHlsUriResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for generate_hls_uri + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_generate_hls_uri_with_metadata` + interceptor in new development instead of the `post_generate_hls_uri` interceptor. + When both interceptors are used, this `post_generate_hls_uri_with_metadata` interceptor runs after the + `post_generate_hls_uri` interceptor. The (possibly modified) response returned by + `post_generate_hls_uri` will be passed to + `post_generate_hls_uri_with_metadata`. + """ + return response, metadata + def pre_get_annotation( self, request: warehouse.GetAnnotationRequest, @@ -548,12 +734,35 @@ def post_get_annotation( ) -> warehouse.Annotation: """Post-rpc interceptor for get_annotation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_annotation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_annotation` interceptor runs + before the `post_get_annotation_with_metadata` interceptor. """ return response + def post_get_annotation_with_metadata( + self, + response: warehouse.Annotation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Annotation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_annotation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_annotation_with_metadata` + interceptor in new development instead of the `post_get_annotation` interceptor. + When both interceptors are used, this `post_get_annotation_with_metadata` interceptor runs after the + `post_get_annotation` interceptor. The (possibly modified) response returned by + `post_get_annotation` will be passed to + `post_get_annotation_with_metadata`. + """ + return response, metadata + def pre_get_asset( self, request: warehouse.GetAssetRequest, @@ -569,12 +778,35 @@ def pre_get_asset( def post_get_asset(self, response: warehouse.Asset) -> warehouse.Asset: """Post-rpc interceptor for get_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_asset` interceptor runs + before the `post_get_asset_with_metadata` interceptor. """ return response + def post_get_asset_with_metadata( + self, + response: warehouse.Asset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Asset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_asset_with_metadata` + interceptor in new development instead of the `post_get_asset` interceptor. + When both interceptors are used, this `post_get_asset_with_metadata` interceptor runs after the + `post_get_asset` interceptor. The (possibly modified) response returned by + `post_get_asset` will be passed to + `post_get_asset_with_metadata`. + """ + return response, metadata + def pre_get_corpus( self, request: warehouse.GetCorpusRequest, @@ -590,12 +822,35 @@ def pre_get_corpus( def post_get_corpus(self, response: warehouse.Corpus) -> warehouse.Corpus: """Post-rpc interceptor for get_corpus - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_corpus_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_corpus` interceptor runs + before the `post_get_corpus_with_metadata` interceptor. """ return response + def post_get_corpus_with_metadata( + self, + response: warehouse.Corpus, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Corpus, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_corpus + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_corpus_with_metadata` + interceptor in new development instead of the `post_get_corpus` interceptor. + When both interceptors are used, this `post_get_corpus_with_metadata` interceptor runs after the + `post_get_corpus` interceptor. The (possibly modified) response returned by + `post_get_corpus` will be passed to + `post_get_corpus_with_metadata`. + """ + return response, metadata + def pre_get_data_schema( self, request: warehouse.GetDataSchemaRequest, @@ -613,12 +868,35 @@ def post_get_data_schema( ) -> warehouse.DataSchema: """Post-rpc interceptor for get_data_schema - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_data_schema_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_data_schema` interceptor runs + before the `post_get_data_schema_with_metadata` interceptor. """ return response + def post_get_data_schema_with_metadata( + self, + response: warehouse.DataSchema, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.DataSchema, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_data_schema + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_data_schema_with_metadata` + interceptor in new development instead of the `post_get_data_schema` interceptor. + When both interceptors are used, this `post_get_data_schema_with_metadata` interceptor runs after the + `post_get_data_schema` interceptor. The (possibly modified) response returned by + `post_get_data_schema` will be passed to + `post_get_data_schema_with_metadata`. + """ + return response, metadata + def pre_get_search_config( self, request: warehouse.GetSearchConfigRequest, @@ -638,12 +916,35 @@ def post_get_search_config( ) -> warehouse.SearchConfig: """Post-rpc interceptor for get_search_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_search_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_get_search_config` interceptor runs + before the `post_get_search_config_with_metadata` interceptor. """ return response + def post_get_search_config_with_metadata( + self, + response: warehouse.SearchConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_search_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_get_search_config_with_metadata` + interceptor in new development instead of the `post_get_search_config` interceptor. + When both interceptors are used, this `post_get_search_config_with_metadata` interceptor runs after the + `post_get_search_config` interceptor. The (possibly modified) response returned by + `post_get_search_config` will be passed to + `post_get_search_config_with_metadata`. + """ + return response, metadata + def pre_list_annotations( self, request: warehouse.ListAnnotationsRequest, @@ -663,12 +964,37 @@ def post_list_annotations( ) -> warehouse.ListAnnotationsResponse: """Post-rpc interceptor for list_annotations - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_annotations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_annotations` interceptor runs + before the `post_list_annotations_with_metadata` interceptor. """ return response + def post_list_annotations_with_metadata( + self, + response: warehouse.ListAnnotationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListAnnotationsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_annotations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_annotations_with_metadata` + interceptor in new development instead of the `post_list_annotations` interceptor. + When both interceptors are used, this `post_list_annotations_with_metadata` interceptor runs after the + `post_list_annotations` interceptor. The (possibly modified) response returned by + `post_list_annotations` will be passed to + `post_list_annotations_with_metadata`. + """ + return response, metadata + def pre_list_assets( self, request: warehouse.ListAssetsRequest, @@ -686,12 +1012,35 @@ def post_list_assets( ) -> warehouse.ListAssetsResponse: """Post-rpc interceptor for list_assets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_assets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_assets` interceptor runs + before the `post_list_assets_with_metadata` interceptor. """ return response + def post_list_assets_with_metadata( + self, + response: warehouse.ListAssetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.ListAssetsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_assets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_assets_with_metadata` + interceptor in new development instead of the `post_list_assets` interceptor. + When both interceptors are used, this `post_list_assets_with_metadata` interceptor runs after the + `post_list_assets` interceptor. The (possibly modified) response returned by + `post_list_assets` will be passed to + `post_list_assets_with_metadata`. + """ + return response, metadata + def pre_list_corpora( self, request: warehouse.ListCorporaRequest, @@ -709,12 +1058,35 @@ def post_list_corpora( ) -> warehouse.ListCorporaResponse: """Post-rpc interceptor for list_corpora - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_corpora_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_corpora` interceptor runs + before the `post_list_corpora_with_metadata` interceptor. """ return response + def post_list_corpora_with_metadata( + self, + response: warehouse.ListCorporaResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.ListCorporaResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_corpora + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_corpora_with_metadata` + interceptor in new development instead of the `post_list_corpora` interceptor. + When both interceptors are used, this `post_list_corpora_with_metadata` interceptor runs after the + `post_list_corpora` interceptor. The (possibly modified) response returned by + `post_list_corpora` will be passed to + `post_list_corpora_with_metadata`. + """ + return response, metadata + def pre_list_data_schemas( self, request: warehouse.ListDataSchemasRequest, @@ -734,12 +1106,37 @@ def post_list_data_schemas( ) -> warehouse.ListDataSchemasResponse: """Post-rpc interceptor for list_data_schemas - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_data_schemas_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_data_schemas` interceptor runs + before the `post_list_data_schemas_with_metadata` interceptor. """ return response + def post_list_data_schemas_with_metadata( + self, + response: warehouse.ListDataSchemasResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListDataSchemasResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_data_schemas + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_data_schemas_with_metadata` + interceptor in new development instead of the `post_list_data_schemas` interceptor. + When both interceptors are used, this `post_list_data_schemas_with_metadata` interceptor runs after the + `post_list_data_schemas` interceptor. The (possibly modified) response returned by + `post_list_data_schemas` will be passed to + `post_list_data_schemas_with_metadata`. + """ + return response, metadata + def pre_list_search_configs( self, request: warehouse.ListSearchConfigsRequest, @@ -759,12 +1156,37 @@ def post_list_search_configs( ) -> warehouse.ListSearchConfigsResponse: """Post-rpc interceptor for list_search_configs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_search_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_list_search_configs` interceptor runs + before the `post_list_search_configs_with_metadata` interceptor. """ return response + def post_list_search_configs_with_metadata( + self, + response: warehouse.ListSearchConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + warehouse.ListSearchConfigsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_search_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_list_search_configs_with_metadata` + interceptor in new development instead of the `post_list_search_configs` interceptor. + When both interceptors are used, this `post_list_search_configs_with_metadata` interceptor runs after the + `post_list_search_configs` interceptor. The (possibly modified) response returned by + `post_list_search_configs` will be passed to + `post_list_search_configs_with_metadata`. + """ + return response, metadata + def pre_search_assets( self, request: warehouse.SearchAssetsRequest, @@ -782,12 +1204,35 @@ def post_search_assets( ) -> warehouse.SearchAssetsResponse: """Post-rpc interceptor for search_assets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_search_assets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_search_assets` interceptor runs + before the `post_search_assets_with_metadata` interceptor. """ return response + def post_search_assets_with_metadata( + self, + response: warehouse.SearchAssetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchAssetsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for search_assets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_search_assets_with_metadata` + interceptor in new development instead of the `post_search_assets` interceptor. + When both interceptors are used, this `post_search_assets_with_metadata` interceptor runs after the + `post_search_assets` interceptor. The (possibly modified) response returned by + `post_search_assets` will be passed to + `post_search_assets_with_metadata`. + """ + return response, metadata + def pre_update_annotation( self, request: warehouse.UpdateAnnotationRequest, @@ -807,12 +1252,35 @@ def post_update_annotation( ) -> warehouse.Annotation: """Post-rpc interceptor for update_annotation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_annotation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_annotation` interceptor runs + before the `post_update_annotation_with_metadata` interceptor. """ return response + def post_update_annotation_with_metadata( + self, + response: warehouse.Annotation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Annotation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_annotation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_annotation_with_metadata` + interceptor in new development instead of the `post_update_annotation` interceptor. + When both interceptors are used, this `post_update_annotation_with_metadata` interceptor runs after the + `post_update_annotation` interceptor. The (possibly modified) response returned by + `post_update_annotation` will be passed to + `post_update_annotation_with_metadata`. + """ + return response, metadata + def pre_update_asset( self, request: warehouse.UpdateAssetRequest, @@ -828,12 +1296,35 @@ def pre_update_asset( def post_update_asset(self, response: warehouse.Asset) -> warehouse.Asset: """Post-rpc interceptor for update_asset - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_asset_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_asset` interceptor runs + before the `post_update_asset_with_metadata` interceptor. """ return response + def post_update_asset_with_metadata( + self, + response: warehouse.Asset, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Asset, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_asset + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_asset_with_metadata` + interceptor in new development instead of the `post_update_asset` interceptor. + When both interceptors are used, this `post_update_asset_with_metadata` interceptor runs after the + `post_update_asset` interceptor. The (possibly modified) response returned by + `post_update_asset` will be passed to + `post_update_asset_with_metadata`. + """ + return response, metadata + def pre_update_corpus( self, request: warehouse.UpdateCorpusRequest, @@ -849,12 +1340,35 @@ def pre_update_corpus( def post_update_corpus(self, response: warehouse.Corpus) -> warehouse.Corpus: """Post-rpc interceptor for update_corpus - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_corpus_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_corpus` interceptor runs + before the `post_update_corpus_with_metadata` interceptor. """ return response + def post_update_corpus_with_metadata( + self, + response: warehouse.Corpus, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.Corpus, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_corpus + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_corpus_with_metadata` + interceptor in new development instead of the `post_update_corpus` interceptor. + When both interceptors are used, this `post_update_corpus_with_metadata` interceptor runs after the + `post_update_corpus` interceptor. The (possibly modified) response returned by + `post_update_corpus` will be passed to + `post_update_corpus_with_metadata`. + """ + return response, metadata + def pre_update_data_schema( self, request: warehouse.UpdateDataSchemaRequest, @@ -874,12 +1388,35 @@ def post_update_data_schema( ) -> warehouse.DataSchema: """Post-rpc interceptor for update_data_schema - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_data_schema_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_data_schema` interceptor runs + before the `post_update_data_schema_with_metadata` interceptor. """ return response + def post_update_data_schema_with_metadata( + self, + response: warehouse.DataSchema, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.DataSchema, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_data_schema + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_data_schema_with_metadata` + interceptor in new development instead of the `post_update_data_schema` interceptor. + When both interceptors are used, this `post_update_data_schema_with_metadata` interceptor runs after the + `post_update_data_schema` interceptor. The (possibly modified) response returned by + `post_update_data_schema` will be passed to + `post_update_data_schema_with_metadata`. + """ + return response, metadata + def pre_update_search_config( self, request: warehouse.UpdateSearchConfigRequest, @@ -899,12 +1436,35 @@ def post_update_search_config( ) -> warehouse.SearchConfig: """Post-rpc interceptor for update_search_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_search_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Warehouse server but before - it is returned to user code. + it is returned to user code. This `post_update_search_config` interceptor runs + before the `post_update_search_config_with_metadata` interceptor. """ return response + def post_update_search_config_with_metadata( + self, + response: warehouse.SearchConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[warehouse.SearchConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_search_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Warehouse server but before it is returned to user code. + + We recommend only using this `post_update_search_config_with_metadata` + interceptor in new development instead of the `post_update_search_config` interceptor. + When both interceptors are used, this `post_update_search_config_with_metadata` interceptor runs after the + `post_update_search_config` interceptor. The (possibly modified) response returned by + `post_update_search_config` will be passed to + `post_update_search_config_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -1397,6 +1957,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_clip_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_clip_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1548,6 +2112,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_annotation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_annotation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1704,6 +2272,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1855,6 +2427,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_corpus(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_corpus_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2006,6 +2582,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_data_schema(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_data_schema_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2158,6 +2738,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_search_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_search_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2410,6 +2994,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2894,6 +3482,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_generate_hls_uri(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_generate_hls_uri_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3044,6 +3636,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_annotation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_annotation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3191,6 +3787,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3337,6 +3937,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_corpus(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_corpus_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3484,6 +4088,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_data_schema(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_data_schema_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3631,6 +4239,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_search_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_search_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3794,6 +4406,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_annotations(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_annotations_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3938,6 +4554,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_assets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_assets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4080,6 +4700,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_corpora(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_corpora_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4224,6 +4848,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_data_schemas(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_data_schemas_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4371,6 +4999,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_search_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_search_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4523,6 +5155,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_search_assets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_search_assets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4675,6 +5311,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_annotation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_annotation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4830,6 +5470,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_asset(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_asset_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4984,6 +5628,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_corpus(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_corpus_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5135,6 +5783,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_data_schema(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_data_schema_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5287,6 +5939,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_search_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_search_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-visionai/samples/generated_samples/snippet_metadata_google.cloud.visionai.v1.json b/packages/google-cloud-visionai/samples/generated_samples/snippet_metadata_google.cloud.visionai.v1.json index b5517247a5ad..55144efe90c6 100644 --- a/packages/google-cloud-visionai/samples/generated_samples/snippet_metadata_google.cloud.visionai.v1.json +++ b/packages/google-cloud-visionai/samples/generated_samples/snippet_metadata_google.cloud.visionai.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-visionai", - "version": "0.1.6" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-visionai/samples/generated_samples/snippet_metadata_google.cloud.visionai.v1alpha1.json b/packages/google-cloud-visionai/samples/generated_samples/snippet_metadata_google.cloud.visionai.v1alpha1.json index 03dae8afc937..11704c120259 100644 --- a/packages/google-cloud-visionai/samples/generated_samples/snippet_metadata_google.cloud.visionai.v1alpha1.json +++ b/packages/google-cloud-visionai/samples/generated_samples/snippet_metadata_google.cloud.visionai.v1alpha1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-visionai", - "version": "0.1.6" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_app_platform.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_app_platform.py index ba5aa943954c..5731550db605 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_app_platform.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_app_platform.py @@ -79,6 +79,13 @@ ) from google.cloud.visionai_v1.types import annotations, common, platform +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -318,6 +325,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = AppPlatformClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = AppPlatformClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -17551,10 +17601,13 @@ def test_list_applications_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_applications" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_list_applications_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_applications" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListApplicationsRequest.pb( platform.ListApplicationsRequest() ) @@ -17580,6 +17633,7 @@ def test_list_applications_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListApplicationsResponse() + post_with_metadata.return_value = platform.ListApplicationsResponse(), metadata client.list_applications( request, @@ -17591,6 +17645,7 @@ def test_list_applications_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_application_rest_bad_request(request_type=platform.GetApplicationRequest): @@ -17681,10 +17736,13 @@ def test_get_application_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_get_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_get_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_get_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.GetApplicationRequest.pb(platform.GetApplicationRequest()) transcode.return_value = { "method": "post", @@ -17706,6 +17764,7 @@ def test_get_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.Application() + post_with_metadata.return_value = platform.Application(), metadata client.get_application( request, @@ -17717,6 +17776,7 @@ def test_get_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_application_rest_bad_request( @@ -18015,10 +18075,13 @@ def test_create_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_create_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_create_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_create_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.CreateApplicationRequest.pb( platform.CreateApplicationRequest() ) @@ -18042,6 +18105,7 @@ def test_create_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_application( request, @@ -18053,6 +18117,7 @@ def test_create_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_application_rest_bad_request( @@ -18359,10 +18424,13 @@ def test_update_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_update_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateApplicationRequest.pb( platform.UpdateApplicationRequest() ) @@ -18386,6 +18454,7 @@ def test_update_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_application( request, @@ -18397,6 +18466,7 @@ def test_update_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_application_rest_bad_request( @@ -18477,10 +18547,13 @@ def test_delete_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_delete_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_delete_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_delete_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeleteApplicationRequest.pb( platform.DeleteApplicationRequest() ) @@ -18504,6 +18577,7 @@ def test_delete_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_application( request, @@ -18515,6 +18589,7 @@ def test_delete_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_deploy_application_rest_bad_request( @@ -18595,10 +18670,13 @@ def test_deploy_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_deploy_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_deploy_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_deploy_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeployApplicationRequest.pb( platform.DeployApplicationRequest() ) @@ -18622,6 +18700,7 @@ def test_deploy_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.deploy_application( request, @@ -18633,6 +18712,7 @@ def test_deploy_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_undeploy_application_rest_bad_request( @@ -18713,10 +18793,13 @@ def test_undeploy_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_undeploy_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_undeploy_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_undeploy_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UndeployApplicationRequest.pb( platform.UndeployApplicationRequest() ) @@ -18740,6 +18823,7 @@ def test_undeploy_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.undeploy_application( request, @@ -18751,6 +18835,7 @@ def test_undeploy_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_add_application_stream_input_rest_bad_request( @@ -18831,10 +18916,14 @@ def test_add_application_stream_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_add_application_stream_input" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_add_application_stream_input_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_add_application_stream_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.AddApplicationStreamInputRequest.pb( platform.AddApplicationStreamInputRequest() ) @@ -18858,6 +18947,7 @@ def test_add_application_stream_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.add_application_stream_input( request, @@ -18869,6 +18959,7 @@ def test_add_application_stream_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_remove_application_stream_input_rest_bad_request( @@ -18949,10 +19040,14 @@ def test_remove_application_stream_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_remove_application_stream_input" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_remove_application_stream_input_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_remove_application_stream_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.RemoveApplicationStreamInputRequest.pb( platform.RemoveApplicationStreamInputRequest() ) @@ -18976,6 +19071,7 @@ def test_remove_application_stream_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.remove_application_stream_input( request, @@ -18987,6 +19083,7 @@ def test_remove_application_stream_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_application_stream_input_rest_bad_request( @@ -19067,10 +19164,14 @@ def test_update_application_stream_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_application_stream_input" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_update_application_stream_input_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_application_stream_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateApplicationStreamInputRequest.pb( platform.UpdateApplicationStreamInputRequest() ) @@ -19094,6 +19195,7 @@ def test_update_application_stream_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_application_stream_input( request, @@ -19105,6 +19207,7 @@ def test_update_application_stream_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_instances_rest_bad_request(request_type=platform.ListInstancesRequest): @@ -19189,10 +19292,13 @@ def test_list_instances_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_instances" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_list_instances_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_instances" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListInstancesRequest.pb(platform.ListInstancesRequest()) transcode.return_value = { "method": "post", @@ -19216,6 +19322,7 @@ def test_list_instances_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListInstancesResponse() + post_with_metadata.return_value = platform.ListInstancesResponse(), metadata client.list_instances( request, @@ -19227,6 +19334,7 @@ def test_list_instances_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_instance_rest_bad_request(request_type=platform.GetInstanceRequest): @@ -19321,10 +19429,13 @@ def test_get_instance_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_get_instance" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_get_instance_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_get_instance" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.GetInstanceRequest.pb(platform.GetInstanceRequest()) transcode.return_value = { "method": "post", @@ -19346,6 +19457,7 @@ def test_get_instance_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.Instance() + post_with_metadata.return_value = platform.Instance(), metadata client.get_instance( request, @@ -19357,6 +19469,7 @@ def test_get_instance_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_application_instances_rest_bad_request( @@ -19437,10 +19550,14 @@ def test_create_application_instances_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_create_application_instances" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_create_application_instances_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_create_application_instances" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.CreateApplicationInstancesRequest.pb( platform.CreateApplicationInstancesRequest() ) @@ -19464,6 +19581,7 @@ def test_create_application_instances_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_application_instances( request, @@ -19475,6 +19593,7 @@ def test_create_application_instances_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_application_instances_rest_bad_request( @@ -19555,10 +19674,14 @@ def test_delete_application_instances_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_delete_application_instances" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_delete_application_instances_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_delete_application_instances" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeleteApplicationInstancesRequest.pb( platform.DeleteApplicationInstancesRequest() ) @@ -19582,6 +19705,7 @@ def test_delete_application_instances_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_application_instances( request, @@ -19593,6 +19717,7 @@ def test_delete_application_instances_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_application_instances_rest_bad_request( @@ -19673,10 +19798,14 @@ def test_update_application_instances_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_application_instances" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_update_application_instances_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_application_instances" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateApplicationInstancesRequest.pb( platform.UpdateApplicationInstancesRequest() ) @@ -19700,6 +19829,7 @@ def test_update_application_instances_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_application_instances( request, @@ -19711,6 +19841,7 @@ def test_update_application_instances_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_drafts_rest_bad_request(request_type=platform.ListDraftsRequest): @@ -19795,10 +19926,13 @@ def test_list_drafts_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_drafts" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_list_drafts_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_drafts" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListDraftsRequest.pb(platform.ListDraftsRequest()) transcode.return_value = { "method": "post", @@ -19822,6 +19956,7 @@ def test_list_drafts_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListDraftsResponse() + post_with_metadata.return_value = platform.ListDraftsResponse(), metadata client.list_drafts( request, @@ -19833,6 +19968,7 @@ def test_list_drafts_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_draft_rest_bad_request(request_type=platform.GetDraftRequest): @@ -19923,10 +20059,13 @@ def test_get_draft_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_get_draft" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_get_draft_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_get_draft" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.GetDraftRequest.pb(platform.GetDraftRequest()) transcode.return_value = { "method": "post", @@ -19948,6 +20087,7 @@ def test_get_draft_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.Draft() + post_with_metadata.return_value = platform.Draft(), metadata client.get_draft( request, @@ -19959,6 +20099,7 @@ def test_get_draft_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_draft_rest_bad_request(request_type=platform.CreateDraftRequest): @@ -20242,10 +20383,13 @@ def test_create_draft_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_create_draft" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_create_draft_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_create_draft" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.CreateDraftRequest.pb(platform.CreateDraftRequest()) transcode.return_value = { "method": "post", @@ -20267,6 +20411,7 @@ def test_create_draft_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_draft( request, @@ -20278,6 +20423,7 @@ def test_create_draft_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_draft_rest_bad_request(request_type=platform.UpdateDraftRequest): @@ -20569,10 +20715,13 @@ def test_update_draft_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_draft" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_update_draft_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_draft" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateDraftRequest.pb(platform.UpdateDraftRequest()) transcode.return_value = { "method": "post", @@ -20594,6 +20743,7 @@ def test_update_draft_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_draft( request, @@ -20605,6 +20755,7 @@ def test_update_draft_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_draft_rest_bad_request(request_type=platform.DeleteDraftRequest): @@ -20687,10 +20838,13 @@ def test_delete_draft_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_delete_draft" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_delete_draft_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_delete_draft" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeleteDraftRequest.pb(platform.DeleteDraftRequest()) transcode.return_value = { "method": "post", @@ -20712,6 +20866,7 @@ def test_delete_draft_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_draft( request, @@ -20723,6 +20878,7 @@ def test_delete_draft_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_processors_rest_bad_request(request_type=platform.ListProcessorsRequest): @@ -20807,10 +20963,13 @@ def test_list_processors_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_processors" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_list_processors_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_processors" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListProcessorsRequest.pb(platform.ListProcessorsRequest()) transcode.return_value = { "method": "post", @@ -20834,6 +20993,7 @@ def test_list_processors_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListProcessorsResponse() + post_with_metadata.return_value = platform.ListProcessorsResponse(), metadata client.list_processors( request, @@ -20845,6 +21005,7 @@ def test_list_processors_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_prebuilt_processors_rest_bad_request( @@ -20926,10 +21087,14 @@ def test_list_prebuilt_processors_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_prebuilt_processors" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_list_prebuilt_processors_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_prebuilt_processors" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListPrebuiltProcessorsRequest.pb( platform.ListPrebuiltProcessorsRequest() ) @@ -20955,6 +21120,10 @@ def test_list_prebuilt_processors_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListPrebuiltProcessorsResponse() + post_with_metadata.return_value = ( + platform.ListPrebuiltProcessorsResponse(), + metadata, + ) client.list_prebuilt_processors( request, @@ -20966,6 +21135,7 @@ def test_list_prebuilt_processors_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_processor_rest_bad_request(request_type=platform.GetProcessorRequest): @@ -21074,10 +21244,13 @@ def test_get_processor_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_get_processor" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_get_processor_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_get_processor" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.GetProcessorRequest.pb(platform.GetProcessorRequest()) transcode.return_value = { "method": "post", @@ -21099,6 +21272,7 @@ def test_get_processor_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.Processor() + post_with_metadata.return_value = platform.Processor(), metadata client.get_processor( request, @@ -21110,6 +21284,7 @@ def test_get_processor_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_processor_rest_bad_request( @@ -21321,10 +21496,13 @@ def test_create_processor_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_create_processor" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_create_processor_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_create_processor" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.CreateProcessorRequest.pb( platform.CreateProcessorRequest() ) @@ -21348,6 +21526,7 @@ def test_create_processor_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_processor( request, @@ -21359,6 +21538,7 @@ def test_create_processor_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_processor_rest_bad_request( @@ -21574,10 +21754,13 @@ def test_update_processor_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_processor" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_update_processor_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_processor" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateProcessorRequest.pb( platform.UpdateProcessorRequest() ) @@ -21601,6 +21784,7 @@ def test_update_processor_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_processor( request, @@ -21612,6 +21796,7 @@ def test_update_processor_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_processor_rest_bad_request( @@ -21692,10 +21877,13 @@ def test_delete_processor_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_delete_processor" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_delete_processor_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_delete_processor" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeleteProcessorRequest.pb( platform.DeleteProcessorRequest() ) @@ -21719,6 +21907,7 @@ def test_delete_processor_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_processor( request, @@ -21730,6 +21919,7 @@ def test_delete_processor_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_operation_rest_bad_request( diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_health_check_service.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_health_check_service.py index f5e23a74b0a9..caf717304d5d 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_health_check_service.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_health_check_service.py @@ -64,6 +64,13 @@ ) from google.cloud.visionai_v1.types import health_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -335,6 +342,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = HealthCheckServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = HealthCheckServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -1645,10 +1695,13 @@ def test_health_check_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.HealthCheckServiceRestInterceptor, "post_health_check" ) as post, mock.patch.object( + transports.HealthCheckServiceRestInterceptor, "post_health_check_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.HealthCheckServiceRestInterceptor, "pre_health_check" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = health_service.HealthCheckRequest.pb( health_service.HealthCheckRequest() ) @@ -1674,6 +1727,7 @@ def test_health_check_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = health_service.HealthCheckResponse() + post_with_metadata.return_value = health_service.HealthCheckResponse(), metadata client.health_check( request, @@ -1685,6 +1739,7 @@ def test_health_check_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_operation_rest_bad_request( diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_live_video_analytics.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_live_video_analytics.py index c6edd81d5f4a..acfe6b69ab2b 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_live_video_analytics.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_live_video_analytics.py @@ -77,6 +77,13 @@ ) from google.cloud.visionai_v1.types import common, lva, lva_resources, lva_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -348,6 +355,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = LiveVideoAnalyticsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = LiveVideoAnalyticsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -12830,10 +12880,14 @@ def test_list_public_operators_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_list_public_operators" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_list_public_operators_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_list_public_operators" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.ListPublicOperatorsRequest.pb( lva_service.ListPublicOperatorsRequest() ) @@ -12859,6 +12913,10 @@ def test_list_public_operators_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_service.ListPublicOperatorsResponse() + post_with_metadata.return_value = ( + lva_service.ListPublicOperatorsResponse(), + metadata, + ) client.list_public_operators( request, @@ -12870,6 +12928,7 @@ def test_list_public_operators_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_resolve_operator_info_rest_bad_request( @@ -12951,10 +13010,14 @@ def test_resolve_operator_info_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_resolve_operator_info" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_resolve_operator_info_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_resolve_operator_info" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.ResolveOperatorInfoRequest.pb( lva_service.ResolveOperatorInfoRequest() ) @@ -12980,6 +13043,10 @@ def test_resolve_operator_info_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_service.ResolveOperatorInfoResponse() + post_with_metadata.return_value = ( + lva_service.ResolveOperatorInfoResponse(), + metadata, + ) client.resolve_operator_info( request, @@ -12991,6 +13058,7 @@ def test_resolve_operator_info_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_operators_rest_bad_request(request_type=lva_service.ListOperatorsRequest): @@ -13075,10 +13143,14 @@ def test_list_operators_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_list_operators" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_list_operators_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_list_operators" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.ListOperatorsRequest.pb( lva_service.ListOperatorsRequest() ) @@ -13104,6 +13176,7 @@ def test_list_operators_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_service.ListOperatorsResponse() + post_with_metadata.return_value = lva_service.ListOperatorsResponse(), metadata client.list_operators( request, @@ -13115,6 +13188,7 @@ def test_list_operators_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_operator_rest_bad_request(request_type=lva_service.GetOperatorRequest): @@ -13199,10 +13273,13 @@ def test_get_operator_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_get_operator" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, "post_get_operator_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_get_operator" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.GetOperatorRequest.pb(lva_service.GetOperatorRequest()) transcode.return_value = { "method": "post", @@ -13224,6 +13301,7 @@ def test_get_operator_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_resources.Operator() + post_with_metadata.return_value = lva_resources.Operator(), metadata client.get_operator( request, @@ -13235,6 +13313,7 @@ def test_get_operator_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_operator_rest_bad_request( @@ -13416,10 +13495,14 @@ def test_create_operator_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_create_operator" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_create_operator_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_create_operator" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.CreateOperatorRequest.pb( lva_service.CreateOperatorRequest() ) @@ -13443,6 +13526,7 @@ def test_create_operator_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_operator( request, @@ -13454,6 +13538,7 @@ def test_create_operator_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_operator_rest_bad_request( @@ -13639,10 +13724,14 @@ def test_update_operator_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_update_operator" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_update_operator_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_update_operator" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.UpdateOperatorRequest.pb( lva_service.UpdateOperatorRequest() ) @@ -13666,6 +13755,7 @@ def test_update_operator_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_operator( request, @@ -13677,6 +13767,7 @@ def test_update_operator_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_operator_rest_bad_request( @@ -13757,10 +13848,14 @@ def test_delete_operator_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_delete_operator" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_delete_operator_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_delete_operator" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.DeleteOperatorRequest.pb( lva_service.DeleteOperatorRequest() ) @@ -13784,6 +13879,7 @@ def test_delete_operator_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_operator( request, @@ -13795,6 +13891,7 @@ def test_delete_operator_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_analyses_rest_bad_request(request_type=lva_service.ListAnalysesRequest): @@ -13879,10 +13976,13 @@ def test_list_analyses_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_list_analyses" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, "post_list_analyses_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_list_analyses" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.ListAnalysesRequest.pb( lva_service.ListAnalysesRequest() ) @@ -13908,6 +14008,7 @@ def test_list_analyses_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_service.ListAnalysesResponse() + post_with_metadata.return_value = lva_service.ListAnalysesResponse(), metadata client.list_analyses( request, @@ -13919,6 +14020,7 @@ def test_list_analyses_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_analysis_rest_bad_request(request_type=lva_service.GetAnalysisRequest): @@ -14007,10 +14109,13 @@ def test_get_analysis_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_get_analysis" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, "post_get_analysis_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_get_analysis" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.GetAnalysisRequest.pb(lva_service.GetAnalysisRequest()) transcode.return_value = { "method": "post", @@ -14032,6 +14137,7 @@ def test_get_analysis_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_resources.Analysis() + post_with_metadata.return_value = lva_resources.Analysis(), metadata client.get_analysis( request, @@ -14043,6 +14149,7 @@ def test_get_analysis_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_analysis_rest_bad_request( @@ -14214,10 +14321,14 @@ def test_create_analysis_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_create_analysis" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_create_analysis_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_create_analysis" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.CreateAnalysisRequest.pb( lva_service.CreateAnalysisRequest() ) @@ -14241,6 +14352,7 @@ def test_create_analysis_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_analysis( request, @@ -14252,6 +14364,7 @@ def test_create_analysis_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_analysis_rest_bad_request( @@ -14431,10 +14544,14 @@ def test_update_analysis_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_update_analysis" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_update_analysis_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_update_analysis" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.UpdateAnalysisRequest.pb( lva_service.UpdateAnalysisRequest() ) @@ -14458,6 +14575,7 @@ def test_update_analysis_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_analysis( request, @@ -14469,6 +14587,7 @@ def test_update_analysis_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_analysis_rest_bad_request( @@ -14553,10 +14672,14 @@ def test_delete_analysis_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_delete_analysis" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_delete_analysis_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_delete_analysis" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.DeleteAnalysisRequest.pb( lva_service.DeleteAnalysisRequest() ) @@ -14580,6 +14703,7 @@ def test_delete_analysis_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_analysis( request, @@ -14591,6 +14715,7 @@ def test_delete_analysis_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_processes_rest_bad_request(request_type=lva_service.ListProcessesRequest): @@ -14675,10 +14800,14 @@ def test_list_processes_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_list_processes" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_list_processes_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_list_processes" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.ListProcessesRequest.pb( lva_service.ListProcessesRequest() ) @@ -14704,6 +14833,7 @@ def test_list_processes_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_service.ListProcessesResponse() + post_with_metadata.return_value = lva_service.ListProcessesResponse(), metadata client.list_processes( request, @@ -14715,6 +14845,7 @@ def test_list_processes_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_process_rest_bad_request(request_type=lva_service.GetProcessRequest): @@ -14813,10 +14944,13 @@ def test_get_process_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_get_process" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, "post_get_process_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_get_process" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.GetProcessRequest.pb(lva_service.GetProcessRequest()) transcode.return_value = { "method": "post", @@ -14838,6 +14972,7 @@ def test_get_process_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_resources.Process() + post_with_metadata.return_value = lva_resources.Process(), metadata client.get_process( request, @@ -14849,6 +14984,7 @@ def test_get_process_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_process_rest_bad_request(request_type=lva_service.CreateProcessRequest): @@ -15009,10 +15145,14 @@ def test_create_process_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_create_process" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_create_process_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_create_process" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.CreateProcessRequest.pb( lva_service.CreateProcessRequest() ) @@ -15036,6 +15176,7 @@ def test_create_process_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_process( request, @@ -15047,6 +15188,7 @@ def test_create_process_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_process_rest_bad_request(request_type=lva_service.UpdateProcessRequest): @@ -15215,10 +15357,14 @@ def test_update_process_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_update_process" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_update_process_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_update_process" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.UpdateProcessRequest.pb( lva_service.UpdateProcessRequest() ) @@ -15242,6 +15388,7 @@ def test_update_process_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_process( request, @@ -15253,6 +15400,7 @@ def test_update_process_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_process_rest_bad_request(request_type=lva_service.DeleteProcessRequest): @@ -15335,10 +15483,14 @@ def test_delete_process_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_delete_process" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_delete_process_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_delete_process" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.DeleteProcessRequest.pb( lva_service.DeleteProcessRequest() ) @@ -15362,6 +15514,7 @@ def test_delete_process_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_process( request, @@ -15373,6 +15526,7 @@ def test_delete_process_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_batch_run_process_rest_bad_request( @@ -15453,10 +15607,14 @@ def test_batch_run_process_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_batch_run_process" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_batch_run_process_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_batch_run_process" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.BatchRunProcessRequest.pb( lva_service.BatchRunProcessRequest() ) @@ -15480,6 +15638,7 @@ def test_batch_run_process_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.batch_run_process( request, @@ -15491,6 +15650,7 @@ def test_batch_run_process_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_operation_rest_bad_request( diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_streaming_service.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_streaming_service.py index b8b8816d3d45..b502db85b4ce 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_streaming_service.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_streaming_service.py @@ -67,6 +67,13 @@ ) from google.cloud.visionai_v1.types import streaming_resources, streaming_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -326,6 +333,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = StreamingServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = StreamingServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -2879,10 +2929,13 @@ def test_acquire_lease_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamingServiceRestInterceptor, "post_acquire_lease" ) as post, mock.patch.object( + transports.StreamingServiceRestInterceptor, "post_acquire_lease_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamingServiceRestInterceptor, "pre_acquire_lease" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streaming_service.AcquireLeaseRequest.pb( streaming_service.AcquireLeaseRequest() ) @@ -2906,6 +2959,7 @@ def test_acquire_lease_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streaming_service.Lease() + post_with_metadata.return_value = streaming_service.Lease(), metadata client.acquire_lease( request, @@ -2917,6 +2971,7 @@ def test_acquire_lease_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_renew_lease_rest_bad_request(request_type=streaming_service.RenewLeaseRequest): @@ -3009,10 +3064,13 @@ def test_renew_lease_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamingServiceRestInterceptor, "post_renew_lease" ) as post, mock.patch.object( + transports.StreamingServiceRestInterceptor, "post_renew_lease_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamingServiceRestInterceptor, "pre_renew_lease" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streaming_service.RenewLeaseRequest.pb( streaming_service.RenewLeaseRequest() ) @@ -3036,6 +3094,7 @@ def test_renew_lease_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streaming_service.Lease() + post_with_metadata.return_value = streaming_service.Lease(), metadata client.renew_lease( request, @@ -3047,6 +3106,7 @@ def test_renew_lease_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_release_lease_rest_bad_request( @@ -3132,10 +3192,13 @@ def test_release_lease_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamingServiceRestInterceptor, "post_release_lease" ) as post, mock.patch.object( + transports.StreamingServiceRestInterceptor, "post_release_lease_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamingServiceRestInterceptor, "pre_release_lease" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streaming_service.ReleaseLeaseRequest.pb( streaming_service.ReleaseLeaseRequest() ) @@ -3161,6 +3224,10 @@ def test_release_lease_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streaming_service.ReleaseLeaseResponse() + post_with_metadata.return_value = ( + streaming_service.ReleaseLeaseResponse(), + metadata, + ) client.release_lease( request, @@ -3172,6 +3239,7 @@ def test_release_lease_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_operation_rest_bad_request( diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_streams_service.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_streams_service.py index eca3241f3257..5ccd5068d79f 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_streams_service.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_streams_service.py @@ -78,6 +78,13 @@ ) from google.cloud.visionai_v1.types import common, streams_resources, streams_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -336,6 +343,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = StreamsServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = StreamsServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -15713,10 +15763,13 @@ def test_list_clusters_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_list_clusters" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_list_clusters_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_list_clusters" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.ListClustersRequest.pb( streams_service.ListClustersRequest() ) @@ -15742,6 +15795,10 @@ def test_list_clusters_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.ListClustersResponse() + post_with_metadata.return_value = ( + streams_service.ListClustersResponse(), + metadata, + ) client.list_clusters( request, @@ -15753,6 +15810,7 @@ def test_list_clusters_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_cluster_rest_bad_request(request_type=streams_service.GetClusterRequest): @@ -15841,10 +15899,13 @@ def test_get_cluster_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_cluster" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_get_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetClusterRequest.pb( streams_service.GetClusterRequest() ) @@ -15868,6 +15929,7 @@ def test_get_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = common.Cluster() + post_with_metadata.return_value = common.Cluster(), metadata client.get_cluster( request, @@ -15879,6 +15941,7 @@ def test_get_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_cluster_rest_bad_request( @@ -16036,10 +16099,13 @@ def test_create_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_create_cluster" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_create_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_create_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.CreateClusterRequest.pb( streams_service.CreateClusterRequest() ) @@ -16063,6 +16129,7 @@ def test_create_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_cluster( request, @@ -16074,6 +16141,7 @@ def test_create_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_cluster_rest_bad_request( @@ -16235,10 +16303,13 @@ def test_update_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_update_cluster" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_update_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_update_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.UpdateClusterRequest.pb( streams_service.UpdateClusterRequest() ) @@ -16262,6 +16333,7 @@ def test_update_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_cluster( request, @@ -16273,6 +16345,7 @@ def test_update_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_cluster_rest_bad_request( @@ -16353,10 +16426,13 @@ def test_delete_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_delete_cluster" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_delete_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_delete_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.DeleteClusterRequest.pb( streams_service.DeleteClusterRequest() ) @@ -16380,6 +16456,7 @@ def test_delete_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_cluster( request, @@ -16391,6 +16468,7 @@ def test_delete_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_streams_rest_bad_request(request_type=streams_service.ListStreamsRequest): @@ -16475,10 +16553,13 @@ def test_list_streams_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_list_streams" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_list_streams_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_list_streams" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.ListStreamsRequest.pb( streams_service.ListStreamsRequest() ) @@ -16504,6 +16585,10 @@ def test_list_streams_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.ListStreamsResponse() + post_with_metadata.return_value = ( + streams_service.ListStreamsResponse(), + metadata, + ) client.list_streams( request, @@ -16515,6 +16600,7 @@ def test_list_streams_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_stream_rest_bad_request(request_type=streams_service.GetStreamRequest): @@ -16607,10 +16693,13 @@ def test_get_stream_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_stream" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_get_stream_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_stream" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetStreamRequest.pb( streams_service.GetStreamRequest() ) @@ -16634,6 +16723,7 @@ def test_get_stream_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_resources.Stream() + post_with_metadata.return_value = streams_resources.Stream(), metadata client.get_stream( request, @@ -16645,6 +16735,7 @@ def test_get_stream_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_stream_rest_bad_request( @@ -16802,10 +16893,13 @@ def test_create_stream_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_create_stream" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_create_stream_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_create_stream" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.CreateStreamRequest.pb( streams_service.CreateStreamRequest() ) @@ -16829,6 +16923,7 @@ def test_create_stream_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_stream( request, @@ -16840,6 +16935,7 @@ def test_create_stream_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_stream_rest_bad_request( @@ -17005,10 +17101,13 @@ def test_update_stream_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_update_stream" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_update_stream_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_update_stream" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.UpdateStreamRequest.pb( streams_service.UpdateStreamRequest() ) @@ -17032,6 +17131,7 @@ def test_update_stream_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_stream( request, @@ -17043,6 +17143,7 @@ def test_update_stream_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_stream_rest_bad_request( @@ -17127,10 +17228,13 @@ def test_delete_stream_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_delete_stream" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_delete_stream_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_delete_stream" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.DeleteStreamRequest.pb( streams_service.DeleteStreamRequest() ) @@ -17154,6 +17258,7 @@ def test_delete_stream_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_stream( request, @@ -17165,6 +17270,7 @@ def test_delete_stream_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_stream_thumbnail_rest_bad_request( @@ -17249,10 +17355,14 @@ def test_get_stream_thumbnail_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_stream_thumbnail" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, + "post_get_stream_thumbnail_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_stream_thumbnail" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetStreamThumbnailRequest.pb( streams_service.GetStreamThumbnailRequest() ) @@ -17276,6 +17386,7 @@ def test_get_stream_thumbnail_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.get_stream_thumbnail( request, @@ -17287,6 +17398,7 @@ def test_get_stream_thumbnail_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_generate_stream_hls_token_rest_bad_request( @@ -17375,10 +17487,14 @@ def test_generate_stream_hls_token_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_generate_stream_hls_token" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, + "post_generate_stream_hls_token_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_generate_stream_hls_token" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GenerateStreamHlsTokenRequest.pb( streams_service.GenerateStreamHlsTokenRequest() ) @@ -17404,6 +17520,10 @@ def test_generate_stream_hls_token_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.GenerateStreamHlsTokenResponse() + post_with_metadata.return_value = ( + streams_service.GenerateStreamHlsTokenResponse(), + metadata, + ) client.generate_stream_hls_token( request, @@ -17415,6 +17535,7 @@ def test_generate_stream_hls_token_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_events_rest_bad_request(request_type=streams_service.ListEventsRequest): @@ -17499,10 +17620,13 @@ def test_list_events_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_list_events" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_list_events_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_list_events" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.ListEventsRequest.pb( streams_service.ListEventsRequest() ) @@ -17528,6 +17652,7 @@ def test_list_events_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.ListEventsResponse() + post_with_metadata.return_value = streams_service.ListEventsResponse(), metadata client.list_events( request, @@ -17539,6 +17664,7 @@ def test_list_events_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_event_rest_bad_request(request_type=streams_service.GetEventRequest): @@ -17627,10 +17753,13 @@ def test_get_event_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_event" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_get_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetEventRequest.pb( streams_service.GetEventRequest() ) @@ -17654,6 +17783,7 @@ def test_get_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_resources.Event() + post_with_metadata.return_value = streams_resources.Event(), metadata client.get_event( request, @@ -17665,6 +17795,7 @@ def test_get_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_event_rest_bad_request(request_type=streams_service.CreateEventRequest): @@ -17819,10 +17950,13 @@ def test_create_event_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_create_event" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_create_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_create_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.CreateEventRequest.pb( streams_service.CreateEventRequest() ) @@ -17846,6 +17980,7 @@ def test_create_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_event( request, @@ -17857,6 +17992,7 @@ def test_create_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_event_rest_bad_request(request_type=streams_service.UpdateEventRequest): @@ -18019,10 +18155,13 @@ def test_update_event_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_update_event" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_update_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_update_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.UpdateEventRequest.pb( streams_service.UpdateEventRequest() ) @@ -18046,6 +18185,7 @@ def test_update_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_event( request, @@ -18057,6 +18197,7 @@ def test_update_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_event_rest_bad_request(request_type=streams_service.DeleteEventRequest): @@ -18139,10 +18280,13 @@ def test_delete_event_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_delete_event" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_delete_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_delete_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.DeleteEventRequest.pb( streams_service.DeleteEventRequest() ) @@ -18166,6 +18310,7 @@ def test_delete_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_event( request, @@ -18177,6 +18322,7 @@ def test_delete_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_series_rest_bad_request(request_type=streams_service.ListSeriesRequest): @@ -18261,10 +18407,13 @@ def test_list_series_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_list_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_list_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_list_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.ListSeriesRequest.pb( streams_service.ListSeriesRequest() ) @@ -18290,6 +18439,7 @@ def test_list_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.ListSeriesResponse() + post_with_metadata.return_value = streams_service.ListSeriesResponse(), metadata client.list_series( request, @@ -18301,6 +18451,7 @@ def test_list_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_series_rest_bad_request(request_type=streams_service.GetSeriesRequest): @@ -18391,10 +18542,13 @@ def test_get_series_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_get_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetSeriesRequest.pb( streams_service.GetSeriesRequest() ) @@ -18418,6 +18572,7 @@ def test_get_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_resources.Series() + post_with_metadata.return_value = streams_resources.Series(), metadata client.get_series( request, @@ -18429,6 +18584,7 @@ def test_get_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_series_rest_bad_request( @@ -18585,10 +18741,13 @@ def test_create_series_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_create_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_create_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_create_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.CreateSeriesRequest.pb( streams_service.CreateSeriesRequest() ) @@ -18612,6 +18771,7 @@ def test_create_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_series( request, @@ -18623,6 +18783,7 @@ def test_create_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_series_rest_bad_request( @@ -18787,10 +18948,13 @@ def test_update_series_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_update_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_update_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_update_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.UpdateSeriesRequest.pb( streams_service.UpdateSeriesRequest() ) @@ -18814,6 +18978,7 @@ def test_update_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_series( request, @@ -18825,6 +18990,7 @@ def test_update_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_series_rest_bad_request( @@ -18909,10 +19075,13 @@ def test_delete_series_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_delete_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_delete_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_delete_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.DeleteSeriesRequest.pb( streams_service.DeleteSeriesRequest() ) @@ -18936,6 +19105,7 @@ def test_delete_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_series( request, @@ -18947,6 +19117,7 @@ def test_delete_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_materialize_channel_rest_bad_request( @@ -19103,10 +19274,14 @@ def test_materialize_channel_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_materialize_channel" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, + "post_materialize_channel_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_materialize_channel" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.MaterializeChannelRequest.pb( streams_service.MaterializeChannelRequest() ) @@ -19130,6 +19305,7 @@ def test_materialize_channel_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.materialize_channel( request, @@ -19141,6 +19317,7 @@ def test_materialize_channel_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_operation_rest_bad_request( diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_warehouse.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_warehouse.py index dc4f95362624..b1c698a526c5 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_warehouse.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1/test_warehouse.py @@ -81,6 +81,13 @@ ) from google.cloud.visionai_v1.types import warehouse +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -314,6 +321,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WarehouseClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WarehouseClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -38546,10 +38596,13 @@ def test_create_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateAssetRequest.pb(warehouse.CreateAssetRequest()) transcode.return_value = { "method": "post", @@ -38571,6 +38624,7 @@ def test_create_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Asset() + post_with_metadata.return_value = warehouse.Asset(), metadata client.create_asset( request, @@ -38582,6 +38636,7 @@ def test_create_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_asset_rest_bad_request(request_type=warehouse.UpdateAssetRequest): @@ -38742,10 +38797,13 @@ def test_update_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateAssetRequest.pb(warehouse.UpdateAssetRequest()) transcode.return_value = { "method": "post", @@ -38767,6 +38825,7 @@ def test_update_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Asset() + post_with_metadata.return_value = warehouse.Asset(), metadata client.update_asset( request, @@ -38778,6 +38837,7 @@ def test_update_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_asset_rest_bad_request(request_type=warehouse.GetAssetRequest): @@ -38862,10 +38922,13 @@ def test_get_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetAssetRequest.pb(warehouse.GetAssetRequest()) transcode.return_value = { "method": "post", @@ -38887,6 +38950,7 @@ def test_get_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Asset() + post_with_metadata.return_value = warehouse.Asset(), metadata client.get_asset( request, @@ -38898,6 +38962,7 @@ def test_get_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_assets_rest_bad_request(request_type=warehouse.ListAssetsRequest): @@ -38978,10 +39043,13 @@ def test_list_assets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_assets" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_assets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_assets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListAssetsRequest.pb(warehouse.ListAssetsRequest()) transcode.return_value = { "method": "post", @@ -39005,6 +39073,7 @@ def test_list_assets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListAssetsResponse() + post_with_metadata.return_value = warehouse.ListAssetsResponse(), metadata client.list_assets( request, @@ -39016,6 +39085,7 @@ def test_list_assets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_asset_rest_bad_request(request_type=warehouse.DeleteAssetRequest): @@ -39096,10 +39166,13 @@ def test_delete_asset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_delete_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_delete_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_delete_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.DeleteAssetRequest.pb(warehouse.DeleteAssetRequest()) transcode.return_value = { "method": "post", @@ -39121,6 +39194,7 @@ def test_delete_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_asset( request, @@ -39132,6 +39206,7 @@ def test_delete_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_upload_asset_rest_bad_request(request_type=warehouse.UploadAssetRequest): @@ -39212,10 +39287,13 @@ def test_upload_asset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_upload_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_upload_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_upload_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UploadAssetRequest.pb(warehouse.UploadAssetRequest()) transcode.return_value = { "method": "post", @@ -39237,6 +39315,7 @@ def test_upload_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.upload_asset( request, @@ -39248,6 +39327,7 @@ def test_upload_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_generate_retrieval_url_rest_bad_request( @@ -39334,10 +39414,13 @@ def test_generate_retrieval_url_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_generate_retrieval_url" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_generate_retrieval_url_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_generate_retrieval_url" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GenerateRetrievalUrlRequest.pb( warehouse.GenerateRetrievalUrlRequest() ) @@ -39363,6 +39446,10 @@ def test_generate_retrieval_url_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.GenerateRetrievalUrlResponse() + post_with_metadata.return_value = ( + warehouse.GenerateRetrievalUrlResponse(), + metadata, + ) client.generate_retrieval_url( request, @@ -39374,6 +39461,7 @@ def test_generate_retrieval_url_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_analyze_asset_rest_bad_request(request_type=warehouse.AnalyzeAssetRequest): @@ -39454,10 +39542,13 @@ def test_analyze_asset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_analyze_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_analyze_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_analyze_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.AnalyzeAssetRequest.pb(warehouse.AnalyzeAssetRequest()) transcode.return_value = { "method": "post", @@ -39479,6 +39570,7 @@ def test_analyze_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.analyze_asset( request, @@ -39490,6 +39582,7 @@ def test_analyze_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_index_asset_rest_bad_request(request_type=warehouse.IndexAssetRequest): @@ -39570,10 +39663,13 @@ def test_index_asset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_index_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_index_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_index_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.IndexAssetRequest.pb(warehouse.IndexAssetRequest()) transcode.return_value = { "method": "post", @@ -39595,6 +39691,7 @@ def test_index_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.index_asset( request, @@ -39606,6 +39703,7 @@ def test_index_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_remove_index_asset_rest_bad_request( @@ -39688,10 +39786,13 @@ def test_remove_index_asset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_remove_index_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_remove_index_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_remove_index_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.RemoveIndexAssetRequest.pb( warehouse.RemoveIndexAssetRequest() ) @@ -39715,6 +39816,7 @@ def test_remove_index_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.remove_index_asset( request, @@ -39726,6 +39828,7 @@ def test_remove_index_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_view_indexed_assets_rest_bad_request( @@ -39812,10 +39915,13 @@ def test_view_indexed_assets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_view_indexed_assets" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_view_indexed_assets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_view_indexed_assets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ViewIndexedAssetsRequest.pb( warehouse.ViewIndexedAssetsRequest() ) @@ -39841,6 +39947,10 @@ def test_view_indexed_assets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ViewIndexedAssetsResponse() + post_with_metadata.return_value = ( + warehouse.ViewIndexedAssetsResponse(), + metadata, + ) client.view_indexed_assets( request, @@ -39852,6 +39962,7 @@ def test_view_indexed_assets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_index_rest_bad_request(request_type=warehouse.CreateIndexRequest): @@ -40007,10 +40118,13 @@ def test_create_index_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_create_index" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_index_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_index" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateIndexRequest.pb(warehouse.CreateIndexRequest()) transcode.return_value = { "method": "post", @@ -40032,6 +40146,7 @@ def test_create_index_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_index( request, @@ -40043,6 +40158,7 @@ def test_create_index_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_index_rest_bad_request(request_type=warehouse.UpdateIndexRequest): @@ -40206,10 +40322,13 @@ def test_update_index_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_update_index" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_index_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_index" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateIndexRequest.pb(warehouse.UpdateIndexRequest()) transcode.return_value = { "method": "post", @@ -40231,6 +40350,7 @@ def test_update_index_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_index( request, @@ -40242,6 +40362,7 @@ def test_update_index_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_index_rest_bad_request(request_type=warehouse.GetIndexRequest): @@ -40337,10 +40458,13 @@ def test_get_index_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_index" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_index_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_index" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetIndexRequest.pb(warehouse.GetIndexRequest()) transcode.return_value = { "method": "post", @@ -40362,6 +40486,7 @@ def test_get_index_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Index() + post_with_metadata.return_value = warehouse.Index(), metadata client.get_index( request, @@ -40373,6 +40498,7 @@ def test_get_index_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_indexes_rest_bad_request(request_type=warehouse.ListIndexesRequest): @@ -40453,10 +40579,13 @@ def test_list_indexes_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_indexes" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_indexes_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_indexes" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListIndexesRequest.pb(warehouse.ListIndexesRequest()) transcode.return_value = { "method": "post", @@ -40480,6 +40609,7 @@ def test_list_indexes_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListIndexesResponse() + post_with_metadata.return_value = warehouse.ListIndexesResponse(), metadata client.list_indexes( request, @@ -40491,6 +40621,7 @@ def test_list_indexes_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_index_rest_bad_request(request_type=warehouse.DeleteIndexRequest): @@ -40571,10 +40702,13 @@ def test_delete_index_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_delete_index" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_delete_index_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_delete_index" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.DeleteIndexRequest.pb(warehouse.DeleteIndexRequest()) transcode.return_value = { "method": "post", @@ -40596,6 +40730,7 @@ def test_delete_index_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_index( request, @@ -40607,6 +40742,7 @@ def test_delete_index_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_corpus_rest_bad_request(request_type=warehouse.CreateCorpusRequest): @@ -40760,10 +40896,13 @@ def test_create_corpus_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_create_corpus" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_corpus_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_corpus" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateCorpusRequest.pb(warehouse.CreateCorpusRequest()) transcode.return_value = { "method": "post", @@ -40785,6 +40924,7 @@ def test_create_corpus_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_corpus( request, @@ -40796,6 +40936,7 @@ def test_create_corpus_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_corpus_rest_bad_request(request_type=warehouse.GetCorpusRequest): @@ -40886,10 +41027,13 @@ def test_get_corpus_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_corpus" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_corpus_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_corpus" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetCorpusRequest.pb(warehouse.GetCorpusRequest()) transcode.return_value = { "method": "post", @@ -40911,6 +41055,7 @@ def test_get_corpus_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Corpus() + post_with_metadata.return_value = warehouse.Corpus(), metadata client.get_corpus( request, @@ -40922,6 +41067,7 @@ def test_get_corpus_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_corpus_rest_bad_request(request_type=warehouse.UpdateCorpusRequest): @@ -41093,10 +41239,13 @@ def test_update_corpus_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_corpus" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_corpus_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_corpus" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateCorpusRequest.pb(warehouse.UpdateCorpusRequest()) transcode.return_value = { "method": "post", @@ -41118,6 +41267,7 @@ def test_update_corpus_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Corpus() + post_with_metadata.return_value = warehouse.Corpus(), metadata client.update_corpus( request, @@ -41129,6 +41279,7 @@ def test_update_corpus_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_corpora_rest_bad_request(request_type=warehouse.ListCorporaRequest): @@ -41209,10 +41360,13 @@ def test_list_corpora_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_corpora" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_corpora_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_corpora" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListCorporaRequest.pb(warehouse.ListCorporaRequest()) transcode.return_value = { "method": "post", @@ -41236,6 +41390,7 @@ def test_list_corpora_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListCorporaResponse() + post_with_metadata.return_value = warehouse.ListCorporaResponse(), metadata client.list_corpora( request, @@ -41247,6 +41402,7 @@ def test_list_corpora_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_corpus_rest_bad_request(request_type=warehouse.DeleteCorpusRequest): @@ -41426,10 +41582,13 @@ def test_analyze_corpus_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_analyze_corpus" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_analyze_corpus_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_analyze_corpus" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.AnalyzeCorpusRequest.pb(warehouse.AnalyzeCorpusRequest()) transcode.return_value = { "method": "post", @@ -41451,6 +41610,7 @@ def test_analyze_corpus_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.analyze_corpus( request, @@ -41462,6 +41622,7 @@ def test_analyze_corpus_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_data_schema_rest_bad_request( @@ -41631,10 +41792,13 @@ def test_create_data_schema_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_data_schema" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_data_schema_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_data_schema" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateDataSchemaRequest.pb( warehouse.CreateDataSchemaRequest() ) @@ -41658,6 +41822,7 @@ def test_create_data_schema_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.DataSchema() + post_with_metadata.return_value = warehouse.DataSchema(), metadata client.create_data_schema( request, @@ -41669,6 +41834,7 @@ def test_create_data_schema_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_data_schema_rest_bad_request( @@ -41846,10 +42012,13 @@ def test_update_data_schema_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_data_schema" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_data_schema_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_data_schema" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateDataSchemaRequest.pb( warehouse.UpdateDataSchemaRequest() ) @@ -41873,6 +42042,7 @@ def test_update_data_schema_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.DataSchema() + post_with_metadata.return_value = warehouse.DataSchema(), metadata client.update_data_schema( request, @@ -41884,6 +42054,7 @@ def test_update_data_schema_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_data_schema_rest_bad_request(request_type=warehouse.GetDataSchemaRequest): @@ -41970,10 +42141,13 @@ def test_get_data_schema_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_data_schema" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_data_schema_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_data_schema" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetDataSchemaRequest.pb(warehouse.GetDataSchemaRequest()) transcode.return_value = { "method": "post", @@ -41995,6 +42169,7 @@ def test_get_data_schema_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.DataSchema() + post_with_metadata.return_value = warehouse.DataSchema(), metadata client.get_data_schema( request, @@ -42006,6 +42181,7 @@ def test_get_data_schema_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_data_schema_rest_bad_request( @@ -42199,10 +42375,13 @@ def test_list_data_schemas_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_data_schemas" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_data_schemas_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_data_schemas" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListDataSchemasRequest.pb( warehouse.ListDataSchemasRequest() ) @@ -42228,6 +42407,7 @@ def test_list_data_schemas_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListDataSchemasResponse() + post_with_metadata.return_value = warehouse.ListDataSchemasResponse(), metadata client.list_data_schemas( request, @@ -42239,6 +42419,7 @@ def test_list_data_schemas_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_annotation_rest_bad_request( @@ -42429,10 +42610,13 @@ def test_create_annotation_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_annotation" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_annotation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_annotation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateAnnotationRequest.pb( warehouse.CreateAnnotationRequest() ) @@ -42456,6 +42640,7 @@ def test_create_annotation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Annotation() + post_with_metadata.return_value = warehouse.Annotation(), metadata client.create_annotation( request, @@ -42467,6 +42652,7 @@ def test_create_annotation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_annotation_rest_bad_request(request_type=warehouse.GetAnnotationRequest): @@ -42551,10 +42737,13 @@ def test_get_annotation_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_annotation" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_annotation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_annotation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetAnnotationRequest.pb(warehouse.GetAnnotationRequest()) transcode.return_value = { "method": "post", @@ -42576,6 +42765,7 @@ def test_get_annotation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Annotation() + post_with_metadata.return_value = warehouse.Annotation(), metadata client.get_annotation( request, @@ -42587,6 +42777,7 @@ def test_get_annotation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_annotations_rest_bad_request( @@ -42673,10 +42864,13 @@ def test_list_annotations_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_annotations" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_annotations_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_annotations" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListAnnotationsRequest.pb( warehouse.ListAnnotationsRequest() ) @@ -42702,6 +42896,7 @@ def test_list_annotations_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListAnnotationsResponse() + post_with_metadata.return_value = warehouse.ListAnnotationsResponse(), metadata client.list_annotations( request, @@ -42713,6 +42908,7 @@ def test_list_annotations_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_annotation_rest_bad_request( @@ -42907,10 +43103,13 @@ def test_update_annotation_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_annotation" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_annotation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_annotation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateAnnotationRequest.pb( warehouse.UpdateAnnotationRequest() ) @@ -42934,6 +43133,7 @@ def test_update_annotation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Annotation() + post_with_metadata.return_value = warehouse.Annotation(), metadata client.update_annotation( request, @@ -42945,6 +43145,7 @@ def test_update_annotation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_annotation_rest_bad_request( @@ -43149,10 +43350,13 @@ def test_clip_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_clip_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_clip_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_clip_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ClipAssetRequest.pb(warehouse.ClipAssetRequest()) transcode.return_value = { "method": "post", @@ -43176,6 +43380,7 @@ def test_clip_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ClipAssetResponse() + post_with_metadata.return_value = warehouse.ClipAssetResponse(), metadata client.clip_asset( request, @@ -43187,6 +43392,7 @@ def test_clip_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_generate_hls_uri_rest_bad_request( @@ -43273,10 +43479,13 @@ def test_generate_hls_uri_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_generate_hls_uri" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_generate_hls_uri_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_generate_hls_uri" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GenerateHlsUriRequest.pb( warehouse.GenerateHlsUriRequest() ) @@ -43302,6 +43511,7 @@ def test_generate_hls_uri_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.GenerateHlsUriResponse() + post_with_metadata.return_value = warehouse.GenerateHlsUriResponse(), metadata client.generate_hls_uri( request, @@ -43313,6 +43523,7 @@ def test_generate_hls_uri_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_import_assets_rest_bad_request(request_type=warehouse.ImportAssetsRequest): @@ -43389,10 +43600,13 @@ def test_import_assets_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_import_assets" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_import_assets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_import_assets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ImportAssetsRequest.pb(warehouse.ImportAssetsRequest()) transcode.return_value = { "method": "post", @@ -43414,6 +43628,7 @@ def test_import_assets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.import_assets( request, @@ -43425,6 +43640,7 @@ def test_import_assets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_search_config_rest_bad_request( @@ -43607,10 +43823,13 @@ def test_create_search_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_search_config" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_search_config_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_search_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateSearchConfigRequest.pb( warehouse.CreateSearchConfigRequest() ) @@ -43634,6 +43853,7 @@ def test_create_search_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchConfig() + post_with_metadata.return_value = warehouse.SearchConfig(), metadata client.create_search_config( request, @@ -43645,6 +43865,7 @@ def test_create_search_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_search_config_rest_bad_request( @@ -43835,10 +44056,13 @@ def test_update_search_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_search_config" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_search_config_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_search_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateSearchConfigRequest.pb( warehouse.UpdateSearchConfigRequest() ) @@ -43862,6 +44086,7 @@ def test_update_search_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchConfig() + post_with_metadata.return_value = warehouse.SearchConfig(), metadata client.update_search_config( request, @@ -43873,6 +44098,7 @@ def test_update_search_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_search_config_rest_bad_request( @@ -43959,10 +44185,13 @@ def test_get_search_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_search_config" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_search_config_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_search_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetSearchConfigRequest.pb( warehouse.GetSearchConfigRequest() ) @@ -43986,6 +44215,7 @@ def test_get_search_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchConfig() + post_with_metadata.return_value = warehouse.SearchConfig(), metadata client.get_search_config( request, @@ -43997,6 +44227,7 @@ def test_get_search_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_search_config_rest_bad_request( @@ -44190,10 +44421,13 @@ def test_list_search_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_search_configs" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_search_configs_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_search_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListSearchConfigsRequest.pb( warehouse.ListSearchConfigsRequest() ) @@ -44219,6 +44453,10 @@ def test_list_search_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListSearchConfigsResponse() + post_with_metadata.return_value = ( + warehouse.ListSearchConfigsResponse(), + metadata, + ) client.list_search_configs( request, @@ -44230,6 +44468,7 @@ def test_list_search_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_search_hypernym_rest_bad_request( @@ -44388,10 +44627,13 @@ def test_create_search_hypernym_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_search_hypernym" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_search_hypernym_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_search_hypernym" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateSearchHypernymRequest.pb( warehouse.CreateSearchHypernymRequest() ) @@ -44415,6 +44657,7 @@ def test_create_search_hypernym_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchHypernym() + post_with_metadata.return_value = warehouse.SearchHypernym(), metadata client.create_search_hypernym( request, @@ -44426,6 +44669,7 @@ def test_create_search_hypernym_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_search_hypernym_rest_bad_request( @@ -44592,10 +44836,13 @@ def test_update_search_hypernym_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_search_hypernym" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_search_hypernym_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_search_hypernym" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateSearchHypernymRequest.pb( warehouse.UpdateSearchHypernymRequest() ) @@ -44619,6 +44866,7 @@ def test_update_search_hypernym_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchHypernym() + post_with_metadata.return_value = warehouse.SearchHypernym(), metadata client.update_search_hypernym( request, @@ -44630,6 +44878,7 @@ def test_update_search_hypernym_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_search_hypernym_rest_bad_request( @@ -44720,10 +44969,13 @@ def test_get_search_hypernym_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_search_hypernym" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_search_hypernym_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_search_hypernym" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetSearchHypernymRequest.pb( warehouse.GetSearchHypernymRequest() ) @@ -44747,6 +44999,7 @@ def test_get_search_hypernym_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchHypernym() + post_with_metadata.return_value = warehouse.SearchHypernym(), metadata client.get_search_hypernym( request, @@ -44758,6 +45011,7 @@ def test_get_search_hypernym_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_search_hypernym_rest_bad_request( @@ -44951,10 +45205,13 @@ def test_list_search_hypernyms_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_search_hypernyms" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_search_hypernyms_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_search_hypernyms" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListSearchHypernymsRequest.pb( warehouse.ListSearchHypernymsRequest() ) @@ -44980,6 +45237,10 @@ def test_list_search_hypernyms_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListSearchHypernymsResponse() + post_with_metadata.return_value = ( + warehouse.ListSearchHypernymsResponse(), + metadata, + ) client.list_search_hypernyms( request, @@ -44991,6 +45252,7 @@ def test_list_search_hypernyms_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_search_assets_rest_bad_request(request_type=warehouse.SearchAssetsRequest): @@ -45071,10 +45333,13 @@ def test_search_assets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_search_assets" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_search_assets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_search_assets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.SearchAssetsRequest.pb(warehouse.SearchAssetsRequest()) transcode.return_value = { "method": "post", @@ -45098,6 +45363,7 @@ def test_search_assets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchAssetsResponse() + post_with_metadata.return_value = warehouse.SearchAssetsResponse(), metadata client.search_assets( request, @@ -45109,6 +45375,7 @@ def test_search_assets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_search_index_endpoint_rest_bad_request( @@ -45195,10 +45462,13 @@ def test_search_index_endpoint_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_search_index_endpoint" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_search_index_endpoint_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_search_index_endpoint" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.SearchIndexEndpointRequest.pb( warehouse.SearchIndexEndpointRequest() ) @@ -45224,6 +45494,10 @@ def test_search_index_endpoint_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchIndexEndpointResponse() + post_with_metadata.return_value = ( + warehouse.SearchIndexEndpointResponse(), + metadata, + ) client.search_index_endpoint( request, @@ -45235,6 +45509,7 @@ def test_search_index_endpoint_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_index_endpoint_rest_bad_request( @@ -45392,10 +45667,13 @@ def test_create_index_endpoint_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_create_index_endpoint" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_index_endpoint_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_index_endpoint" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateIndexEndpointRequest.pb( warehouse.CreateIndexEndpointRequest() ) @@ -45419,6 +45697,7 @@ def test_create_index_endpoint_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_index_endpoint( request, @@ -45430,6 +45709,7 @@ def test_create_index_endpoint_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_index_endpoint_rest_bad_request( @@ -45522,10 +45802,13 @@ def test_get_index_endpoint_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_index_endpoint" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_index_endpoint_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_index_endpoint" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetIndexEndpointRequest.pb( warehouse.GetIndexEndpointRequest() ) @@ -45549,6 +45832,7 @@ def test_get_index_endpoint_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.IndexEndpoint() + post_with_metadata.return_value = warehouse.IndexEndpoint(), metadata client.get_index_endpoint( request, @@ -45560,6 +45844,7 @@ def test_get_index_endpoint_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_index_endpoints_rest_bad_request( @@ -45642,10 +45927,13 @@ def test_list_index_endpoints_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_index_endpoints" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_index_endpoints_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_index_endpoints" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListIndexEndpointsRequest.pb( warehouse.ListIndexEndpointsRequest() ) @@ -45671,6 +45959,10 @@ def test_list_index_endpoints_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListIndexEndpointsResponse() + post_with_metadata.return_value = ( + warehouse.ListIndexEndpointsResponse(), + metadata, + ) client.list_index_endpoints( request, @@ -45682,6 +45974,7 @@ def test_list_index_endpoints_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_index_endpoint_rest_bad_request( @@ -45847,10 +46140,13 @@ def test_update_index_endpoint_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_update_index_endpoint" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_index_endpoint_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_index_endpoint" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateIndexEndpointRequest.pb( warehouse.UpdateIndexEndpointRequest() ) @@ -45874,6 +46170,7 @@ def test_update_index_endpoint_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_index_endpoint( request, @@ -45885,6 +46182,7 @@ def test_update_index_endpoint_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_index_endpoint_rest_bad_request( @@ -45963,10 +46261,13 @@ def test_delete_index_endpoint_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_delete_index_endpoint" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_delete_index_endpoint_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_delete_index_endpoint" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.DeleteIndexEndpointRequest.pb( warehouse.DeleteIndexEndpointRequest() ) @@ -45990,6 +46291,7 @@ def test_delete_index_endpoint_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_index_endpoint( request, @@ -46001,6 +46303,7 @@ def test_delete_index_endpoint_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_deploy_index_rest_bad_request(request_type=warehouse.DeployIndexRequest): @@ -46081,10 +46384,13 @@ def test_deploy_index_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_deploy_index" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_deploy_index_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_deploy_index" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.DeployIndexRequest.pb(warehouse.DeployIndexRequest()) transcode.return_value = { "method": "post", @@ -46106,6 +46412,7 @@ def test_deploy_index_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.deploy_index( request, @@ -46117,6 +46424,7 @@ def test_deploy_index_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_undeploy_index_rest_bad_request(request_type=warehouse.UndeployIndexRequest): @@ -46197,10 +46505,13 @@ def test_undeploy_index_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_undeploy_index" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_undeploy_index_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_undeploy_index" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UndeployIndexRequest.pb(warehouse.UndeployIndexRequest()) transcode.return_value = { "method": "post", @@ -46222,6 +46533,7 @@ def test_undeploy_index_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.undeploy_index( request, @@ -46233,6 +46545,7 @@ def test_undeploy_index_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_collection_rest_bad_request( @@ -46383,10 +46696,13 @@ def test_create_collection_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_create_collection" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_collection_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_collection" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateCollectionRequest.pb( warehouse.CreateCollectionRequest() ) @@ -46410,6 +46726,7 @@ def test_create_collection_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_collection( request, @@ -46421,6 +46738,7 @@ def test_create_collection_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_collection_rest_bad_request( @@ -46503,10 +46821,13 @@ def test_delete_collection_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_delete_collection" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_delete_collection_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_delete_collection" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.DeleteCollectionRequest.pb( warehouse.DeleteCollectionRequest() ) @@ -46530,6 +46851,7 @@ def test_delete_collection_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_collection( request, @@ -46541,6 +46863,7 @@ def test_delete_collection_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_collection_rest_bad_request(request_type=warehouse.GetCollectionRequest): @@ -46629,10 +46952,13 @@ def test_get_collection_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_collection" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_collection_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_collection" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetCollectionRequest.pb(warehouse.GetCollectionRequest()) transcode.return_value = { "method": "post", @@ -46654,6 +46980,7 @@ def test_get_collection_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Collection() + post_with_metadata.return_value = warehouse.Collection(), metadata client.get_collection( request, @@ -46665,6 +46992,7 @@ def test_get_collection_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_collection_rest_bad_request( @@ -46831,10 +47159,13 @@ def test_update_collection_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_collection" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_collection_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_collection" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateCollectionRequest.pb( warehouse.UpdateCollectionRequest() ) @@ -46858,6 +47189,7 @@ def test_update_collection_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Collection() + post_with_metadata.return_value = warehouse.Collection(), metadata client.update_collection( request, @@ -46869,6 +47201,7 @@ def test_update_collection_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_collections_rest_bad_request( @@ -46951,10 +47284,13 @@ def test_list_collections_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_collections" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_collections_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_collections" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListCollectionsRequest.pb( warehouse.ListCollectionsRequest() ) @@ -46980,6 +47316,7 @@ def test_list_collections_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListCollectionsResponse() + post_with_metadata.return_value = warehouse.ListCollectionsResponse(), metadata client.list_collections( request, @@ -46991,6 +47328,7 @@ def test_list_collections_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_add_collection_item_rest_bad_request( @@ -47078,10 +47416,13 @@ def test_add_collection_item_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_add_collection_item" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_add_collection_item_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_add_collection_item" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.AddCollectionItemRequest.pb( warehouse.AddCollectionItemRequest() ) @@ -47107,6 +47448,10 @@ def test_add_collection_item_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.AddCollectionItemResponse() + post_with_metadata.return_value = ( + warehouse.AddCollectionItemResponse(), + metadata, + ) client.add_collection_item( request, @@ -47118,6 +47463,7 @@ def test_add_collection_item_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_remove_collection_item_rest_bad_request( @@ -47205,10 +47551,13 @@ def test_remove_collection_item_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_remove_collection_item" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_remove_collection_item_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_remove_collection_item" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.RemoveCollectionItemRequest.pb( warehouse.RemoveCollectionItemRequest() ) @@ -47234,6 +47583,10 @@ def test_remove_collection_item_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.RemoveCollectionItemResponse() + post_with_metadata.return_value = ( + warehouse.RemoveCollectionItemResponse(), + metadata, + ) client.remove_collection_item( request, @@ -47245,6 +47598,7 @@ def test_remove_collection_item_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_view_collection_items_rest_bad_request( @@ -47331,10 +47685,13 @@ def test_view_collection_items_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_view_collection_items" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_view_collection_items_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_view_collection_items" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ViewCollectionItemsRequest.pb( warehouse.ViewCollectionItemsRequest() ) @@ -47360,6 +47717,10 @@ def test_view_collection_items_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ViewCollectionItemsResponse() + post_with_metadata.return_value = ( + warehouse.ViewCollectionItemsResponse(), + metadata, + ) client.view_collection_items( request, @@ -47371,6 +47732,7 @@ def test_view_collection_items_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_operation_rest_bad_request( diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_app_platform.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_app_platform.py index 8eaf46dc641f..75a8d0001600 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_app_platform.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_app_platform.py @@ -78,6 +78,13 @@ ) from google.cloud.visionai_v1alpha1.types import annotations, common, platform +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -317,6 +324,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = AppPlatformClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = AppPlatformClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -17529,10 +17579,13 @@ def test_list_applications_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_applications" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_list_applications_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_applications" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListApplicationsRequest.pb( platform.ListApplicationsRequest() ) @@ -17558,6 +17611,7 @@ def test_list_applications_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListApplicationsResponse() + post_with_metadata.return_value = platform.ListApplicationsResponse(), metadata client.list_applications( request, @@ -17569,6 +17623,7 @@ def test_list_applications_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_application_rest_bad_request(request_type=platform.GetApplicationRequest): @@ -17657,10 +17712,13 @@ def test_get_application_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_get_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_get_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_get_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.GetApplicationRequest.pb(platform.GetApplicationRequest()) transcode.return_value = { "method": "post", @@ -17682,6 +17740,7 @@ def test_get_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.Application() + post_with_metadata.return_value = platform.Application(), metadata client.get_application( request, @@ -17693,6 +17752,7 @@ def test_get_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_application_rest_bad_request( @@ -17970,10 +18030,13 @@ def test_create_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_create_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_create_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_create_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.CreateApplicationRequest.pb( platform.CreateApplicationRequest() ) @@ -17997,6 +18060,7 @@ def test_create_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_application( request, @@ -18008,6 +18072,7 @@ def test_create_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_application_rest_bad_request( @@ -18293,10 +18358,13 @@ def test_update_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_update_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateApplicationRequest.pb( platform.UpdateApplicationRequest() ) @@ -18320,6 +18388,7 @@ def test_update_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_application( request, @@ -18331,6 +18400,7 @@ def test_update_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_application_rest_bad_request( @@ -18411,10 +18481,13 @@ def test_delete_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_delete_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_delete_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_delete_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeleteApplicationRequest.pb( platform.DeleteApplicationRequest() ) @@ -18438,6 +18511,7 @@ def test_delete_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_application( request, @@ -18449,6 +18523,7 @@ def test_delete_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_deploy_application_rest_bad_request( @@ -18529,10 +18604,13 @@ def test_deploy_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_deploy_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_deploy_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_deploy_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeployApplicationRequest.pb( platform.DeployApplicationRequest() ) @@ -18556,6 +18634,7 @@ def test_deploy_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.deploy_application( request, @@ -18567,6 +18646,7 @@ def test_deploy_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_undeploy_application_rest_bad_request( @@ -18647,10 +18727,13 @@ def test_undeploy_application_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_undeploy_application" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_undeploy_application_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_undeploy_application" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UndeployApplicationRequest.pb( platform.UndeployApplicationRequest() ) @@ -18674,6 +18757,7 @@ def test_undeploy_application_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.undeploy_application( request, @@ -18685,6 +18769,7 @@ def test_undeploy_application_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_add_application_stream_input_rest_bad_request( @@ -18765,10 +18850,14 @@ def test_add_application_stream_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_add_application_stream_input" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_add_application_stream_input_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_add_application_stream_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.AddApplicationStreamInputRequest.pb( platform.AddApplicationStreamInputRequest() ) @@ -18792,6 +18881,7 @@ def test_add_application_stream_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.add_application_stream_input( request, @@ -18803,6 +18893,7 @@ def test_add_application_stream_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_remove_application_stream_input_rest_bad_request( @@ -18883,10 +18974,14 @@ def test_remove_application_stream_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_remove_application_stream_input" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_remove_application_stream_input_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_remove_application_stream_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.RemoveApplicationStreamInputRequest.pb( platform.RemoveApplicationStreamInputRequest() ) @@ -18910,6 +19005,7 @@ def test_remove_application_stream_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.remove_application_stream_input( request, @@ -18921,6 +19017,7 @@ def test_remove_application_stream_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_application_stream_input_rest_bad_request( @@ -19001,10 +19098,14 @@ def test_update_application_stream_input_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_application_stream_input" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_update_application_stream_input_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_application_stream_input" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateApplicationStreamInputRequest.pb( platform.UpdateApplicationStreamInputRequest() ) @@ -19028,6 +19129,7 @@ def test_update_application_stream_input_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_application_stream_input( request, @@ -19039,6 +19141,7 @@ def test_update_application_stream_input_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_instances_rest_bad_request(request_type=platform.ListInstancesRequest): @@ -19123,10 +19226,13 @@ def test_list_instances_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_instances" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_list_instances_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_instances" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListInstancesRequest.pb(platform.ListInstancesRequest()) transcode.return_value = { "method": "post", @@ -19150,6 +19256,7 @@ def test_list_instances_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListInstancesResponse() + post_with_metadata.return_value = platform.ListInstancesResponse(), metadata client.list_instances( request, @@ -19161,6 +19268,7 @@ def test_list_instances_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_instance_rest_bad_request(request_type=platform.GetInstanceRequest): @@ -19253,10 +19361,13 @@ def test_get_instance_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_get_instance" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_get_instance_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_get_instance" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.GetInstanceRequest.pb(platform.GetInstanceRequest()) transcode.return_value = { "method": "post", @@ -19278,6 +19389,7 @@ def test_get_instance_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.Instance() + post_with_metadata.return_value = platform.Instance(), metadata client.get_instance( request, @@ -19289,6 +19401,7 @@ def test_get_instance_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_application_instances_rest_bad_request( @@ -19369,10 +19482,14 @@ def test_create_application_instances_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_create_application_instances" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_create_application_instances_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_create_application_instances" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.CreateApplicationInstancesRequest.pb( platform.CreateApplicationInstancesRequest() ) @@ -19396,6 +19513,7 @@ def test_create_application_instances_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_application_instances( request, @@ -19407,6 +19525,7 @@ def test_create_application_instances_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_application_instances_rest_bad_request( @@ -19487,10 +19606,14 @@ def test_delete_application_instances_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_delete_application_instances" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_delete_application_instances_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_delete_application_instances" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeleteApplicationInstancesRequest.pb( platform.DeleteApplicationInstancesRequest() ) @@ -19514,6 +19637,7 @@ def test_delete_application_instances_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_application_instances( request, @@ -19525,6 +19649,7 @@ def test_delete_application_instances_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_application_instances_rest_bad_request( @@ -19605,10 +19730,14 @@ def test_update_application_instances_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_application_instances" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_update_application_instances_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_application_instances" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateApplicationInstancesRequest.pb( platform.UpdateApplicationInstancesRequest() ) @@ -19632,6 +19761,7 @@ def test_update_application_instances_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_application_instances( request, @@ -19643,6 +19773,7 @@ def test_update_application_instances_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_drafts_rest_bad_request(request_type=platform.ListDraftsRequest): @@ -19727,10 +19858,13 @@ def test_list_drafts_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_drafts" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_list_drafts_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_drafts" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListDraftsRequest.pb(platform.ListDraftsRequest()) transcode.return_value = { "method": "post", @@ -19754,6 +19888,7 @@ def test_list_drafts_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListDraftsResponse() + post_with_metadata.return_value = platform.ListDraftsResponse(), metadata client.list_drafts( request, @@ -19765,6 +19900,7 @@ def test_list_drafts_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_draft_rest_bad_request(request_type=platform.GetDraftRequest): @@ -19855,10 +19991,13 @@ def test_get_draft_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_get_draft" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_get_draft_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_get_draft" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.GetDraftRequest.pb(platform.GetDraftRequest()) transcode.return_value = { "method": "post", @@ -19880,6 +20019,7 @@ def test_get_draft_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.Draft() + post_with_metadata.return_value = platform.Draft(), metadata client.get_draft( request, @@ -19891,6 +20031,7 @@ def test_get_draft_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_draft_rest_bad_request(request_type=platform.CreateDraftRequest): @@ -20154,10 +20295,13 @@ def test_create_draft_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_create_draft" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_create_draft_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_create_draft" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.CreateDraftRequest.pb(platform.CreateDraftRequest()) transcode.return_value = { "method": "post", @@ -20179,6 +20323,7 @@ def test_create_draft_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_draft( request, @@ -20190,6 +20335,7 @@ def test_create_draft_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_draft_rest_bad_request(request_type=platform.UpdateDraftRequest): @@ -20461,10 +20607,13 @@ def test_update_draft_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_draft" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_update_draft_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_draft" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateDraftRequest.pb(platform.UpdateDraftRequest()) transcode.return_value = { "method": "post", @@ -20486,6 +20635,7 @@ def test_update_draft_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_draft( request, @@ -20497,6 +20647,7 @@ def test_update_draft_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_draft_rest_bad_request(request_type=platform.DeleteDraftRequest): @@ -20579,10 +20730,13 @@ def test_delete_draft_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_delete_draft" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_delete_draft_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_delete_draft" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeleteDraftRequest.pb(platform.DeleteDraftRequest()) transcode.return_value = { "method": "post", @@ -20604,6 +20758,7 @@ def test_delete_draft_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_draft( request, @@ -20615,6 +20770,7 @@ def test_delete_draft_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_processors_rest_bad_request(request_type=platform.ListProcessorsRequest): @@ -20699,10 +20855,13 @@ def test_list_processors_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_processors" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_list_processors_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_processors" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListProcessorsRequest.pb(platform.ListProcessorsRequest()) transcode.return_value = { "method": "post", @@ -20726,6 +20885,7 @@ def test_list_processors_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListProcessorsResponse() + post_with_metadata.return_value = platform.ListProcessorsResponse(), metadata client.list_processors( request, @@ -20737,6 +20897,7 @@ def test_list_processors_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_prebuilt_processors_rest_bad_request( @@ -20818,10 +20979,14 @@ def test_list_prebuilt_processors_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_list_prebuilt_processors" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, + "post_list_prebuilt_processors_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_list_prebuilt_processors" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.ListPrebuiltProcessorsRequest.pb( platform.ListPrebuiltProcessorsRequest() ) @@ -20847,6 +21012,10 @@ def test_list_prebuilt_processors_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.ListPrebuiltProcessorsResponse() + post_with_metadata.return_value = ( + platform.ListPrebuiltProcessorsResponse(), + metadata, + ) client.list_prebuilt_processors( request, @@ -20858,6 +21027,7 @@ def test_list_prebuilt_processors_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_processor_rest_bad_request(request_type=platform.GetProcessorRequest): @@ -20960,10 +21130,13 @@ def test_get_processor_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AppPlatformRestInterceptor, "post_get_processor" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_get_processor_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_get_processor" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.GetProcessorRequest.pb(platform.GetProcessorRequest()) transcode.return_value = { "method": "post", @@ -20985,6 +21158,7 @@ def test_get_processor_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = platform.Processor() + post_with_metadata.return_value = platform.Processor(), metadata client.get_processor( request, @@ -20996,6 +21170,7 @@ def test_get_processor_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_processor_rest_bad_request( @@ -21202,10 +21377,13 @@ def test_create_processor_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_create_processor" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_create_processor_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_create_processor" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.CreateProcessorRequest.pb( platform.CreateProcessorRequest() ) @@ -21229,6 +21407,7 @@ def test_create_processor_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_processor( request, @@ -21240,6 +21419,7 @@ def test_create_processor_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_processor_rest_bad_request( @@ -21450,10 +21630,13 @@ def test_update_processor_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_update_processor" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_update_processor_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_update_processor" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.UpdateProcessorRequest.pb( platform.UpdateProcessorRequest() ) @@ -21477,6 +21660,7 @@ def test_update_processor_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_processor( request, @@ -21488,6 +21672,7 @@ def test_update_processor_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_processor_rest_bad_request( @@ -21568,10 +21753,13 @@ def test_delete_processor_rest_interceptors(null_interceptor): ), mock.patch.object( transports.AppPlatformRestInterceptor, "post_delete_processor" ) as post, mock.patch.object( + transports.AppPlatformRestInterceptor, "post_delete_processor_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AppPlatformRestInterceptor, "pre_delete_processor" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = platform.DeleteProcessorRequest.pb( platform.DeleteProcessorRequest() ) @@ -21595,6 +21783,7 @@ def test_delete_processor_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_processor( request, @@ -21606,6 +21795,7 @@ def test_delete_processor_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_live_video_analytics.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_live_video_analytics.py index 55b59f6ba866..2ea7dbb4d70c 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_live_video_analytics.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_live_video_analytics.py @@ -77,6 +77,13 @@ ) from google.cloud.visionai_v1alpha1.types import common, lva, lva_resources, lva_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -348,6 +355,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = LiveVideoAnalyticsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = LiveVideoAnalyticsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -4468,10 +4518,13 @@ def test_list_analyses_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_list_analyses" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, "post_list_analyses_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_list_analyses" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.ListAnalysesRequest.pb( lva_service.ListAnalysesRequest() ) @@ -4497,6 +4550,7 @@ def test_list_analyses_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_service.ListAnalysesResponse() + post_with_metadata.return_value = lva_service.ListAnalysesResponse(), metadata client.list_analyses( request, @@ -4508,6 +4562,7 @@ def test_list_analyses_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_analysis_rest_bad_request(request_type=lva_service.GetAnalysisRequest): @@ -4594,10 +4649,13 @@ def test_get_analysis_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_get_analysis" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, "post_get_analysis_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_get_analysis" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.GetAnalysisRequest.pb(lva_service.GetAnalysisRequest()) transcode.return_value = { "method": "post", @@ -4619,6 +4677,7 @@ def test_get_analysis_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = lva_resources.Analysis() + post_with_metadata.return_value = lva_resources.Analysis(), metadata client.get_analysis( request, @@ -4630,6 +4689,7 @@ def test_get_analysis_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_analysis_rest_bad_request( @@ -4796,10 +4856,14 @@ def test_create_analysis_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_create_analysis" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_create_analysis_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_create_analysis" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.CreateAnalysisRequest.pb( lva_service.CreateAnalysisRequest() ) @@ -4823,6 +4887,7 @@ def test_create_analysis_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_analysis( request, @@ -4834,6 +4899,7 @@ def test_create_analysis_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_analysis_rest_bad_request( @@ -5008,10 +5074,14 @@ def test_update_analysis_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_update_analysis" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_update_analysis_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_update_analysis" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.UpdateAnalysisRequest.pb( lva_service.UpdateAnalysisRequest() ) @@ -5035,6 +5105,7 @@ def test_update_analysis_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_analysis( request, @@ -5046,6 +5117,7 @@ def test_update_analysis_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_analysis_rest_bad_request( @@ -5130,10 +5202,14 @@ def test_delete_analysis_rest_interceptors(null_interceptor): ), mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "post_delete_analysis" ) as post, mock.patch.object( + transports.LiveVideoAnalyticsRestInterceptor, + "post_delete_analysis_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.LiveVideoAnalyticsRestInterceptor, "pre_delete_analysis" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = lva_service.DeleteAnalysisRequest.pb( lva_service.DeleteAnalysisRequest() ) @@ -5157,6 +5233,7 @@ def test_delete_analysis_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_analysis( request, @@ -5168,6 +5245,7 @@ def test_delete_analysis_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_streaming_service.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_streaming_service.py index df8edcc41a1f..1343bdcfeb39 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_streaming_service.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_streaming_service.py @@ -67,6 +67,13 @@ ) from google.cloud.visionai_v1alpha1.types import streaming_resources, streaming_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -326,6 +333,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = StreamingServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = StreamingServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -2879,10 +2929,13 @@ def test_acquire_lease_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamingServiceRestInterceptor, "post_acquire_lease" ) as post, mock.patch.object( + transports.StreamingServiceRestInterceptor, "post_acquire_lease_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamingServiceRestInterceptor, "pre_acquire_lease" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streaming_service.AcquireLeaseRequest.pb( streaming_service.AcquireLeaseRequest() ) @@ -2906,6 +2959,7 @@ def test_acquire_lease_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streaming_service.Lease() + post_with_metadata.return_value = streaming_service.Lease(), metadata client.acquire_lease( request, @@ -2917,6 +2971,7 @@ def test_acquire_lease_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_renew_lease_rest_bad_request(request_type=streaming_service.RenewLeaseRequest): @@ -3009,10 +3064,13 @@ def test_renew_lease_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamingServiceRestInterceptor, "post_renew_lease" ) as post, mock.patch.object( + transports.StreamingServiceRestInterceptor, "post_renew_lease_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamingServiceRestInterceptor, "pre_renew_lease" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streaming_service.RenewLeaseRequest.pb( streaming_service.RenewLeaseRequest() ) @@ -3036,6 +3094,7 @@ def test_renew_lease_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streaming_service.Lease() + post_with_metadata.return_value = streaming_service.Lease(), metadata client.renew_lease( request, @@ -3047,6 +3106,7 @@ def test_renew_lease_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_release_lease_rest_bad_request( @@ -3132,10 +3192,13 @@ def test_release_lease_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamingServiceRestInterceptor, "post_release_lease" ) as post, mock.patch.object( + transports.StreamingServiceRestInterceptor, "post_release_lease_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamingServiceRestInterceptor, "pre_release_lease" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streaming_service.ReleaseLeaseRequest.pb( streaming_service.ReleaseLeaseRequest() ) @@ -3161,6 +3224,10 @@ def test_release_lease_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streaming_service.ReleaseLeaseResponse() + post_with_metadata.return_value = ( + streaming_service.ReleaseLeaseResponse(), + metadata, + ) client.release_lease( request, @@ -3172,6 +3239,7 @@ def test_release_lease_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_streams_service.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_streams_service.py index 0d9ea2219caf..2adb3f956ef9 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_streams_service.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_streams_service.py @@ -82,6 +82,13 @@ streams_service, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -340,6 +347,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = StreamsServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = StreamsServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -15111,10 +15161,13 @@ def test_list_clusters_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_list_clusters" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_list_clusters_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_list_clusters" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.ListClustersRequest.pb( streams_service.ListClustersRequest() ) @@ -15140,6 +15193,10 @@ def test_list_clusters_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.ListClustersResponse() + post_with_metadata.return_value = ( + streams_service.ListClustersResponse(), + metadata, + ) client.list_clusters( request, @@ -15151,6 +15208,7 @@ def test_list_clusters_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_cluster_rest_bad_request(request_type=streams_service.GetClusterRequest): @@ -15239,10 +15297,13 @@ def test_get_cluster_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_cluster" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_get_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetClusterRequest.pb( streams_service.GetClusterRequest() ) @@ -15266,6 +15327,7 @@ def test_get_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = common.Cluster() + post_with_metadata.return_value = common.Cluster(), metadata client.get_cluster( request, @@ -15277,6 +15339,7 @@ def test_get_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_cluster_rest_bad_request( @@ -15434,10 +15497,13 @@ def test_create_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_create_cluster" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_create_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_create_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.CreateClusterRequest.pb( streams_service.CreateClusterRequest() ) @@ -15461,6 +15527,7 @@ def test_create_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_cluster( request, @@ -15472,6 +15539,7 @@ def test_create_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_cluster_rest_bad_request( @@ -15633,10 +15701,13 @@ def test_update_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_update_cluster" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_update_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_update_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.UpdateClusterRequest.pb( streams_service.UpdateClusterRequest() ) @@ -15660,6 +15731,7 @@ def test_update_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_cluster( request, @@ -15671,6 +15743,7 @@ def test_update_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_cluster_rest_bad_request( @@ -15751,10 +15824,13 @@ def test_delete_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_delete_cluster" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_delete_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_delete_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.DeleteClusterRequest.pb( streams_service.DeleteClusterRequest() ) @@ -15778,6 +15854,7 @@ def test_delete_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_cluster( request, @@ -15789,6 +15866,7 @@ def test_delete_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_streams_rest_bad_request(request_type=streams_service.ListStreamsRequest): @@ -15873,10 +15951,13 @@ def test_list_streams_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_list_streams" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_list_streams_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_list_streams" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.ListStreamsRequest.pb( streams_service.ListStreamsRequest() ) @@ -15902,6 +15983,10 @@ def test_list_streams_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.ListStreamsResponse() + post_with_metadata.return_value = ( + streams_service.ListStreamsResponse(), + metadata, + ) client.list_streams( request, @@ -15913,6 +15998,7 @@ def test_list_streams_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_stream_rest_bad_request(request_type=streams_service.GetStreamRequest): @@ -16005,10 +16091,13 @@ def test_get_stream_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_stream" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_get_stream_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_stream" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetStreamRequest.pb( streams_service.GetStreamRequest() ) @@ -16032,6 +16121,7 @@ def test_get_stream_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_resources.Stream() + post_with_metadata.return_value = streams_resources.Stream(), metadata client.get_stream( request, @@ -16043,6 +16133,7 @@ def test_get_stream_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_stream_rest_bad_request( @@ -16200,10 +16291,13 @@ def test_create_stream_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_create_stream" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_create_stream_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_create_stream" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.CreateStreamRequest.pb( streams_service.CreateStreamRequest() ) @@ -16227,6 +16321,7 @@ def test_create_stream_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_stream( request, @@ -16238,6 +16333,7 @@ def test_create_stream_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_stream_rest_bad_request( @@ -16403,10 +16499,13 @@ def test_update_stream_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_update_stream" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_update_stream_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_update_stream" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.UpdateStreamRequest.pb( streams_service.UpdateStreamRequest() ) @@ -16430,6 +16529,7 @@ def test_update_stream_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_stream( request, @@ -16441,6 +16541,7 @@ def test_update_stream_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_stream_rest_bad_request( @@ -16525,10 +16626,13 @@ def test_delete_stream_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_delete_stream" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_delete_stream_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_delete_stream" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.DeleteStreamRequest.pb( streams_service.DeleteStreamRequest() ) @@ -16552,6 +16656,7 @@ def test_delete_stream_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_stream( request, @@ -16563,6 +16668,7 @@ def test_delete_stream_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_generate_stream_hls_token_rest_bad_request( @@ -16651,10 +16757,14 @@ def test_generate_stream_hls_token_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_generate_stream_hls_token" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, + "post_generate_stream_hls_token_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_generate_stream_hls_token" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GenerateStreamHlsTokenRequest.pb( streams_service.GenerateStreamHlsTokenRequest() ) @@ -16680,6 +16790,10 @@ def test_generate_stream_hls_token_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.GenerateStreamHlsTokenResponse() + post_with_metadata.return_value = ( + streams_service.GenerateStreamHlsTokenResponse(), + metadata, + ) client.generate_stream_hls_token( request, @@ -16691,6 +16805,7 @@ def test_generate_stream_hls_token_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_events_rest_bad_request(request_type=streams_service.ListEventsRequest): @@ -16775,10 +16890,13 @@ def test_list_events_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_list_events" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_list_events_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_list_events" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.ListEventsRequest.pb( streams_service.ListEventsRequest() ) @@ -16804,6 +16922,7 @@ def test_list_events_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.ListEventsResponse() + post_with_metadata.return_value = streams_service.ListEventsResponse(), metadata client.list_events( request, @@ -16815,6 +16934,7 @@ def test_list_events_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_event_rest_bad_request(request_type=streams_service.GetEventRequest): @@ -16903,10 +17023,13 @@ def test_get_event_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_event" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_get_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetEventRequest.pb( streams_service.GetEventRequest() ) @@ -16930,6 +17053,7 @@ def test_get_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_resources.Event() + post_with_metadata.return_value = streams_resources.Event(), metadata client.get_event( request, @@ -16941,6 +17065,7 @@ def test_get_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_event_rest_bad_request(request_type=streams_service.CreateEventRequest): @@ -17095,10 +17220,13 @@ def test_create_event_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_create_event" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_create_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_create_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.CreateEventRequest.pb( streams_service.CreateEventRequest() ) @@ -17122,6 +17250,7 @@ def test_create_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_event( request, @@ -17133,6 +17262,7 @@ def test_create_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_event_rest_bad_request(request_type=streams_service.UpdateEventRequest): @@ -17295,10 +17425,13 @@ def test_update_event_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_update_event" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_update_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_update_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.UpdateEventRequest.pb( streams_service.UpdateEventRequest() ) @@ -17322,6 +17455,7 @@ def test_update_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_event( request, @@ -17333,6 +17467,7 @@ def test_update_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_event_rest_bad_request(request_type=streams_service.DeleteEventRequest): @@ -17415,10 +17550,13 @@ def test_delete_event_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_delete_event" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_delete_event_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_delete_event" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.DeleteEventRequest.pb( streams_service.DeleteEventRequest() ) @@ -17442,6 +17580,7 @@ def test_delete_event_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_event( request, @@ -17453,6 +17592,7 @@ def test_delete_event_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_series_rest_bad_request(request_type=streams_service.ListSeriesRequest): @@ -17537,10 +17677,13 @@ def test_list_series_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_list_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_list_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_list_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.ListSeriesRequest.pb( streams_service.ListSeriesRequest() ) @@ -17566,6 +17709,7 @@ def test_list_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_service.ListSeriesResponse() + post_with_metadata.return_value = streams_service.ListSeriesResponse(), metadata client.list_series( request, @@ -17577,6 +17721,7 @@ def test_list_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_series_rest_bad_request(request_type=streams_service.GetSeriesRequest): @@ -17667,10 +17812,13 @@ def test_get_series_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.StreamsServiceRestInterceptor, "post_get_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_get_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_get_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.GetSeriesRequest.pb( streams_service.GetSeriesRequest() ) @@ -17694,6 +17842,7 @@ def test_get_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = streams_resources.Series() + post_with_metadata.return_value = streams_resources.Series(), metadata client.get_series( request, @@ -17705,6 +17854,7 @@ def test_get_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_series_rest_bad_request( @@ -17861,10 +18011,13 @@ def test_create_series_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_create_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_create_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_create_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.CreateSeriesRequest.pb( streams_service.CreateSeriesRequest() ) @@ -17888,6 +18041,7 @@ def test_create_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_series( request, @@ -17899,6 +18053,7 @@ def test_create_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_series_rest_bad_request( @@ -18063,10 +18218,13 @@ def test_update_series_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_update_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_update_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_update_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.UpdateSeriesRequest.pb( streams_service.UpdateSeriesRequest() ) @@ -18090,6 +18248,7 @@ def test_update_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_series( request, @@ -18101,6 +18260,7 @@ def test_update_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_series_rest_bad_request( @@ -18185,10 +18345,13 @@ def test_delete_series_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_delete_series" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, "post_delete_series_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_delete_series" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.DeleteSeriesRequest.pb( streams_service.DeleteSeriesRequest() ) @@ -18212,6 +18375,7 @@ def test_delete_series_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_series( request, @@ -18223,6 +18387,7 @@ def test_delete_series_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_materialize_channel_rest_bad_request( @@ -18379,10 +18544,14 @@ def test_materialize_channel_rest_interceptors(null_interceptor): ), mock.patch.object( transports.StreamsServiceRestInterceptor, "post_materialize_channel" ) as post, mock.patch.object( + transports.StreamsServiceRestInterceptor, + "post_materialize_channel_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.StreamsServiceRestInterceptor, "pre_materialize_channel" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = streams_service.MaterializeChannelRequest.pb( streams_service.MaterializeChannelRequest() ) @@ -18406,6 +18575,7 @@ def test_materialize_channel_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.materialize_channel( request, @@ -18417,6 +18587,7 @@ def test_materialize_channel_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_warehouse.py b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_warehouse.py index 5f200dcb68dd..265c477e09d3 100644 --- a/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_warehouse.py +++ b/packages/google-cloud-visionai/tests/unit/gapic/visionai_v1alpha1/test_warehouse.py @@ -81,6 +81,13 @@ ) from google.cloud.visionai_v1alpha1.types import warehouse +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -314,6 +321,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WarehouseClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WarehouseClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -18446,10 +18496,13 @@ def test_create_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateAssetRequest.pb(warehouse.CreateAssetRequest()) transcode.return_value = { "method": "post", @@ -18471,6 +18524,7 @@ def test_create_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Asset() + post_with_metadata.return_value = warehouse.Asset(), metadata client.create_asset( request, @@ -18482,6 +18536,7 @@ def test_create_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_asset_rest_bad_request(request_type=warehouse.UpdateAssetRequest): @@ -18641,10 +18696,13 @@ def test_update_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateAssetRequest.pb(warehouse.UpdateAssetRequest()) transcode.return_value = { "method": "post", @@ -18666,6 +18724,7 @@ def test_update_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Asset() + post_with_metadata.return_value = warehouse.Asset(), metadata client.update_asset( request, @@ -18677,6 +18736,7 @@ def test_update_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_asset_rest_bad_request(request_type=warehouse.GetAssetRequest): @@ -18761,10 +18821,13 @@ def test_get_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetAssetRequest.pb(warehouse.GetAssetRequest()) transcode.return_value = { "method": "post", @@ -18786,6 +18849,7 @@ def test_get_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Asset() + post_with_metadata.return_value = warehouse.Asset(), metadata client.get_asset( request, @@ -18797,6 +18861,7 @@ def test_get_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_assets_rest_bad_request(request_type=warehouse.ListAssetsRequest): @@ -18877,10 +18942,13 @@ def test_list_assets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_assets" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_assets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_assets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListAssetsRequest.pb(warehouse.ListAssetsRequest()) transcode.return_value = { "method": "post", @@ -18904,6 +18972,7 @@ def test_list_assets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListAssetsResponse() + post_with_metadata.return_value = warehouse.ListAssetsResponse(), metadata client.list_assets( request, @@ -18915,6 +18984,7 @@ def test_list_assets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_asset_rest_bad_request(request_type=warehouse.DeleteAssetRequest): @@ -18995,10 +19065,13 @@ def test_delete_asset_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_delete_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_delete_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_delete_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.DeleteAssetRequest.pb(warehouse.DeleteAssetRequest()) transcode.return_value = { "method": "post", @@ -19020,6 +19093,7 @@ def test_delete_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_asset( request, @@ -19031,6 +19105,7 @@ def test_delete_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_corpus_rest_bad_request(request_type=warehouse.CreateCorpusRequest): @@ -19180,10 +19255,13 @@ def test_create_corpus_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WarehouseRestInterceptor, "post_create_corpus" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_corpus_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_corpus" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateCorpusRequest.pb(warehouse.CreateCorpusRequest()) transcode.return_value = { "method": "post", @@ -19205,6 +19283,7 @@ def test_create_corpus_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_corpus( request, @@ -19216,6 +19295,7 @@ def test_create_corpus_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_corpus_rest_bad_request(request_type=warehouse.GetCorpusRequest): @@ -19300,10 +19380,13 @@ def test_get_corpus_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_corpus" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_corpus_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_corpus" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetCorpusRequest.pb(warehouse.GetCorpusRequest()) transcode.return_value = { "method": "post", @@ -19325,6 +19408,7 @@ def test_get_corpus_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Corpus() + post_with_metadata.return_value = warehouse.Corpus(), metadata client.get_corpus( request, @@ -19336,6 +19420,7 @@ def test_get_corpus_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_corpus_rest_bad_request(request_type=warehouse.UpdateCorpusRequest): @@ -19497,10 +19582,13 @@ def test_update_corpus_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_corpus" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_corpus_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_corpus" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateCorpusRequest.pb(warehouse.UpdateCorpusRequest()) transcode.return_value = { "method": "post", @@ -19522,6 +19610,7 @@ def test_update_corpus_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Corpus() + post_with_metadata.return_value = warehouse.Corpus(), metadata client.update_corpus( request, @@ -19533,6 +19622,7 @@ def test_update_corpus_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_corpora_rest_bad_request(request_type=warehouse.ListCorporaRequest): @@ -19613,10 +19703,13 @@ def test_list_corpora_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_corpora" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_corpora_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_corpora" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListCorporaRequest.pb(warehouse.ListCorporaRequest()) transcode.return_value = { "method": "post", @@ -19640,6 +19733,7 @@ def test_list_corpora_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListCorporaResponse() + post_with_metadata.return_value = warehouse.ListCorporaResponse(), metadata client.list_corpora( request, @@ -19651,6 +19745,7 @@ def test_list_corpora_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_corpus_rest_bad_request(request_type=warehouse.DeleteCorpusRequest): @@ -19915,10 +20010,13 @@ def test_create_data_schema_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_data_schema" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_data_schema_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_data_schema" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateDataSchemaRequest.pb( warehouse.CreateDataSchemaRequest() ) @@ -19942,6 +20040,7 @@ def test_create_data_schema_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.DataSchema() + post_with_metadata.return_value = warehouse.DataSchema(), metadata client.create_data_schema( request, @@ -19953,6 +20052,7 @@ def test_create_data_schema_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_data_schema_rest_bad_request( @@ -20122,10 +20222,13 @@ def test_update_data_schema_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_data_schema" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_data_schema_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_data_schema" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateDataSchemaRequest.pb( warehouse.UpdateDataSchemaRequest() ) @@ -20149,6 +20252,7 @@ def test_update_data_schema_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.DataSchema() + post_with_metadata.return_value = warehouse.DataSchema(), metadata client.update_data_schema( request, @@ -20160,6 +20264,7 @@ def test_update_data_schema_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_data_schema_rest_bad_request(request_type=warehouse.GetDataSchemaRequest): @@ -20246,10 +20351,13 @@ def test_get_data_schema_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_data_schema" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_data_schema_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_data_schema" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetDataSchemaRequest.pb(warehouse.GetDataSchemaRequest()) transcode.return_value = { "method": "post", @@ -20271,6 +20379,7 @@ def test_get_data_schema_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.DataSchema() + post_with_metadata.return_value = warehouse.DataSchema(), metadata client.get_data_schema( request, @@ -20282,6 +20391,7 @@ def test_get_data_schema_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_data_schema_rest_bad_request( @@ -20475,10 +20585,13 @@ def test_list_data_schemas_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_data_schemas" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_data_schemas_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_data_schemas" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListDataSchemasRequest.pb( warehouse.ListDataSchemasRequest() ) @@ -20504,6 +20617,7 @@ def test_list_data_schemas_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListDataSchemasResponse() + post_with_metadata.return_value = warehouse.ListDataSchemasResponse(), metadata client.list_data_schemas( request, @@ -20515,6 +20629,7 @@ def test_list_data_schemas_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_annotation_rest_bad_request( @@ -20699,10 +20814,13 @@ def test_create_annotation_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_annotation" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_annotation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_annotation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateAnnotationRequest.pb( warehouse.CreateAnnotationRequest() ) @@ -20726,6 +20844,7 @@ def test_create_annotation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Annotation() + post_with_metadata.return_value = warehouse.Annotation(), metadata client.create_annotation( request, @@ -20737,6 +20856,7 @@ def test_create_annotation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_annotation_rest_bad_request(request_type=warehouse.GetAnnotationRequest): @@ -20821,10 +20941,13 @@ def test_get_annotation_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_annotation" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_annotation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_annotation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetAnnotationRequest.pb(warehouse.GetAnnotationRequest()) transcode.return_value = { "method": "post", @@ -20846,6 +20969,7 @@ def test_get_annotation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Annotation() + post_with_metadata.return_value = warehouse.Annotation(), metadata client.get_annotation( request, @@ -20857,6 +20981,7 @@ def test_get_annotation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_annotations_rest_bad_request( @@ -20943,10 +21068,13 @@ def test_list_annotations_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_annotations" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_annotations_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_annotations" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListAnnotationsRequest.pb( warehouse.ListAnnotationsRequest() ) @@ -20972,6 +21100,7 @@ def test_list_annotations_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListAnnotationsResponse() + post_with_metadata.return_value = warehouse.ListAnnotationsResponse(), metadata client.list_annotations( request, @@ -20983,6 +21112,7 @@ def test_list_annotations_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_annotation_rest_bad_request( @@ -21171,10 +21301,13 @@ def test_update_annotation_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_annotation" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_annotation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_annotation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateAnnotationRequest.pb( warehouse.UpdateAnnotationRequest() ) @@ -21198,6 +21331,7 @@ def test_update_annotation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.Annotation() + post_with_metadata.return_value = warehouse.Annotation(), metadata client.update_annotation( request, @@ -21209,6 +21343,7 @@ def test_update_annotation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_annotation_rest_bad_request( @@ -21413,10 +21548,13 @@ def test_clip_asset_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_clip_asset" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_clip_asset_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_clip_asset" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ClipAssetRequest.pb(warehouse.ClipAssetRequest()) transcode.return_value = { "method": "post", @@ -21440,6 +21578,7 @@ def test_clip_asset_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ClipAssetResponse() + post_with_metadata.return_value = warehouse.ClipAssetResponse(), metadata client.clip_asset( request, @@ -21451,6 +21590,7 @@ def test_clip_asset_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_generate_hls_uri_rest_bad_request( @@ -21537,10 +21677,13 @@ def test_generate_hls_uri_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_generate_hls_uri" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_generate_hls_uri_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_generate_hls_uri" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GenerateHlsUriRequest.pb( warehouse.GenerateHlsUriRequest() ) @@ -21566,6 +21709,7 @@ def test_generate_hls_uri_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.GenerateHlsUriResponse() + post_with_metadata.return_value = warehouse.GenerateHlsUriResponse(), metadata client.generate_hls_uri( request, @@ -21577,6 +21721,7 @@ def test_generate_hls_uri_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_search_config_rest_bad_request( @@ -21759,10 +21904,13 @@ def test_create_search_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_create_search_config" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_create_search_config_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_create_search_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.CreateSearchConfigRequest.pb( warehouse.CreateSearchConfigRequest() ) @@ -21786,6 +21934,7 @@ def test_create_search_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchConfig() + post_with_metadata.return_value = warehouse.SearchConfig(), metadata client.create_search_config( request, @@ -21797,6 +21946,7 @@ def test_create_search_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_search_config_rest_bad_request( @@ -21987,10 +22137,13 @@ def test_update_search_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_update_search_config" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_update_search_config_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_update_search_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.UpdateSearchConfigRequest.pb( warehouse.UpdateSearchConfigRequest() ) @@ -22014,6 +22167,7 @@ def test_update_search_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchConfig() + post_with_metadata.return_value = warehouse.SearchConfig(), metadata client.update_search_config( request, @@ -22025,6 +22179,7 @@ def test_update_search_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_search_config_rest_bad_request( @@ -22111,10 +22266,13 @@ def test_get_search_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_get_search_config" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_get_search_config_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_get_search_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.GetSearchConfigRequest.pb( warehouse.GetSearchConfigRequest() ) @@ -22138,6 +22296,7 @@ def test_get_search_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchConfig() + post_with_metadata.return_value = warehouse.SearchConfig(), metadata client.get_search_config( request, @@ -22149,6 +22308,7 @@ def test_get_search_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_search_config_rest_bad_request( @@ -22342,10 +22502,13 @@ def test_list_search_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_list_search_configs" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_list_search_configs_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_list_search_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.ListSearchConfigsRequest.pb( warehouse.ListSearchConfigsRequest() ) @@ -22371,6 +22534,10 @@ def test_list_search_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.ListSearchConfigsResponse() + post_with_metadata.return_value = ( + warehouse.ListSearchConfigsResponse(), + metadata, + ) client.list_search_configs( request, @@ -22382,6 +22549,7 @@ def test_list_search_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_search_assets_rest_bad_request(request_type=warehouse.SearchAssetsRequest): @@ -22462,10 +22630,13 @@ def test_search_assets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WarehouseRestInterceptor, "post_search_assets" ) as post, mock.patch.object( + transports.WarehouseRestInterceptor, "post_search_assets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WarehouseRestInterceptor, "pre_search_assets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = warehouse.SearchAssetsRequest.pb(warehouse.SearchAssetsRequest()) transcode.return_value = { "method": "post", @@ -22489,6 +22660,7 @@ def test_search_assets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = warehouse.SearchAssetsResponse() + post_with_metadata.return_value = warehouse.SearchAssetsResponse(), metadata client.search_assets( request, @@ -22500,6 +22672,7 @@ def test_search_assets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-vm-migration/google/cloud/vmmigration/gapic_version.py b/packages/google-cloud-vm-migration/google/cloud/vmmigration/gapic_version.py index d1d2a9e60a97..558c8aab67c5 100644 --- a/packages/google-cloud-vm-migration/google/cloud/vmmigration/gapic_version.py +++ b/packages/google-cloud-vm-migration/google/cloud/vmmigration/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.10.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/gapic_version.py b/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/gapic_version.py index d1d2a9e60a97..558c8aab67c5 100644 --- a/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/gapic_version.py +++ b/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.10.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/services/vm_migration/client.py b/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/services/vm_migration/client.py index ca8e099c82d6..b0e507846987 100644 --- a/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/services/vm_migration/client.py +++ b/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/services/vm_migration/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -688,6 +690,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -6564,16 +6593,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -6619,16 +6652,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -6785,16 +6822,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -6840,16 +6881,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/services/vm_migration/transports/rest.py b/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/services/vm_migration/transports/rest.py index 2c6f5d8aa46f..00c920ebba62 100644 --- a/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/services/vm_migration/transports/rest.py +++ b/packages/google-cloud-vm-migration/google/cloud/vmmigration_v1/services/vm_migration/transports/rest.py @@ -465,12 +465,35 @@ def post_add_group_migration( ) -> operations_pb2.Operation: """Post-rpc interceptor for add_group_migration - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_add_group_migration_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_add_group_migration` interceptor runs + before the `post_add_group_migration_with_metadata` interceptor. """ return response + def post_add_group_migration_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for add_group_migration + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_add_group_migration_with_metadata` + interceptor in new development instead of the `post_add_group_migration` interceptor. + When both interceptors are used, this `post_add_group_migration_with_metadata` interceptor runs after the + `post_add_group_migration` interceptor. The (possibly modified) response returned by + `post_add_group_migration` will be passed to + `post_add_group_migration_with_metadata`. + """ + return response, metadata + def pre_cancel_clone_job( self, request: vmmigration.CancelCloneJobRequest, @@ -490,12 +513,35 @@ def post_cancel_clone_job( ) -> operations_pb2.Operation: """Post-rpc interceptor for cancel_clone_job - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_cancel_clone_job_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_cancel_clone_job` interceptor runs + before the `post_cancel_clone_job_with_metadata` interceptor. """ return response + def post_cancel_clone_job_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for cancel_clone_job + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_cancel_clone_job_with_metadata` + interceptor in new development instead of the `post_cancel_clone_job` interceptor. + When both interceptors are used, this `post_cancel_clone_job_with_metadata` interceptor runs after the + `post_cancel_clone_job` interceptor. The (possibly modified) response returned by + `post_cancel_clone_job` will be passed to + `post_cancel_clone_job_with_metadata`. + """ + return response, metadata + def pre_cancel_cutover_job( self, request: vmmigration.CancelCutoverJobRequest, @@ -515,12 +561,35 @@ def post_cancel_cutover_job( ) -> operations_pb2.Operation: """Post-rpc interceptor for cancel_cutover_job - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_cancel_cutover_job_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_cancel_cutover_job` interceptor runs + before the `post_cancel_cutover_job_with_metadata` interceptor. """ return response + def post_cancel_cutover_job_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for cancel_cutover_job + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_cancel_cutover_job_with_metadata` + interceptor in new development instead of the `post_cancel_cutover_job` interceptor. + When both interceptors are used, this `post_cancel_cutover_job_with_metadata` interceptor runs after the + `post_cancel_cutover_job` interceptor. The (possibly modified) response returned by + `post_cancel_cutover_job` will be passed to + `post_cancel_cutover_job_with_metadata`. + """ + return response, metadata + def pre_create_clone_job( self, request: vmmigration.CreateCloneJobRequest, @@ -540,12 +609,35 @@ def post_create_clone_job( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_clone_job - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_clone_job_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_create_clone_job` interceptor runs + before the `post_create_clone_job_with_metadata` interceptor. """ return response + def post_create_clone_job_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_clone_job + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_create_clone_job_with_metadata` + interceptor in new development instead of the `post_create_clone_job` interceptor. + When both interceptors are used, this `post_create_clone_job_with_metadata` interceptor runs after the + `post_create_clone_job` interceptor. The (possibly modified) response returned by + `post_create_clone_job` will be passed to + `post_create_clone_job_with_metadata`. + """ + return response, metadata + def pre_create_cutover_job( self, request: vmmigration.CreateCutoverJobRequest, @@ -565,12 +657,35 @@ def post_create_cutover_job( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_cutover_job - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_cutover_job_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_create_cutover_job` interceptor runs + before the `post_create_cutover_job_with_metadata` interceptor. """ return response + def post_create_cutover_job_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_cutover_job + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_create_cutover_job_with_metadata` + interceptor in new development instead of the `post_create_cutover_job` interceptor. + When both interceptors are used, this `post_create_cutover_job_with_metadata` interceptor runs after the + `post_create_cutover_job` interceptor. The (possibly modified) response returned by + `post_create_cutover_job` will be passed to + `post_create_cutover_job_with_metadata`. + """ + return response, metadata + def pre_create_datacenter_connector( self, request: vmmigration.CreateDatacenterConnectorRequest, @@ -591,12 +706,35 @@ def post_create_datacenter_connector( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_datacenter_connector - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_datacenter_connector_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_create_datacenter_connector` interceptor runs + before the `post_create_datacenter_connector_with_metadata` interceptor. """ return response + def post_create_datacenter_connector_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_datacenter_connector + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_create_datacenter_connector_with_metadata` + interceptor in new development instead of the `post_create_datacenter_connector` interceptor. + When both interceptors are used, this `post_create_datacenter_connector_with_metadata` interceptor runs after the + `post_create_datacenter_connector` interceptor. The (possibly modified) response returned by + `post_create_datacenter_connector` will be passed to + `post_create_datacenter_connector_with_metadata`. + """ + return response, metadata + def pre_create_group( self, request: vmmigration.CreateGroupRequest, @@ -614,12 +752,35 @@ def post_create_group( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_group - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_group_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_create_group` interceptor runs + before the `post_create_group_with_metadata` interceptor. """ return response + def post_create_group_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_group + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_create_group_with_metadata` + interceptor in new development instead of the `post_create_group` interceptor. + When both interceptors are used, this `post_create_group_with_metadata` interceptor runs after the + `post_create_group` interceptor. The (possibly modified) response returned by + `post_create_group` will be passed to + `post_create_group_with_metadata`. + """ + return response, metadata + def pre_create_migrating_vm( self, request: vmmigration.CreateMigratingVmRequest, @@ -639,12 +800,35 @@ def post_create_migrating_vm( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_migrating_vm - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_migrating_vm_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_create_migrating_vm` interceptor runs + before the `post_create_migrating_vm_with_metadata` interceptor. """ return response + def post_create_migrating_vm_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_migrating_vm + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_create_migrating_vm_with_metadata` + interceptor in new development instead of the `post_create_migrating_vm` interceptor. + When both interceptors are used, this `post_create_migrating_vm_with_metadata` interceptor runs after the + `post_create_migrating_vm` interceptor. The (possibly modified) response returned by + `post_create_migrating_vm` will be passed to + `post_create_migrating_vm_with_metadata`. + """ + return response, metadata + def pre_create_source( self, request: vmmigration.CreateSourceRequest, @@ -664,12 +848,35 @@ def post_create_source( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_source - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_source_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_create_source` interceptor runs + before the `post_create_source_with_metadata` interceptor. """ return response + def post_create_source_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_source + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_create_source_with_metadata` + interceptor in new development instead of the `post_create_source` interceptor. + When both interceptors are used, this `post_create_source_with_metadata` interceptor runs after the + `post_create_source` interceptor. The (possibly modified) response returned by + `post_create_source` will be passed to + `post_create_source_with_metadata`. + """ + return response, metadata + def pre_create_target_project( self, request: vmmigration.CreateTargetProjectRequest, @@ -689,12 +896,35 @@ def post_create_target_project( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_target_project - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_target_project_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_create_target_project` interceptor runs + before the `post_create_target_project_with_metadata` interceptor. """ return response + def post_create_target_project_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_target_project + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_create_target_project_with_metadata` + interceptor in new development instead of the `post_create_target_project` interceptor. + When both interceptors are used, this `post_create_target_project_with_metadata` interceptor runs after the + `post_create_target_project` interceptor. The (possibly modified) response returned by + `post_create_target_project` will be passed to + `post_create_target_project_with_metadata`. + """ + return response, metadata + def pre_create_utilization_report( self, request: vmmigration.CreateUtilizationReportRequest, @@ -715,12 +945,35 @@ def post_create_utilization_report( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_utilization_report - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_utilization_report_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_create_utilization_report` interceptor runs + before the `post_create_utilization_report_with_metadata` interceptor. """ return response + def post_create_utilization_report_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_utilization_report + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_create_utilization_report_with_metadata` + interceptor in new development instead of the `post_create_utilization_report` interceptor. + When both interceptors are used, this `post_create_utilization_report_with_metadata` interceptor runs after the + `post_create_utilization_report` interceptor. The (possibly modified) response returned by + `post_create_utilization_report` will be passed to + `post_create_utilization_report_with_metadata`. + """ + return response, metadata + def pre_delete_datacenter_connector( self, request: vmmigration.DeleteDatacenterConnectorRequest, @@ -741,12 +994,35 @@ def post_delete_datacenter_connector( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_datacenter_connector - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_datacenter_connector_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_delete_datacenter_connector` interceptor runs + before the `post_delete_datacenter_connector_with_metadata` interceptor. """ return response + def post_delete_datacenter_connector_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_datacenter_connector + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_delete_datacenter_connector_with_metadata` + interceptor in new development instead of the `post_delete_datacenter_connector` interceptor. + When both interceptors are used, this `post_delete_datacenter_connector_with_metadata` interceptor runs after the + `post_delete_datacenter_connector` interceptor. The (possibly modified) response returned by + `post_delete_datacenter_connector` will be passed to + `post_delete_datacenter_connector_with_metadata`. + """ + return response, metadata + def pre_delete_group( self, request: vmmigration.DeleteGroupRequest, @@ -764,12 +1040,35 @@ def post_delete_group( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_group - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_group_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_delete_group` interceptor runs + before the `post_delete_group_with_metadata` interceptor. """ return response + def post_delete_group_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_group + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_delete_group_with_metadata` + interceptor in new development instead of the `post_delete_group` interceptor. + When both interceptors are used, this `post_delete_group_with_metadata` interceptor runs after the + `post_delete_group` interceptor. The (possibly modified) response returned by + `post_delete_group` will be passed to + `post_delete_group_with_metadata`. + """ + return response, metadata + def pre_delete_migrating_vm( self, request: vmmigration.DeleteMigratingVmRequest, @@ -789,12 +1088,35 @@ def post_delete_migrating_vm( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_migrating_vm - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_migrating_vm_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_delete_migrating_vm` interceptor runs + before the `post_delete_migrating_vm_with_metadata` interceptor. """ return response + def post_delete_migrating_vm_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_migrating_vm + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_delete_migrating_vm_with_metadata` + interceptor in new development instead of the `post_delete_migrating_vm` interceptor. + When both interceptors are used, this `post_delete_migrating_vm_with_metadata` interceptor runs after the + `post_delete_migrating_vm` interceptor. The (possibly modified) response returned by + `post_delete_migrating_vm` will be passed to + `post_delete_migrating_vm_with_metadata`. + """ + return response, metadata + def pre_delete_source( self, request: vmmigration.DeleteSourceRequest, @@ -814,12 +1136,35 @@ def post_delete_source( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_source - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_source_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_delete_source` interceptor runs + before the `post_delete_source_with_metadata` interceptor. """ return response + def post_delete_source_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_source + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_delete_source_with_metadata` + interceptor in new development instead of the `post_delete_source` interceptor. + When both interceptors are used, this `post_delete_source_with_metadata` interceptor runs after the + `post_delete_source` interceptor. The (possibly modified) response returned by + `post_delete_source` will be passed to + `post_delete_source_with_metadata`. + """ + return response, metadata + def pre_delete_target_project( self, request: vmmigration.DeleteTargetProjectRequest, @@ -839,12 +1184,35 @@ def post_delete_target_project( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_target_project - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_target_project_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_delete_target_project` interceptor runs + before the `post_delete_target_project_with_metadata` interceptor. """ return response + def post_delete_target_project_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_target_project + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_delete_target_project_with_metadata` + interceptor in new development instead of the `post_delete_target_project` interceptor. + When both interceptors are used, this `post_delete_target_project_with_metadata` interceptor runs after the + `post_delete_target_project` interceptor. The (possibly modified) response returned by + `post_delete_target_project` will be passed to + `post_delete_target_project_with_metadata`. + """ + return response, metadata + def pre_delete_utilization_report( self, request: vmmigration.DeleteUtilizationReportRequest, @@ -865,12 +1233,35 @@ def post_delete_utilization_report( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_utilization_report - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_utilization_report_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_delete_utilization_report` interceptor runs + before the `post_delete_utilization_report_with_metadata` interceptor. """ return response + def post_delete_utilization_report_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_utilization_report + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_delete_utilization_report_with_metadata` + interceptor in new development instead of the `post_delete_utilization_report` interceptor. + When both interceptors are used, this `post_delete_utilization_report_with_metadata` interceptor runs after the + `post_delete_utilization_report` interceptor. The (possibly modified) response returned by + `post_delete_utilization_report` will be passed to + `post_delete_utilization_report_with_metadata`. + """ + return response, metadata + def pre_fetch_inventory( self, request: vmmigration.FetchInventoryRequest, @@ -890,12 +1281,37 @@ def post_fetch_inventory( ) -> vmmigration.FetchInventoryResponse: """Post-rpc interceptor for fetch_inventory - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_fetch_inventory_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_fetch_inventory` interceptor runs + before the `post_fetch_inventory_with_metadata` interceptor. """ return response + def post_fetch_inventory_with_metadata( + self, + response: vmmigration.FetchInventoryResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.FetchInventoryResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for fetch_inventory + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_fetch_inventory_with_metadata` + interceptor in new development instead of the `post_fetch_inventory` interceptor. + When both interceptors are used, this `post_fetch_inventory_with_metadata` interceptor runs after the + `post_fetch_inventory` interceptor. The (possibly modified) response returned by + `post_fetch_inventory` will be passed to + `post_fetch_inventory_with_metadata`. + """ + return response, metadata + def pre_finalize_migration( self, request: vmmigration.FinalizeMigrationRequest, @@ -915,12 +1331,35 @@ def post_finalize_migration( ) -> operations_pb2.Operation: """Post-rpc interceptor for finalize_migration - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_finalize_migration_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_finalize_migration` interceptor runs + before the `post_finalize_migration_with_metadata` interceptor. """ return response + def post_finalize_migration_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for finalize_migration + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_finalize_migration_with_metadata` + interceptor in new development instead of the `post_finalize_migration` interceptor. + When both interceptors are used, this `post_finalize_migration_with_metadata` interceptor runs after the + `post_finalize_migration` interceptor. The (possibly modified) response returned by + `post_finalize_migration` will be passed to + `post_finalize_migration_with_metadata`. + """ + return response, metadata + def pre_get_clone_job( self, request: vmmigration.GetCloneJobRequest, @@ -938,12 +1377,35 @@ def post_get_clone_job( ) -> vmmigration.CloneJob: """Post-rpc interceptor for get_clone_job - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_clone_job_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_clone_job` interceptor runs + before the `post_get_clone_job_with_metadata` interceptor. """ return response + def post_get_clone_job_with_metadata( + self, + response: vmmigration.CloneJob, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.CloneJob, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_clone_job + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_clone_job_with_metadata` + interceptor in new development instead of the `post_get_clone_job` interceptor. + When both interceptors are used, this `post_get_clone_job_with_metadata` interceptor runs after the + `post_get_clone_job` interceptor. The (possibly modified) response returned by + `post_get_clone_job` will be passed to + `post_get_clone_job_with_metadata`. + """ + return response, metadata + def pre_get_cutover_job( self, request: vmmigration.GetCutoverJobRequest, @@ -963,12 +1425,35 @@ def post_get_cutover_job( ) -> vmmigration.CutoverJob: """Post-rpc interceptor for get_cutover_job - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_cutover_job_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_cutover_job` interceptor runs + before the `post_get_cutover_job_with_metadata` interceptor. """ return response + def post_get_cutover_job_with_metadata( + self, + response: vmmigration.CutoverJob, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.CutoverJob, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_cutover_job + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_cutover_job_with_metadata` + interceptor in new development instead of the `post_get_cutover_job` interceptor. + When both interceptors are used, this `post_get_cutover_job_with_metadata` interceptor runs after the + `post_get_cutover_job` interceptor. The (possibly modified) response returned by + `post_get_cutover_job` will be passed to + `post_get_cutover_job_with_metadata`. + """ + return response, metadata + def pre_get_datacenter_connector( self, request: vmmigration.GetDatacenterConnectorRequest, @@ -989,12 +1474,37 @@ def post_get_datacenter_connector( ) -> vmmigration.DatacenterConnector: """Post-rpc interceptor for get_datacenter_connector - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_datacenter_connector_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_datacenter_connector` interceptor runs + before the `post_get_datacenter_connector_with_metadata` interceptor. """ return response + def post_get_datacenter_connector_with_metadata( + self, + response: vmmigration.DatacenterConnector, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.DatacenterConnector, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_datacenter_connector + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_datacenter_connector_with_metadata` + interceptor in new development instead of the `post_get_datacenter_connector` interceptor. + When both interceptors are used, this `post_get_datacenter_connector_with_metadata` interceptor runs after the + `post_get_datacenter_connector` interceptor. The (possibly modified) response returned by + `post_get_datacenter_connector` will be passed to + `post_get_datacenter_connector_with_metadata`. + """ + return response, metadata + def pre_get_group( self, request: vmmigration.GetGroupRequest, @@ -1010,12 +1520,35 @@ def pre_get_group( def post_get_group(self, response: vmmigration.Group) -> vmmigration.Group: """Post-rpc interceptor for get_group - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_group_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_group` interceptor runs + before the `post_get_group_with_metadata` interceptor. """ return response + def post_get_group_with_metadata( + self, + response: vmmigration.Group, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.Group, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_group + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_group_with_metadata` + interceptor in new development instead of the `post_get_group` interceptor. + When both interceptors are used, this `post_get_group_with_metadata` interceptor runs after the + `post_get_group` interceptor. The (possibly modified) response returned by + `post_get_group` will be passed to + `post_get_group_with_metadata`. + """ + return response, metadata + def pre_get_migrating_vm( self, request: vmmigration.GetMigratingVmRequest, @@ -1035,12 +1568,35 @@ def post_get_migrating_vm( ) -> vmmigration.MigratingVm: """Post-rpc interceptor for get_migrating_vm - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_migrating_vm_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_migrating_vm` interceptor runs + before the `post_get_migrating_vm_with_metadata` interceptor. """ return response + def post_get_migrating_vm_with_metadata( + self, + response: vmmigration.MigratingVm, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.MigratingVm, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_migrating_vm + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_migrating_vm_with_metadata` + interceptor in new development instead of the `post_get_migrating_vm` interceptor. + When both interceptors are used, this `post_get_migrating_vm_with_metadata` interceptor runs after the + `post_get_migrating_vm` interceptor. The (possibly modified) response returned by + `post_get_migrating_vm` will be passed to + `post_get_migrating_vm_with_metadata`. + """ + return response, metadata + def pre_get_replication_cycle( self, request: vmmigration.GetReplicationCycleRequest, @@ -1060,12 +1616,35 @@ def post_get_replication_cycle( ) -> vmmigration.ReplicationCycle: """Post-rpc interceptor for get_replication_cycle - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_replication_cycle_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_replication_cycle` interceptor runs + before the `post_get_replication_cycle_with_metadata` interceptor. """ return response + def post_get_replication_cycle_with_metadata( + self, + response: vmmigration.ReplicationCycle, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.ReplicationCycle, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_replication_cycle + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_replication_cycle_with_metadata` + interceptor in new development instead of the `post_get_replication_cycle` interceptor. + When both interceptors are used, this `post_get_replication_cycle_with_metadata` interceptor runs after the + `post_get_replication_cycle` interceptor. The (possibly modified) response returned by + `post_get_replication_cycle` will be passed to + `post_get_replication_cycle_with_metadata`. + """ + return response, metadata + def pre_get_source( self, request: vmmigration.GetSourceRequest, @@ -1081,12 +1660,35 @@ def pre_get_source( def post_get_source(self, response: vmmigration.Source) -> vmmigration.Source: """Post-rpc interceptor for get_source - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_source_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_source` interceptor runs + before the `post_get_source_with_metadata` interceptor. """ return response + def post_get_source_with_metadata( + self, + response: vmmigration.Source, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.Source, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_source + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_source_with_metadata` + interceptor in new development instead of the `post_get_source` interceptor. + When both interceptors are used, this `post_get_source_with_metadata` interceptor runs after the + `post_get_source` interceptor. The (possibly modified) response returned by + `post_get_source` will be passed to + `post_get_source_with_metadata`. + """ + return response, metadata + def pre_get_target_project( self, request: vmmigration.GetTargetProjectRequest, @@ -1106,12 +1708,35 @@ def post_get_target_project( ) -> vmmigration.TargetProject: """Post-rpc interceptor for get_target_project - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_target_project_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_target_project` interceptor runs + before the `post_get_target_project_with_metadata` interceptor. """ return response + def post_get_target_project_with_metadata( + self, + response: vmmigration.TargetProject, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.TargetProject, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_target_project + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_target_project_with_metadata` + interceptor in new development instead of the `post_get_target_project` interceptor. + When both interceptors are used, this `post_get_target_project_with_metadata` interceptor runs after the + `post_get_target_project` interceptor. The (possibly modified) response returned by + `post_get_target_project` will be passed to + `post_get_target_project_with_metadata`. + """ + return response, metadata + def pre_get_utilization_report( self, request: vmmigration.GetUtilizationReportRequest, @@ -1131,12 +1756,35 @@ def post_get_utilization_report( ) -> vmmigration.UtilizationReport: """Post-rpc interceptor for get_utilization_report - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_utilization_report_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_get_utilization_report` interceptor runs + before the `post_get_utilization_report_with_metadata` interceptor. """ return response + def post_get_utilization_report_with_metadata( + self, + response: vmmigration.UtilizationReport, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.UtilizationReport, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_utilization_report + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_get_utilization_report_with_metadata` + interceptor in new development instead of the `post_get_utilization_report` interceptor. + When both interceptors are used, this `post_get_utilization_report_with_metadata` interceptor runs after the + `post_get_utilization_report` interceptor. The (possibly modified) response returned by + `post_get_utilization_report` will be passed to + `post_get_utilization_report_with_metadata`. + """ + return response, metadata + def pre_list_clone_jobs( self, request: vmmigration.ListCloneJobsRequest, @@ -1156,12 +1804,37 @@ def post_list_clone_jobs( ) -> vmmigration.ListCloneJobsResponse: """Post-rpc interceptor for list_clone_jobs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_clone_jobs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_clone_jobs` interceptor runs + before the `post_list_clone_jobs_with_metadata` interceptor. """ return response + def post_list_clone_jobs_with_metadata( + self, + response: vmmigration.ListCloneJobsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.ListCloneJobsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_clone_jobs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_clone_jobs_with_metadata` + interceptor in new development instead of the `post_list_clone_jobs` interceptor. + When both interceptors are used, this `post_list_clone_jobs_with_metadata` interceptor runs after the + `post_list_clone_jobs` interceptor. The (possibly modified) response returned by + `post_list_clone_jobs` will be passed to + `post_list_clone_jobs_with_metadata`. + """ + return response, metadata + def pre_list_cutover_jobs( self, request: vmmigration.ListCutoverJobsRequest, @@ -1181,12 +1854,37 @@ def post_list_cutover_jobs( ) -> vmmigration.ListCutoverJobsResponse: """Post-rpc interceptor for list_cutover_jobs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_cutover_jobs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_cutover_jobs` interceptor runs + before the `post_list_cutover_jobs_with_metadata` interceptor. """ return response + def post_list_cutover_jobs_with_metadata( + self, + response: vmmigration.ListCutoverJobsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.ListCutoverJobsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_cutover_jobs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_cutover_jobs_with_metadata` + interceptor in new development instead of the `post_list_cutover_jobs` interceptor. + When both interceptors are used, this `post_list_cutover_jobs_with_metadata` interceptor runs after the + `post_list_cutover_jobs` interceptor. The (possibly modified) response returned by + `post_list_cutover_jobs` will be passed to + `post_list_cutover_jobs_with_metadata`. + """ + return response, metadata + def pre_list_datacenter_connectors( self, request: vmmigration.ListDatacenterConnectorsRequest, @@ -1207,12 +1905,38 @@ def post_list_datacenter_connectors( ) -> vmmigration.ListDatacenterConnectorsResponse: """Post-rpc interceptor for list_datacenter_connectors - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_datacenter_connectors_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_datacenter_connectors` interceptor runs + before the `post_list_datacenter_connectors_with_metadata` interceptor. """ return response + def post_list_datacenter_connectors_with_metadata( + self, + response: vmmigration.ListDatacenterConnectorsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.ListDatacenterConnectorsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_datacenter_connectors + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_datacenter_connectors_with_metadata` + interceptor in new development instead of the `post_list_datacenter_connectors` interceptor. + When both interceptors are used, this `post_list_datacenter_connectors_with_metadata` interceptor runs after the + `post_list_datacenter_connectors` interceptor. The (possibly modified) response returned by + `post_list_datacenter_connectors` will be passed to + `post_list_datacenter_connectors_with_metadata`. + """ + return response, metadata + def pre_list_groups( self, request: vmmigration.ListGroupsRequest, @@ -1230,12 +1954,35 @@ def post_list_groups( ) -> vmmigration.ListGroupsResponse: """Post-rpc interceptor for list_groups - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_groups_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_groups` interceptor runs + before the `post_list_groups_with_metadata` interceptor. """ return response + def post_list_groups_with_metadata( + self, + response: vmmigration.ListGroupsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmmigration.ListGroupsResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_groups + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_groups_with_metadata` + interceptor in new development instead of the `post_list_groups` interceptor. + When both interceptors are used, this `post_list_groups_with_metadata` interceptor runs after the + `post_list_groups` interceptor. The (possibly modified) response returned by + `post_list_groups` will be passed to + `post_list_groups_with_metadata`. + """ + return response, metadata + def pre_list_migrating_vms( self, request: vmmigration.ListMigratingVmsRequest, @@ -1255,12 +2002,37 @@ def post_list_migrating_vms( ) -> vmmigration.ListMigratingVmsResponse: """Post-rpc interceptor for list_migrating_vms - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_migrating_vms_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_migrating_vms` interceptor runs + before the `post_list_migrating_vms_with_metadata` interceptor. """ return response + def post_list_migrating_vms_with_metadata( + self, + response: vmmigration.ListMigratingVmsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.ListMigratingVmsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_migrating_vms + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_migrating_vms_with_metadata` + interceptor in new development instead of the `post_list_migrating_vms` interceptor. + When both interceptors are used, this `post_list_migrating_vms_with_metadata` interceptor runs after the + `post_list_migrating_vms` interceptor. The (possibly modified) response returned by + `post_list_migrating_vms` will be passed to + `post_list_migrating_vms_with_metadata`. + """ + return response, metadata + def pre_list_replication_cycles( self, request: vmmigration.ListReplicationCyclesRequest, @@ -1281,12 +2053,38 @@ def post_list_replication_cycles( ) -> vmmigration.ListReplicationCyclesResponse: """Post-rpc interceptor for list_replication_cycles - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_replication_cycles_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_replication_cycles` interceptor runs + before the `post_list_replication_cycles_with_metadata` interceptor. """ return response + def post_list_replication_cycles_with_metadata( + self, + response: vmmigration.ListReplicationCyclesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.ListReplicationCyclesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_replication_cycles + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_replication_cycles_with_metadata` + interceptor in new development instead of the `post_list_replication_cycles` interceptor. + When both interceptors are used, this `post_list_replication_cycles_with_metadata` interceptor runs after the + `post_list_replication_cycles` interceptor. The (possibly modified) response returned by + `post_list_replication_cycles` will be passed to + `post_list_replication_cycles_with_metadata`. + """ + return response, metadata + def pre_list_sources( self, request: vmmigration.ListSourcesRequest, @@ -1304,12 +2102,37 @@ def post_list_sources( ) -> vmmigration.ListSourcesResponse: """Post-rpc interceptor for list_sources - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_sources_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_sources` interceptor runs + before the `post_list_sources_with_metadata` interceptor. """ return response + def post_list_sources_with_metadata( + self, + response: vmmigration.ListSourcesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.ListSourcesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_sources + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_sources_with_metadata` + interceptor in new development instead of the `post_list_sources` interceptor. + When both interceptors are used, this `post_list_sources_with_metadata` interceptor runs after the + `post_list_sources` interceptor. The (possibly modified) response returned by + `post_list_sources` will be passed to + `post_list_sources_with_metadata`. + """ + return response, metadata + def pre_list_target_projects( self, request: vmmigration.ListTargetProjectsRequest, @@ -1329,12 +2152,37 @@ def post_list_target_projects( ) -> vmmigration.ListTargetProjectsResponse: """Post-rpc interceptor for list_target_projects - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_target_projects_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_target_projects` interceptor runs + before the `post_list_target_projects_with_metadata` interceptor. """ return response + def post_list_target_projects_with_metadata( + self, + response: vmmigration.ListTargetProjectsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.ListTargetProjectsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_target_projects + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_target_projects_with_metadata` + interceptor in new development instead of the `post_list_target_projects` interceptor. + When both interceptors are used, this `post_list_target_projects_with_metadata` interceptor runs after the + `post_list_target_projects` interceptor. The (possibly modified) response returned by + `post_list_target_projects` will be passed to + `post_list_target_projects_with_metadata`. + """ + return response, metadata + def pre_list_utilization_reports( self, request: vmmigration.ListUtilizationReportsRequest, @@ -1355,12 +2203,38 @@ def post_list_utilization_reports( ) -> vmmigration.ListUtilizationReportsResponse: """Post-rpc interceptor for list_utilization_reports - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_utilization_reports_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_list_utilization_reports` interceptor runs + before the `post_list_utilization_reports_with_metadata` interceptor. """ return response + def post_list_utilization_reports_with_metadata( + self, + response: vmmigration.ListUtilizationReportsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmmigration.ListUtilizationReportsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_utilization_reports + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_list_utilization_reports_with_metadata` + interceptor in new development instead of the `post_list_utilization_reports` interceptor. + When both interceptors are used, this `post_list_utilization_reports_with_metadata` interceptor runs after the + `post_list_utilization_reports` interceptor. The (possibly modified) response returned by + `post_list_utilization_reports` will be passed to + `post_list_utilization_reports_with_metadata`. + """ + return response, metadata + def pre_pause_migration( self, request: vmmigration.PauseMigrationRequest, @@ -1380,12 +2254,35 @@ def post_pause_migration( ) -> operations_pb2.Operation: """Post-rpc interceptor for pause_migration - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_pause_migration_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_pause_migration` interceptor runs + before the `post_pause_migration_with_metadata` interceptor. """ return response + def post_pause_migration_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for pause_migration + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_pause_migration_with_metadata` + interceptor in new development instead of the `post_pause_migration` interceptor. + When both interceptors are used, this `post_pause_migration_with_metadata` interceptor runs after the + `post_pause_migration` interceptor. The (possibly modified) response returned by + `post_pause_migration` will be passed to + `post_pause_migration_with_metadata`. + """ + return response, metadata + def pre_remove_group_migration( self, request: vmmigration.RemoveGroupMigrationRequest, @@ -1405,12 +2302,35 @@ def post_remove_group_migration( ) -> operations_pb2.Operation: """Post-rpc interceptor for remove_group_migration - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_remove_group_migration_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_remove_group_migration` interceptor runs + before the `post_remove_group_migration_with_metadata` interceptor. """ return response + def post_remove_group_migration_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for remove_group_migration + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_remove_group_migration_with_metadata` + interceptor in new development instead of the `post_remove_group_migration` interceptor. + When both interceptors are used, this `post_remove_group_migration_with_metadata` interceptor runs after the + `post_remove_group_migration` interceptor. The (possibly modified) response returned by + `post_remove_group_migration` will be passed to + `post_remove_group_migration_with_metadata`. + """ + return response, metadata + def pre_resume_migration( self, request: vmmigration.ResumeMigrationRequest, @@ -1430,12 +2350,35 @@ def post_resume_migration( ) -> operations_pb2.Operation: """Post-rpc interceptor for resume_migration - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_resume_migration_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_resume_migration` interceptor runs + before the `post_resume_migration_with_metadata` interceptor. """ return response + def post_resume_migration_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for resume_migration + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_resume_migration_with_metadata` + interceptor in new development instead of the `post_resume_migration` interceptor. + When both interceptors are used, this `post_resume_migration_with_metadata` interceptor runs after the + `post_resume_migration` interceptor. The (possibly modified) response returned by + `post_resume_migration` will be passed to + `post_resume_migration_with_metadata`. + """ + return response, metadata + def pre_start_migration( self, request: vmmigration.StartMigrationRequest, @@ -1455,12 +2398,35 @@ def post_start_migration( ) -> operations_pb2.Operation: """Post-rpc interceptor for start_migration - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_start_migration_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_start_migration` interceptor runs + before the `post_start_migration_with_metadata` interceptor. """ return response + def post_start_migration_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for start_migration + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_start_migration_with_metadata` + interceptor in new development instead of the `post_start_migration` interceptor. + When both interceptors are used, this `post_start_migration_with_metadata` interceptor runs after the + `post_start_migration` interceptor. The (possibly modified) response returned by + `post_start_migration` will be passed to + `post_start_migration_with_metadata`. + """ + return response, metadata + def pre_update_group( self, request: vmmigration.UpdateGroupRequest, @@ -1478,12 +2444,35 @@ def post_update_group( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_group - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_group_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_update_group` interceptor runs + before the `post_update_group_with_metadata` interceptor. """ return response + def post_update_group_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_group + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_update_group_with_metadata` + interceptor in new development instead of the `post_update_group` interceptor. + When both interceptors are used, this `post_update_group_with_metadata` interceptor runs after the + `post_update_group` interceptor. The (possibly modified) response returned by + `post_update_group` will be passed to + `post_update_group_with_metadata`. + """ + return response, metadata + def pre_update_migrating_vm( self, request: vmmigration.UpdateMigratingVmRequest, @@ -1503,12 +2492,35 @@ def post_update_migrating_vm( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_migrating_vm - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_migrating_vm_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_update_migrating_vm` interceptor runs + before the `post_update_migrating_vm_with_metadata` interceptor. """ return response + def post_update_migrating_vm_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_migrating_vm + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_update_migrating_vm_with_metadata` + interceptor in new development instead of the `post_update_migrating_vm` interceptor. + When both interceptors are used, this `post_update_migrating_vm_with_metadata` interceptor runs after the + `post_update_migrating_vm` interceptor. The (possibly modified) response returned by + `post_update_migrating_vm` will be passed to + `post_update_migrating_vm_with_metadata`. + """ + return response, metadata + def pre_update_source( self, request: vmmigration.UpdateSourceRequest, @@ -1528,12 +2540,35 @@ def post_update_source( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_source - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_source_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_update_source` interceptor runs + before the `post_update_source_with_metadata` interceptor. """ return response + def post_update_source_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_source + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_update_source_with_metadata` + interceptor in new development instead of the `post_update_source` interceptor. + When both interceptors are used, this `post_update_source_with_metadata` interceptor runs after the + `post_update_source` interceptor. The (possibly modified) response returned by + `post_update_source` will be passed to + `post_update_source_with_metadata`. + """ + return response, metadata + def pre_update_target_project( self, request: vmmigration.UpdateTargetProjectRequest, @@ -1553,12 +2588,35 @@ def post_update_target_project( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_target_project - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_target_project_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_update_target_project` interceptor runs + before the `post_update_target_project_with_metadata` interceptor. """ return response + def post_update_target_project_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_target_project + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_update_target_project_with_metadata` + interceptor in new development instead of the `post_update_target_project` interceptor. + When both interceptors are used, this `post_update_target_project_with_metadata` interceptor runs after the + `post_update_target_project` interceptor. The (possibly modified) response returned by + `post_update_target_project` will be passed to + `post_update_target_project_with_metadata`. + """ + return response, metadata + def pre_upgrade_appliance( self, request: vmmigration.UpgradeApplianceRequest, @@ -1578,12 +2636,35 @@ def post_upgrade_appliance( ) -> operations_pb2.Operation: """Post-rpc interceptor for upgrade_appliance - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_upgrade_appliance_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmMigration server but before - it is returned to user code. + it is returned to user code. This `post_upgrade_appliance` interceptor runs + before the `post_upgrade_appliance_with_metadata` interceptor. """ return response + def post_upgrade_appliance_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for upgrade_appliance + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmMigration server but before it is returned to user code. + + We recommend only using this `post_upgrade_appliance_with_metadata` + interceptor in new development instead of the `post_upgrade_appliance` interceptor. + When both interceptors are used, this `post_upgrade_appliance_with_metadata` interceptor runs after the + `post_upgrade_appliance` interceptor. The (possibly modified) response returned by + `post_upgrade_appliance` will be passed to + `post_upgrade_appliance_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -1998,6 +3079,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_add_group_migration(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_add_group_migration_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2148,6 +3233,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_cancel_clone_job(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_cancel_clone_job_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2298,6 +3387,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_cancel_cutover_job(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_cancel_cutover_job_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2448,6 +3541,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_clone_job(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_clone_job_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2598,6 +3695,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_cutover_job(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_cutover_job_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2752,6 +3853,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_datacenter_connector(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_datacenter_connector_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2906,6 +4011,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_group(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_group_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3056,6 +4165,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_migrating_vm(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_migrating_vm_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3210,6 +4323,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_source(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_source_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3360,6 +4477,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_target_project(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_target_project_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3510,6 +4631,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_utilization_report(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_utilization_report_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3658,6 +4783,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_datacenter_connector(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_datacenter_connector_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3804,6 +4933,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_group(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_group_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3948,6 +5081,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_migrating_vm(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_migrating_vm_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4094,6 +5231,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_source(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_source_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4238,6 +5379,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_target_project(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_target_project_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4382,6 +5527,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_utilization_report(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_utilization_report_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4525,6 +5674,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_fetch_inventory(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_fetch_inventory_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4677,6 +5830,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_finalize_migration(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_finalize_migration_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4835,6 +5992,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_clone_job(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_clone_job_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4984,6 +6145,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_cutover_job(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_cutover_job_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5134,6 +6299,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_datacenter_connector(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_datacenter_connector_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5280,6 +6449,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_group(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_group_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5426,6 +6599,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_migrating_vm(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_migrating_vm_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5572,6 +6749,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_replication_cycle(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_replication_cycle_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5719,6 +6900,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_source(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_source_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5865,6 +7050,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_target_project(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_target_project_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6011,6 +7200,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_utilization_report(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_utilization_report_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6156,6 +7349,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_clone_jobs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_clone_jobs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6303,6 +7500,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_cutover_jobs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_cutover_jobs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6451,6 +7652,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_datacenter_connectors(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_datacenter_connectors_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6600,6 +7805,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_groups(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_groups_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6745,6 +7954,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_migrating_vms(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_migrating_vms_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6892,6 +8105,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_replication_cycles(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_replication_cycles_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7041,6 +8258,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_sources(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_sources_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7186,6 +8407,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_target_projects(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_target_projects_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7333,6 +8558,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_utilization_reports(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_utilization_reports_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7483,6 +8712,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_pause_migration(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_pause_migration_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7633,6 +8866,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_remove_group_migration(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_remove_group_migration_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7783,6 +9020,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_resume_migration(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_resume_migration_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7931,6 +9172,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_start_migration(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_start_migration_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8085,6 +9330,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_group(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_group_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8235,6 +9484,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_migrating_vm(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_migrating_vm_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8389,6 +9642,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_source(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_source_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8539,6 +9796,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_target_project(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_target_project_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8689,6 +9950,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_upgrade_appliance(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_upgrade_appliance_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vm-migration/samples/generated_samples/snippet_metadata_google.cloud.vmmigration.v1.json b/packages/google-cloud-vm-migration/samples/generated_samples/snippet_metadata_google.cloud.vmmigration.v1.json index 27549ef81af8..cfb6d660b704 100644 --- a/packages/google-cloud-vm-migration/samples/generated_samples/snippet_metadata_google.cloud.vmmigration.v1.json +++ b/packages/google-cloud-vm-migration/samples/generated_samples/snippet_metadata_google.cloud.vmmigration.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-vm-migration", - "version": "1.10.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-vm-migration/tests/unit/gapic/vmmigration_v1/test_vm_migration.py b/packages/google-cloud-vm-migration/tests/unit/gapic/vmmigration_v1/test_vm_migration.py index 8ec167e7c6b2..56e2d13b0c48 100644 --- a/packages/google-cloud-vm-migration/tests/unit/gapic/vmmigration_v1/test_vm_migration.py +++ b/packages/google-cloud-vm-migration/tests/unit/gapic/vmmigration_v1/test_vm_migration.py @@ -80,6 +80,13 @@ ) from google.cloud.vmmigration_v1.types import vmmigration +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -319,6 +326,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VmMigrationClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VmMigrationClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -30633,10 +30683,13 @@ def test_list_sources_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_sources" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_list_sources_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_sources" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListSourcesRequest.pb(vmmigration.ListSourcesRequest()) transcode.return_value = { "method": "post", @@ -30660,6 +30713,7 @@ def test_list_sources_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListSourcesResponse() + post_with_metadata.return_value = vmmigration.ListSourcesResponse(), metadata client.list_sources( request, @@ -30671,6 +30725,7 @@ def test_list_sources_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_source_rest_bad_request(request_type=vmmigration.GetSourceRequest): @@ -30755,10 +30810,13 @@ def test_get_source_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_source" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_get_source_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_source" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetSourceRequest.pb(vmmigration.GetSourceRequest()) transcode.return_value = { "method": "post", @@ -30780,6 +30838,7 @@ def test_get_source_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.Source() + post_with_metadata.return_value = vmmigration.Source(), metadata client.get_source( request, @@ -30791,6 +30850,7 @@ def test_get_source_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_source_rest_bad_request(request_type=vmmigration.CreateSourceRequest): @@ -30974,10 +31034,13 @@ def test_create_source_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_create_source" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_create_source_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_create_source" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CreateSourceRequest.pb( vmmigration.CreateSourceRequest() ) @@ -31001,6 +31064,7 @@ def test_create_source_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_source( request, @@ -31012,6 +31076,7 @@ def test_create_source_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_source_rest_bad_request(request_type=vmmigration.UpdateSourceRequest): @@ -31199,10 +31264,13 @@ def test_update_source_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_update_source" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_update_source_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_update_source" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.UpdateSourceRequest.pb( vmmigration.UpdateSourceRequest() ) @@ -31226,6 +31294,7 @@ def test_update_source_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_source( request, @@ -31237,6 +31306,7 @@ def test_update_source_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_source_rest_bad_request(request_type=vmmigration.DeleteSourceRequest): @@ -31315,10 +31385,13 @@ def test_delete_source_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_delete_source" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_delete_source_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_delete_source" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.DeleteSourceRequest.pb( vmmigration.DeleteSourceRequest() ) @@ -31342,6 +31415,7 @@ def test_delete_source_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_source( request, @@ -31353,6 +31427,7 @@ def test_delete_source_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_fetch_inventory_rest_bad_request( @@ -31434,10 +31509,13 @@ def test_fetch_inventory_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_fetch_inventory" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_fetch_inventory_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_fetch_inventory" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.FetchInventoryRequest.pb( vmmigration.FetchInventoryRequest() ) @@ -31463,6 +31541,7 @@ def test_fetch_inventory_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.FetchInventoryResponse() + post_with_metadata.return_value = vmmigration.FetchInventoryResponse(), metadata client.fetch_inventory( request, @@ -31474,6 +31553,7 @@ def test_fetch_inventory_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_utilization_reports_rest_bad_request( @@ -31560,10 +31640,14 @@ def test_list_utilization_reports_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_utilization_reports" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_list_utilization_reports_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_utilization_reports" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListUtilizationReportsRequest.pb( vmmigration.ListUtilizationReportsRequest() ) @@ -31589,6 +31673,10 @@ def test_list_utilization_reports_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListUtilizationReportsResponse() + post_with_metadata.return_value = ( + vmmigration.ListUtilizationReportsResponse(), + metadata, + ) client.list_utilization_reports( request, @@ -31600,6 +31688,7 @@ def test_list_utilization_reports_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_utilization_report_rest_bad_request( @@ -31696,10 +31785,14 @@ def test_get_utilization_report_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_utilization_report" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_get_utilization_report_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_utilization_report" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetUtilizationReportRequest.pb( vmmigration.GetUtilizationReportRequest() ) @@ -31725,6 +31818,7 @@ def test_get_utilization_report_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.UtilizationReport() + post_with_metadata.return_value = vmmigration.UtilizationReport(), metadata client.get_utilization_report( request, @@ -31736,6 +31830,7 @@ def test_get_utilization_report_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_utilization_report_rest_bad_request( @@ -31934,10 +32029,14 @@ def test_create_utilization_report_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_create_utilization_report" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_create_utilization_report_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_create_utilization_report" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CreateUtilizationReportRequest.pb( vmmigration.CreateUtilizationReportRequest() ) @@ -31961,6 +32060,7 @@ def test_create_utilization_report_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_utilization_report( request, @@ -31972,6 +32072,7 @@ def test_create_utilization_report_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_utilization_report_rest_bad_request( @@ -32056,10 +32157,14 @@ def test_delete_utilization_report_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_delete_utilization_report" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_delete_utilization_report_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_delete_utilization_report" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.DeleteUtilizationReportRequest.pb( vmmigration.DeleteUtilizationReportRequest() ) @@ -32083,6 +32188,7 @@ def test_delete_utilization_report_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_utilization_report( request, @@ -32094,6 +32200,7 @@ def test_delete_utilization_report_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_datacenter_connectors_rest_bad_request( @@ -32180,10 +32287,14 @@ def test_list_datacenter_connectors_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_datacenter_connectors" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_list_datacenter_connectors_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_datacenter_connectors" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListDatacenterConnectorsRequest.pb( vmmigration.ListDatacenterConnectorsRequest() ) @@ -32209,6 +32320,10 @@ def test_list_datacenter_connectors_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListDatacenterConnectorsResponse() + post_with_metadata.return_value = ( + vmmigration.ListDatacenterConnectorsResponse(), + metadata, + ) client.list_datacenter_connectors( request, @@ -32220,6 +32335,7 @@ def test_list_datacenter_connectors_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_datacenter_connector_rest_bad_request( @@ -32325,10 +32441,14 @@ def test_get_datacenter_connector_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_datacenter_connector" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_get_datacenter_connector_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_datacenter_connector" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetDatacenterConnectorRequest.pb( vmmigration.GetDatacenterConnectorRequest() ) @@ -32354,6 +32474,7 @@ def test_get_datacenter_connector_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.DatacenterConnector() + post_with_metadata.return_value = vmmigration.DatacenterConnector(), metadata client.get_datacenter_connector( request, @@ -32365,6 +32486,7 @@ def test_get_datacenter_connector_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_datacenter_connector_rest_bad_request( @@ -32555,10 +32677,14 @@ def test_create_datacenter_connector_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_create_datacenter_connector" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_create_datacenter_connector_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_create_datacenter_connector" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CreateDatacenterConnectorRequest.pb( vmmigration.CreateDatacenterConnectorRequest() ) @@ -32582,6 +32708,7 @@ def test_create_datacenter_connector_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_datacenter_connector( request, @@ -32593,6 +32720,7 @@ def test_create_datacenter_connector_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_datacenter_connector_rest_bad_request( @@ -32677,10 +32805,14 @@ def test_delete_datacenter_connector_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_delete_datacenter_connector" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_delete_datacenter_connector_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_delete_datacenter_connector" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.DeleteDatacenterConnectorRequest.pb( vmmigration.DeleteDatacenterConnectorRequest() ) @@ -32704,6 +32836,7 @@ def test_delete_datacenter_connector_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_datacenter_connector( request, @@ -32715,6 +32848,7 @@ def test_delete_datacenter_connector_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_upgrade_appliance_rest_bad_request( @@ -32799,10 +32933,13 @@ def test_upgrade_appliance_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_upgrade_appliance" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_upgrade_appliance_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_upgrade_appliance" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.UpgradeApplianceRequest.pb( vmmigration.UpgradeApplianceRequest() ) @@ -32826,6 +32963,7 @@ def test_upgrade_appliance_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.upgrade_appliance( request, @@ -32837,6 +32975,7 @@ def test_upgrade_appliance_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_migrating_vm_rest_bad_request( @@ -33143,10 +33282,13 @@ def test_create_migrating_vm_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_create_migrating_vm" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_create_migrating_vm_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_create_migrating_vm" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CreateMigratingVmRequest.pb( vmmigration.CreateMigratingVmRequest() ) @@ -33170,6 +33312,7 @@ def test_create_migrating_vm_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_migrating_vm( request, @@ -33181,6 +33324,7 @@ def test_create_migrating_vm_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_migrating_vms_rest_bad_request( @@ -33267,10 +33411,13 @@ def test_list_migrating_vms_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_migrating_vms" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_list_migrating_vms_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_migrating_vms" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListMigratingVmsRequest.pb( vmmigration.ListMigratingVmsRequest() ) @@ -33296,6 +33443,10 @@ def test_list_migrating_vms_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListMigratingVmsResponse() + post_with_metadata.return_value = ( + vmmigration.ListMigratingVmsResponse(), + metadata, + ) client.list_migrating_vms( request, @@ -33307,6 +33458,7 @@ def test_list_migrating_vms_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_migrating_vm_rest_bad_request( @@ -33405,10 +33557,13 @@ def test_get_migrating_vm_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_migrating_vm" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_get_migrating_vm_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_migrating_vm" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetMigratingVmRequest.pb( vmmigration.GetMigratingVmRequest() ) @@ -33432,6 +33587,7 @@ def test_get_migrating_vm_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.MigratingVm() + post_with_metadata.return_value = vmmigration.MigratingVm(), metadata client.get_migrating_vm( request, @@ -33443,6 +33599,7 @@ def test_get_migrating_vm_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_migrating_vm_rest_bad_request( @@ -33757,10 +33914,13 @@ def test_update_migrating_vm_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_update_migrating_vm" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_update_migrating_vm_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_update_migrating_vm" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.UpdateMigratingVmRequest.pb( vmmigration.UpdateMigratingVmRequest() ) @@ -33784,6 +33944,7 @@ def test_update_migrating_vm_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_migrating_vm( request, @@ -33795,6 +33956,7 @@ def test_update_migrating_vm_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_migrating_vm_rest_bad_request( @@ -33879,10 +34041,13 @@ def test_delete_migrating_vm_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_delete_migrating_vm" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_delete_migrating_vm_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_delete_migrating_vm" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.DeleteMigratingVmRequest.pb( vmmigration.DeleteMigratingVmRequest() ) @@ -33906,6 +34071,7 @@ def test_delete_migrating_vm_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_migrating_vm( request, @@ -33917,6 +34083,7 @@ def test_delete_migrating_vm_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_start_migration_rest_bad_request( @@ -34001,10 +34168,13 @@ def test_start_migration_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_start_migration" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_start_migration_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_start_migration" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.StartMigrationRequest.pb( vmmigration.StartMigrationRequest() ) @@ -34028,6 +34198,7 @@ def test_start_migration_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.start_migration( request, @@ -34039,6 +34210,7 @@ def test_start_migration_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_resume_migration_rest_bad_request( @@ -34123,10 +34295,13 @@ def test_resume_migration_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_resume_migration" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_resume_migration_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_resume_migration" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ResumeMigrationRequest.pb( vmmigration.ResumeMigrationRequest() ) @@ -34150,6 +34325,7 @@ def test_resume_migration_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.resume_migration( request, @@ -34161,6 +34337,7 @@ def test_resume_migration_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_pause_migration_rest_bad_request( @@ -34245,10 +34422,13 @@ def test_pause_migration_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_pause_migration" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_pause_migration_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_pause_migration" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.PauseMigrationRequest.pb( vmmigration.PauseMigrationRequest() ) @@ -34272,6 +34452,7 @@ def test_pause_migration_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.pause_migration( request, @@ -34283,6 +34464,7 @@ def test_pause_migration_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_finalize_migration_rest_bad_request( @@ -34367,10 +34549,13 @@ def test_finalize_migration_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_finalize_migration" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_finalize_migration_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_finalize_migration" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.FinalizeMigrationRequest.pb( vmmigration.FinalizeMigrationRequest() ) @@ -34394,6 +34579,7 @@ def test_finalize_migration_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.finalize_migration( request, @@ -34405,6 +34591,7 @@ def test_finalize_migration_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_clone_job_rest_bad_request( @@ -34623,10 +34810,13 @@ def test_create_clone_job_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_create_clone_job" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_create_clone_job_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_create_clone_job" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CreateCloneJobRequest.pb( vmmigration.CreateCloneJobRequest() ) @@ -34650,6 +34840,7 @@ def test_create_clone_job_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_clone_job( request, @@ -34661,6 +34852,7 @@ def test_create_clone_job_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_clone_job_rest_bad_request( @@ -34745,10 +34937,13 @@ def test_cancel_clone_job_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_cancel_clone_job" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_cancel_clone_job_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_cancel_clone_job" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CancelCloneJobRequest.pb( vmmigration.CancelCloneJobRequest() ) @@ -34772,6 +34967,7 @@ def test_cancel_clone_job_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.cancel_clone_job( request, @@ -34783,6 +34979,7 @@ def test_cancel_clone_job_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_clone_jobs_rest_bad_request( @@ -34873,10 +35070,13 @@ def test_list_clone_jobs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_clone_jobs" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_list_clone_jobs_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_clone_jobs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListCloneJobsRequest.pb( vmmigration.ListCloneJobsRequest() ) @@ -34902,6 +35102,7 @@ def test_list_clone_jobs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListCloneJobsResponse() + post_with_metadata.return_value = vmmigration.ListCloneJobsResponse(), metadata client.list_clone_jobs( request, @@ -34913,6 +35114,7 @@ def test_list_clone_jobs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_clone_job_rest_bad_request(request_type=vmmigration.GetCloneJobRequest): @@ -35001,10 +35203,13 @@ def test_get_clone_job_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_clone_job" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_get_clone_job_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_clone_job" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetCloneJobRequest.pb(vmmigration.GetCloneJobRequest()) transcode.return_value = { "method": "post", @@ -35026,6 +35231,7 @@ def test_get_clone_job_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.CloneJob() + post_with_metadata.return_value = vmmigration.CloneJob(), metadata client.get_clone_job( request, @@ -35037,6 +35243,7 @@ def test_get_clone_job_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_cutover_job_rest_bad_request( @@ -35282,10 +35489,13 @@ def test_create_cutover_job_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_create_cutover_job" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_create_cutover_job_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_create_cutover_job" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CreateCutoverJobRequest.pb( vmmigration.CreateCutoverJobRequest() ) @@ -35309,6 +35519,7 @@ def test_create_cutover_job_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_cutover_job( request, @@ -35320,6 +35531,7 @@ def test_create_cutover_job_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_cutover_job_rest_bad_request( @@ -35404,10 +35616,13 @@ def test_cancel_cutover_job_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_cancel_cutover_job" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_cancel_cutover_job_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_cancel_cutover_job" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CancelCutoverJobRequest.pb( vmmigration.CancelCutoverJobRequest() ) @@ -35431,6 +35646,7 @@ def test_cancel_cutover_job_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.cancel_cutover_job( request, @@ -35442,6 +35658,7 @@ def test_cancel_cutover_job_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_cutover_jobs_rest_bad_request( @@ -35532,10 +35749,13 @@ def test_list_cutover_jobs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_cutover_jobs" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_list_cutover_jobs_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_cutover_jobs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListCutoverJobsRequest.pb( vmmigration.ListCutoverJobsRequest() ) @@ -35561,6 +35781,10 @@ def test_list_cutover_jobs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListCutoverJobsResponse() + post_with_metadata.return_value = ( + vmmigration.ListCutoverJobsResponse(), + metadata, + ) client.list_cutover_jobs( request, @@ -35572,6 +35796,7 @@ def test_list_cutover_jobs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_cutover_job_rest_bad_request( @@ -35666,10 +35891,13 @@ def test_get_cutover_job_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_cutover_job" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_get_cutover_job_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_cutover_job" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetCutoverJobRequest.pb( vmmigration.GetCutoverJobRequest() ) @@ -35693,6 +35921,7 @@ def test_get_cutover_job_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.CutoverJob() + post_with_metadata.return_value = vmmigration.CutoverJob(), metadata client.get_cutover_job( request, @@ -35704,6 +35933,7 @@ def test_get_cutover_job_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_groups_rest_bad_request(request_type=vmmigration.ListGroupsRequest): @@ -35788,10 +36018,13 @@ def test_list_groups_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_groups" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_list_groups_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_groups" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListGroupsRequest.pb(vmmigration.ListGroupsRequest()) transcode.return_value = { "method": "post", @@ -35815,6 +36048,7 @@ def test_list_groups_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListGroupsResponse() + post_with_metadata.return_value = vmmigration.ListGroupsResponse(), metadata client.list_groups( request, @@ -35826,6 +36060,7 @@ def test_list_groups_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_group_rest_bad_request(request_type=vmmigration.GetGroupRequest): @@ -35912,10 +36147,13 @@ def test_get_group_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_group" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_get_group_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_group" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetGroupRequest.pb(vmmigration.GetGroupRequest()) transcode.return_value = { "method": "post", @@ -35937,6 +36175,7 @@ def test_get_group_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.Group() + post_with_metadata.return_value = vmmigration.Group(), metadata client.get_group( request, @@ -35948,6 +36187,7 @@ def test_get_group_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_group_rest_bad_request(request_type=vmmigration.CreateGroupRequest): @@ -36100,10 +36340,13 @@ def test_create_group_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_create_group" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_create_group_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_create_group" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CreateGroupRequest.pb(vmmigration.CreateGroupRequest()) transcode.return_value = { "method": "post", @@ -36125,6 +36368,7 @@ def test_create_group_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_group( request, @@ -36136,6 +36380,7 @@ def test_create_group_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_group_rest_bad_request(request_type=vmmigration.UpdateGroupRequest): @@ -36292,10 +36537,13 @@ def test_update_group_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_update_group" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_update_group_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_update_group" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.UpdateGroupRequest.pb(vmmigration.UpdateGroupRequest()) transcode.return_value = { "method": "post", @@ -36317,6 +36565,7 @@ def test_update_group_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_group( request, @@ -36328,6 +36577,7 @@ def test_update_group_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_group_rest_bad_request(request_type=vmmigration.DeleteGroupRequest): @@ -36406,10 +36656,13 @@ def test_delete_group_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_delete_group" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_delete_group_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_delete_group" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.DeleteGroupRequest.pb(vmmigration.DeleteGroupRequest()) transcode.return_value = { "method": "post", @@ -36431,6 +36684,7 @@ def test_delete_group_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_group( request, @@ -36442,6 +36696,7 @@ def test_delete_group_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_add_group_migration_rest_bad_request( @@ -36522,10 +36777,13 @@ def test_add_group_migration_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_add_group_migration" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_add_group_migration_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_add_group_migration" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.AddGroupMigrationRequest.pb( vmmigration.AddGroupMigrationRequest() ) @@ -36549,6 +36807,7 @@ def test_add_group_migration_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.add_group_migration( request, @@ -36560,6 +36819,7 @@ def test_add_group_migration_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_remove_group_migration_rest_bad_request( @@ -36640,10 +36900,14 @@ def test_remove_group_migration_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_remove_group_migration" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_remove_group_migration_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_remove_group_migration" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.RemoveGroupMigrationRequest.pb( vmmigration.RemoveGroupMigrationRequest() ) @@ -36667,6 +36931,7 @@ def test_remove_group_migration_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.remove_group_migration( request, @@ -36678,6 +36943,7 @@ def test_remove_group_migration_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_target_projects_rest_bad_request( @@ -36764,10 +37030,13 @@ def test_list_target_projects_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_target_projects" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_list_target_projects_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_target_projects" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListTargetProjectsRequest.pb( vmmigration.ListTargetProjectsRequest() ) @@ -36793,6 +37062,10 @@ def test_list_target_projects_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListTargetProjectsResponse() + post_with_metadata.return_value = ( + vmmigration.ListTargetProjectsResponse(), + metadata, + ) client.list_target_projects( request, @@ -36804,6 +37077,7 @@ def test_list_target_projects_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_target_project_rest_bad_request( @@ -36892,10 +37166,13 @@ def test_get_target_project_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_target_project" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, "post_get_target_project_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_target_project" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetTargetProjectRequest.pb( vmmigration.GetTargetProjectRequest() ) @@ -36919,6 +37196,7 @@ def test_get_target_project_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.TargetProject() + post_with_metadata.return_value = vmmigration.TargetProject(), metadata client.get_target_project( request, @@ -36930,6 +37208,7 @@ def test_get_target_project_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_target_project_rest_bad_request( @@ -37084,10 +37363,14 @@ def test_create_target_project_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_create_target_project" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_create_target_project_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_create_target_project" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.CreateTargetProjectRequest.pb( vmmigration.CreateTargetProjectRequest() ) @@ -37111,6 +37394,7 @@ def test_create_target_project_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_target_project( request, @@ -37122,6 +37406,7 @@ def test_create_target_project_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_target_project_rest_bad_request( @@ -37284,10 +37569,14 @@ def test_update_target_project_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_update_target_project" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_update_target_project_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_update_target_project" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.UpdateTargetProjectRequest.pb( vmmigration.UpdateTargetProjectRequest() ) @@ -37311,6 +37600,7 @@ def test_update_target_project_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_target_project( request, @@ -37322,6 +37612,7 @@ def test_update_target_project_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_target_project_rest_bad_request( @@ -37402,10 +37693,14 @@ def test_delete_target_project_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmMigrationRestInterceptor, "post_delete_target_project" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_delete_target_project_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_delete_target_project" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.DeleteTargetProjectRequest.pb( vmmigration.DeleteTargetProjectRequest() ) @@ -37429,6 +37724,7 @@ def test_delete_target_project_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_target_project( request, @@ -37440,6 +37736,7 @@ def test_delete_target_project_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_replication_cycles_rest_bad_request( @@ -37530,10 +37827,14 @@ def test_list_replication_cycles_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_list_replication_cycles" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_list_replication_cycles_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_list_replication_cycles" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.ListReplicationCyclesRequest.pb( vmmigration.ListReplicationCyclesRequest() ) @@ -37559,6 +37860,10 @@ def test_list_replication_cycles_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ListReplicationCyclesResponse() + post_with_metadata.return_value = ( + vmmigration.ListReplicationCyclesResponse(), + metadata, + ) client.list_replication_cycles( request, @@ -37570,6 +37875,7 @@ def test_list_replication_cycles_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_replication_cycle_rest_bad_request( @@ -37664,10 +37970,14 @@ def test_get_replication_cycle_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmMigrationRestInterceptor, "post_get_replication_cycle" ) as post, mock.patch.object( + transports.VmMigrationRestInterceptor, + "post_get_replication_cycle_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmMigrationRestInterceptor, "pre_get_replication_cycle" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmmigration.GetReplicationCycleRequest.pb( vmmigration.GetReplicationCycleRequest() ) @@ -37693,6 +38003,7 @@ def test_get_replication_cycle_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmmigration.ReplicationCycle() + post_with_metadata.return_value = vmmigration.ReplicationCycle(), metadata client.get_replication_cycle( request, @@ -37704,6 +38015,7 @@ def test_get_replication_cycle_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-vmwareengine/google/cloud/vmwareengine/gapic_version.py b/packages/google-cloud-vmwareengine/google/cloud/vmwareengine/gapic_version.py index 2264bb35fa20..558c8aab67c5 100644 --- a/packages/google-cloud-vmwareengine/google/cloud/vmwareengine/gapic_version.py +++ b/packages/google-cloud-vmwareengine/google/cloud/vmwareengine/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.7.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/gapic_version.py b/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/gapic_version.py index 2264bb35fa20..558c8aab67c5 100644 --- a/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/gapic_version.py +++ b/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.7.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/services/vmware_engine/client.py b/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/services/vmware_engine/client.py index dc91f0f6f43d..dbd54d368414 100644 --- a/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/services/vmware_engine/client.py +++ b/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/services/vmware_engine/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -857,6 +859,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -11038,16 +11067,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -11093,16 +11126,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -11270,16 +11307,20 @@ def set_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_iam_policy( self, @@ -11392,16 +11433,20 @@ def get_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def test_iam_permissions( self, @@ -11452,16 +11497,20 @@ def test_iam_permissions( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_location( self, @@ -11507,16 +11556,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -11562,16 +11615,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/services/vmware_engine/transports/rest.py b/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/services/vmware_engine/transports/rest.py index 92229beb1391..e8a515f78cec 100644 --- a/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/services/vmware_engine/transports/rest.py +++ b/packages/google-cloud-vmwareengine/google/cloud/vmwareengine_v1/services/vmware_engine/transports/rest.py @@ -689,12 +689,35 @@ def post_create_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_cluster` interceptor runs + before the `post_create_cluster_with_metadata` interceptor. """ return response + def post_create_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_cluster_with_metadata` + interceptor in new development instead of the `post_create_cluster` interceptor. + When both interceptors are used, this `post_create_cluster_with_metadata` interceptor runs after the + `post_create_cluster` interceptor. The (possibly modified) response returned by + `post_create_cluster` will be passed to + `post_create_cluster_with_metadata`. + """ + return response, metadata + def pre_create_external_access_rule( self, request: vmwareengine.CreateExternalAccessRuleRequest, @@ -715,12 +738,35 @@ def post_create_external_access_rule( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_external_access_rule - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_external_access_rule_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_external_access_rule` interceptor runs + before the `post_create_external_access_rule_with_metadata` interceptor. """ return response + def post_create_external_access_rule_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_external_access_rule + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_external_access_rule_with_metadata` + interceptor in new development instead of the `post_create_external_access_rule` interceptor. + When both interceptors are used, this `post_create_external_access_rule_with_metadata` interceptor runs after the + `post_create_external_access_rule` interceptor. The (possibly modified) response returned by + `post_create_external_access_rule` will be passed to + `post_create_external_access_rule_with_metadata`. + """ + return response, metadata + def pre_create_external_address( self, request: vmwareengine.CreateExternalAddressRequest, @@ -741,12 +787,35 @@ def post_create_external_address( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_external_address - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_external_address_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_external_address` interceptor runs + before the `post_create_external_address_with_metadata` interceptor. """ return response + def post_create_external_address_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_external_address + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_external_address_with_metadata` + interceptor in new development instead of the `post_create_external_address` interceptor. + When both interceptors are used, this `post_create_external_address_with_metadata` interceptor runs after the + `post_create_external_address` interceptor. The (possibly modified) response returned by + `post_create_external_address` will be passed to + `post_create_external_address_with_metadata`. + """ + return response, metadata + def pre_create_hcx_activation_key( self, request: vmwareengine.CreateHcxActivationKeyRequest, @@ -767,12 +836,35 @@ def post_create_hcx_activation_key( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_hcx_activation_key - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_hcx_activation_key_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_hcx_activation_key` interceptor runs + before the `post_create_hcx_activation_key_with_metadata` interceptor. """ return response + def post_create_hcx_activation_key_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_hcx_activation_key + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_hcx_activation_key_with_metadata` + interceptor in new development instead of the `post_create_hcx_activation_key` interceptor. + When both interceptors are used, this `post_create_hcx_activation_key_with_metadata` interceptor runs after the + `post_create_hcx_activation_key` interceptor. The (possibly modified) response returned by + `post_create_hcx_activation_key` will be passed to + `post_create_hcx_activation_key_with_metadata`. + """ + return response, metadata + def pre_create_logging_server( self, request: vmwareengine.CreateLoggingServerRequest, @@ -792,12 +884,35 @@ def post_create_logging_server( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_logging_server - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_logging_server_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_logging_server` interceptor runs + before the `post_create_logging_server_with_metadata` interceptor. """ return response + def post_create_logging_server_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_logging_server + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_logging_server_with_metadata` + interceptor in new development instead of the `post_create_logging_server` interceptor. + When both interceptors are used, this `post_create_logging_server_with_metadata` interceptor runs after the + `post_create_logging_server` interceptor. The (possibly modified) response returned by + `post_create_logging_server` will be passed to + `post_create_logging_server_with_metadata`. + """ + return response, metadata + def pre_create_management_dns_zone_binding( self, request: vmwareengine.CreateManagementDnsZoneBindingRequest, @@ -818,12 +933,35 @@ def post_create_management_dns_zone_binding( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_management_dns_zone_binding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_management_dns_zone_binding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_management_dns_zone_binding` interceptor runs + before the `post_create_management_dns_zone_binding_with_metadata` interceptor. """ return response + def post_create_management_dns_zone_binding_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_management_dns_zone_binding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_management_dns_zone_binding_with_metadata` + interceptor in new development instead of the `post_create_management_dns_zone_binding` interceptor. + When both interceptors are used, this `post_create_management_dns_zone_binding_with_metadata` interceptor runs after the + `post_create_management_dns_zone_binding` interceptor. The (possibly modified) response returned by + `post_create_management_dns_zone_binding` will be passed to + `post_create_management_dns_zone_binding_with_metadata`. + """ + return response, metadata + def pre_create_network_peering( self, request: vmwareengine.CreateNetworkPeeringRequest, @@ -844,12 +982,35 @@ def post_create_network_peering( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_network_peering - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_network_peering_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_network_peering` interceptor runs + before the `post_create_network_peering_with_metadata` interceptor. """ return response + def post_create_network_peering_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_network_peering + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_network_peering_with_metadata` + interceptor in new development instead of the `post_create_network_peering` interceptor. + When both interceptors are used, this `post_create_network_peering_with_metadata` interceptor runs after the + `post_create_network_peering` interceptor. The (possibly modified) response returned by + `post_create_network_peering` will be passed to + `post_create_network_peering_with_metadata`. + """ + return response, metadata + def pre_create_network_policy( self, request: vmwareengine.CreateNetworkPolicyRequest, @@ -869,12 +1030,35 @@ def post_create_network_policy( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_network_policy - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_network_policy_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_network_policy` interceptor runs + before the `post_create_network_policy_with_metadata` interceptor. """ return response + def post_create_network_policy_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_network_policy + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_network_policy_with_metadata` + interceptor in new development instead of the `post_create_network_policy` interceptor. + When both interceptors are used, this `post_create_network_policy_with_metadata` interceptor runs after the + `post_create_network_policy` interceptor. The (possibly modified) response returned by + `post_create_network_policy` will be passed to + `post_create_network_policy_with_metadata`. + """ + return response, metadata + def pre_create_private_cloud( self, request: vmwareengine.CreatePrivateCloudRequest, @@ -894,12 +1078,35 @@ def post_create_private_cloud( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_private_cloud - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_private_cloud_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_private_cloud` interceptor runs + before the `post_create_private_cloud_with_metadata` interceptor. """ return response + def post_create_private_cloud_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_private_cloud + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_private_cloud_with_metadata` + interceptor in new development instead of the `post_create_private_cloud` interceptor. + When both interceptors are used, this `post_create_private_cloud_with_metadata` interceptor runs after the + `post_create_private_cloud` interceptor. The (possibly modified) response returned by + `post_create_private_cloud` will be passed to + `post_create_private_cloud_with_metadata`. + """ + return response, metadata + def pre_create_private_connection( self, request: vmwareengine.CreatePrivateConnectionRequest, @@ -920,12 +1127,35 @@ def post_create_private_connection( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_private_connection - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_private_connection_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_private_connection` interceptor runs + before the `post_create_private_connection_with_metadata` interceptor. """ return response + def post_create_private_connection_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_private_connection + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_private_connection_with_metadata` + interceptor in new development instead of the `post_create_private_connection` interceptor. + When both interceptors are used, this `post_create_private_connection_with_metadata` interceptor runs after the + `post_create_private_connection` interceptor. The (possibly modified) response returned by + `post_create_private_connection` will be passed to + `post_create_private_connection_with_metadata`. + """ + return response, metadata + def pre_create_vmware_engine_network( self, request: vmwareengine.CreateVmwareEngineNetworkRequest, @@ -946,12 +1176,35 @@ def post_create_vmware_engine_network( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_vmware_engine_network - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_vmware_engine_network_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_create_vmware_engine_network` interceptor runs + before the `post_create_vmware_engine_network_with_metadata` interceptor. """ return response + def post_create_vmware_engine_network_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_vmware_engine_network + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_create_vmware_engine_network_with_metadata` + interceptor in new development instead of the `post_create_vmware_engine_network` interceptor. + When both interceptors are used, this `post_create_vmware_engine_network_with_metadata` interceptor runs after the + `post_create_vmware_engine_network` interceptor. The (possibly modified) response returned by + `post_create_vmware_engine_network` will be passed to + `post_create_vmware_engine_network_with_metadata`. + """ + return response, metadata + def pre_delete_cluster( self, request: vmwareengine.DeleteClusterRequest, @@ -971,12 +1224,35 @@ def post_delete_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_cluster` interceptor runs + before the `post_delete_cluster_with_metadata` interceptor. """ return response + def post_delete_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_cluster_with_metadata` + interceptor in new development instead of the `post_delete_cluster` interceptor. + When both interceptors are used, this `post_delete_cluster_with_metadata` interceptor runs after the + `post_delete_cluster` interceptor. The (possibly modified) response returned by + `post_delete_cluster` will be passed to + `post_delete_cluster_with_metadata`. + """ + return response, metadata + def pre_delete_external_access_rule( self, request: vmwareengine.DeleteExternalAccessRuleRequest, @@ -997,12 +1273,35 @@ def post_delete_external_access_rule( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_external_access_rule - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_external_access_rule_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_external_access_rule` interceptor runs + before the `post_delete_external_access_rule_with_metadata` interceptor. """ return response + def post_delete_external_access_rule_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_external_access_rule + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_external_access_rule_with_metadata` + interceptor in new development instead of the `post_delete_external_access_rule` interceptor. + When both interceptors are used, this `post_delete_external_access_rule_with_metadata` interceptor runs after the + `post_delete_external_access_rule` interceptor. The (possibly modified) response returned by + `post_delete_external_access_rule` will be passed to + `post_delete_external_access_rule_with_metadata`. + """ + return response, metadata + def pre_delete_external_address( self, request: vmwareengine.DeleteExternalAddressRequest, @@ -1023,12 +1322,35 @@ def post_delete_external_address( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_external_address - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_external_address_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_external_address` interceptor runs + before the `post_delete_external_address_with_metadata` interceptor. """ return response + def post_delete_external_address_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_external_address + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_external_address_with_metadata` + interceptor in new development instead of the `post_delete_external_address` interceptor. + When both interceptors are used, this `post_delete_external_address_with_metadata` interceptor runs after the + `post_delete_external_address` interceptor. The (possibly modified) response returned by + `post_delete_external_address` will be passed to + `post_delete_external_address_with_metadata`. + """ + return response, metadata + def pre_delete_logging_server( self, request: vmwareengine.DeleteLoggingServerRequest, @@ -1048,12 +1370,35 @@ def post_delete_logging_server( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_logging_server - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_logging_server_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_logging_server` interceptor runs + before the `post_delete_logging_server_with_metadata` interceptor. """ return response + def post_delete_logging_server_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_logging_server + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_logging_server_with_metadata` + interceptor in new development instead of the `post_delete_logging_server` interceptor. + When both interceptors are used, this `post_delete_logging_server_with_metadata` interceptor runs after the + `post_delete_logging_server` interceptor. The (possibly modified) response returned by + `post_delete_logging_server` will be passed to + `post_delete_logging_server_with_metadata`. + """ + return response, metadata + def pre_delete_management_dns_zone_binding( self, request: vmwareengine.DeleteManagementDnsZoneBindingRequest, @@ -1074,12 +1419,35 @@ def post_delete_management_dns_zone_binding( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_management_dns_zone_binding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_management_dns_zone_binding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_management_dns_zone_binding` interceptor runs + before the `post_delete_management_dns_zone_binding_with_metadata` interceptor. """ return response + def post_delete_management_dns_zone_binding_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_management_dns_zone_binding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_management_dns_zone_binding_with_metadata` + interceptor in new development instead of the `post_delete_management_dns_zone_binding` interceptor. + When both interceptors are used, this `post_delete_management_dns_zone_binding_with_metadata` interceptor runs after the + `post_delete_management_dns_zone_binding` interceptor. The (possibly modified) response returned by + `post_delete_management_dns_zone_binding` will be passed to + `post_delete_management_dns_zone_binding_with_metadata`. + """ + return response, metadata + def pre_delete_network_peering( self, request: vmwareengine.DeleteNetworkPeeringRequest, @@ -1100,12 +1468,35 @@ def post_delete_network_peering( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_network_peering - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_network_peering_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_network_peering` interceptor runs + before the `post_delete_network_peering_with_metadata` interceptor. """ return response + def post_delete_network_peering_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_network_peering + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_network_peering_with_metadata` + interceptor in new development instead of the `post_delete_network_peering` interceptor. + When both interceptors are used, this `post_delete_network_peering_with_metadata` interceptor runs after the + `post_delete_network_peering` interceptor. The (possibly modified) response returned by + `post_delete_network_peering` will be passed to + `post_delete_network_peering_with_metadata`. + """ + return response, metadata + def pre_delete_network_policy( self, request: vmwareengine.DeleteNetworkPolicyRequest, @@ -1125,12 +1516,35 @@ def post_delete_network_policy( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_network_policy - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_network_policy_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_network_policy` interceptor runs + before the `post_delete_network_policy_with_metadata` interceptor. """ return response + def post_delete_network_policy_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_network_policy + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_network_policy_with_metadata` + interceptor in new development instead of the `post_delete_network_policy` interceptor. + When both interceptors are used, this `post_delete_network_policy_with_metadata` interceptor runs after the + `post_delete_network_policy` interceptor. The (possibly modified) response returned by + `post_delete_network_policy` will be passed to + `post_delete_network_policy_with_metadata`. + """ + return response, metadata + def pre_delete_private_cloud( self, request: vmwareengine.DeletePrivateCloudRequest, @@ -1150,12 +1564,35 @@ def post_delete_private_cloud( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_private_cloud - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_private_cloud_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_private_cloud` interceptor runs + before the `post_delete_private_cloud_with_metadata` interceptor. """ return response + def post_delete_private_cloud_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_private_cloud + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_private_cloud_with_metadata` + interceptor in new development instead of the `post_delete_private_cloud` interceptor. + When both interceptors are used, this `post_delete_private_cloud_with_metadata` interceptor runs after the + `post_delete_private_cloud` interceptor. The (possibly modified) response returned by + `post_delete_private_cloud` will be passed to + `post_delete_private_cloud_with_metadata`. + """ + return response, metadata + def pre_delete_private_connection( self, request: vmwareengine.DeletePrivateConnectionRequest, @@ -1176,12 +1613,35 @@ def post_delete_private_connection( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_private_connection - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_private_connection_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_private_connection` interceptor runs + before the `post_delete_private_connection_with_metadata` interceptor. """ return response + def post_delete_private_connection_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_private_connection + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_private_connection_with_metadata` + interceptor in new development instead of the `post_delete_private_connection` interceptor. + When both interceptors are used, this `post_delete_private_connection_with_metadata` interceptor runs after the + `post_delete_private_connection` interceptor. The (possibly modified) response returned by + `post_delete_private_connection` will be passed to + `post_delete_private_connection_with_metadata`. + """ + return response, metadata + def pre_delete_vmware_engine_network( self, request: vmwareengine.DeleteVmwareEngineNetworkRequest, @@ -1202,12 +1662,35 @@ def post_delete_vmware_engine_network( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_vmware_engine_network - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_vmware_engine_network_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_delete_vmware_engine_network` interceptor runs + before the `post_delete_vmware_engine_network_with_metadata` interceptor. """ return response + def post_delete_vmware_engine_network_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_vmware_engine_network + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_delete_vmware_engine_network_with_metadata` + interceptor in new development instead of the `post_delete_vmware_engine_network` interceptor. + When both interceptors are used, this `post_delete_vmware_engine_network_with_metadata` interceptor runs after the + `post_delete_vmware_engine_network` interceptor. The (possibly modified) response returned by + `post_delete_vmware_engine_network` will be passed to + `post_delete_vmware_engine_network_with_metadata`. + """ + return response, metadata + def pre_fetch_network_policy_external_addresses( self, request: vmwareengine.FetchNetworkPolicyExternalAddressesRequest, @@ -1228,12 +1711,38 @@ def post_fetch_network_policy_external_addresses( ) -> vmwareengine.FetchNetworkPolicyExternalAddressesResponse: """Post-rpc interceptor for fetch_network_policy_external_addresses - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_fetch_network_policy_external_addresses_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_fetch_network_policy_external_addresses` interceptor runs + before the `post_fetch_network_policy_external_addresses_with_metadata` interceptor. """ return response + def post_fetch_network_policy_external_addresses_with_metadata( + self, + response: vmwareengine.FetchNetworkPolicyExternalAddressesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.FetchNetworkPolicyExternalAddressesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for fetch_network_policy_external_addresses + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_fetch_network_policy_external_addresses_with_metadata` + interceptor in new development instead of the `post_fetch_network_policy_external_addresses` interceptor. + When both interceptors are used, this `post_fetch_network_policy_external_addresses_with_metadata` interceptor runs after the + `post_fetch_network_policy_external_addresses` interceptor. The (possibly modified) response returned by + `post_fetch_network_policy_external_addresses` will be passed to + `post_fetch_network_policy_external_addresses_with_metadata`. + """ + return response, metadata + def pre_get_cluster( self, request: vmwareengine.GetClusterRequest, @@ -1251,12 +1760,35 @@ def post_get_cluster( ) -> vmwareengine_resources.Cluster: """Post-rpc interceptor for get_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_cluster` interceptor runs + before the `post_get_cluster_with_metadata` interceptor. """ return response + def post_get_cluster_with_metadata( + self, + response: vmwareengine_resources.Cluster, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmwareengine_resources.Cluster, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_cluster_with_metadata` + interceptor in new development instead of the `post_get_cluster` interceptor. + When both interceptors are used, this `post_get_cluster_with_metadata` interceptor runs after the + `post_get_cluster` interceptor. The (possibly modified) response returned by + `post_get_cluster` will be passed to + `post_get_cluster_with_metadata`. + """ + return response, metadata + def pre_get_dns_bind_permission( self, request: vmwareengine.GetDnsBindPermissionRequest, @@ -1277,12 +1809,38 @@ def post_get_dns_bind_permission( ) -> vmwareengine_resources.DnsBindPermission: """Post-rpc interceptor for get_dns_bind_permission - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_dns_bind_permission_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_dns_bind_permission` interceptor runs + before the `post_get_dns_bind_permission_with_metadata` interceptor. """ return response + def post_get_dns_bind_permission_with_metadata( + self, + response: vmwareengine_resources.DnsBindPermission, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.DnsBindPermission, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for get_dns_bind_permission + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_dns_bind_permission_with_metadata` + interceptor in new development instead of the `post_get_dns_bind_permission` interceptor. + When both interceptors are used, this `post_get_dns_bind_permission_with_metadata` interceptor runs after the + `post_get_dns_bind_permission` interceptor. The (possibly modified) response returned by + `post_get_dns_bind_permission` will be passed to + `post_get_dns_bind_permission_with_metadata`. + """ + return response, metadata + def pre_get_dns_forwarding( self, request: vmwareengine.GetDnsForwardingRequest, @@ -1302,21 +1860,46 @@ def post_get_dns_forwarding( ) -> vmwareengine_resources.DnsForwarding: """Post-rpc interceptor for get_dns_forwarding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_dns_forwarding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_dns_forwarding` interceptor runs + before the `post_get_dns_forwarding_with_metadata` interceptor. """ return response - def pre_get_external_access_rule( + def post_get_dns_forwarding_with_metadata( self, - request: vmwareengine.GetExternalAccessRuleRequest, + response: vmwareengine_resources.DnsForwarding, metadata: Sequence[Tuple[str, Union[str, bytes]]], ) -> Tuple[ - vmwareengine.GetExternalAccessRuleRequest, - Sequence[Tuple[str, Union[str, bytes]]], + vmwareengine_resources.DnsForwarding, Sequence[Tuple[str, Union[str, bytes]]] ]: - """Pre-rpc interceptor for get_external_access_rule + """Post-rpc interceptor for get_dns_forwarding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_dns_forwarding_with_metadata` + interceptor in new development instead of the `post_get_dns_forwarding` interceptor. + When both interceptors are used, this `post_get_dns_forwarding_with_metadata` interceptor runs after the + `post_get_dns_forwarding` interceptor. The (possibly modified) response returned by + `post_get_dns_forwarding` will be passed to + `post_get_dns_forwarding_with_metadata`. + """ + return response, metadata + + def pre_get_external_access_rule( + self, + request: vmwareengine.GetExternalAccessRuleRequest, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.GetExternalAccessRuleRequest, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Pre-rpc interceptor for get_external_access_rule Override in a subclass to manipulate the request or metadata before they are sent to the VmwareEngine server. @@ -1328,12 +1911,38 @@ def post_get_external_access_rule( ) -> vmwareengine_resources.ExternalAccessRule: """Post-rpc interceptor for get_external_access_rule - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_external_access_rule_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_external_access_rule` interceptor runs + before the `post_get_external_access_rule_with_metadata` interceptor. """ return response + def post_get_external_access_rule_with_metadata( + self, + response: vmwareengine_resources.ExternalAccessRule, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.ExternalAccessRule, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for get_external_access_rule + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_external_access_rule_with_metadata` + interceptor in new development instead of the `post_get_external_access_rule` interceptor. + When both interceptors are used, this `post_get_external_access_rule_with_metadata` interceptor runs after the + `post_get_external_access_rule` interceptor. The (possibly modified) response returned by + `post_get_external_access_rule` will be passed to + `post_get_external_access_rule_with_metadata`. + """ + return response, metadata + def pre_get_external_address( self, request: vmwareengine.GetExternalAddressRequest, @@ -1353,12 +1962,37 @@ def post_get_external_address( ) -> vmwareengine_resources.ExternalAddress: """Post-rpc interceptor for get_external_address - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_external_address_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_external_address` interceptor runs + before the `post_get_external_address_with_metadata` interceptor. """ return response + def post_get_external_address_with_metadata( + self, + response: vmwareengine_resources.ExternalAddress, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.ExternalAddress, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_external_address + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_external_address_with_metadata` + interceptor in new development instead of the `post_get_external_address` interceptor. + When both interceptors are used, this `post_get_external_address_with_metadata` interceptor runs after the + `post_get_external_address` interceptor. The (possibly modified) response returned by + `post_get_external_address` will be passed to + `post_get_external_address_with_metadata`. + """ + return response, metadata + def pre_get_hcx_activation_key( self, request: vmwareengine.GetHcxActivationKeyRequest, @@ -1378,12 +2012,37 @@ def post_get_hcx_activation_key( ) -> vmwareengine_resources.HcxActivationKey: """Post-rpc interceptor for get_hcx_activation_key - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_hcx_activation_key_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_hcx_activation_key` interceptor runs + before the `post_get_hcx_activation_key_with_metadata` interceptor. """ return response + def post_get_hcx_activation_key_with_metadata( + self, + response: vmwareengine_resources.HcxActivationKey, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.HcxActivationKey, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_hcx_activation_key + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_hcx_activation_key_with_metadata` + interceptor in new development instead of the `post_get_hcx_activation_key` interceptor. + When both interceptors are used, this `post_get_hcx_activation_key_with_metadata` interceptor runs after the + `post_get_hcx_activation_key` interceptor. The (possibly modified) response returned by + `post_get_hcx_activation_key` will be passed to + `post_get_hcx_activation_key_with_metadata`. + """ + return response, metadata + def pre_get_logging_server( self, request: vmwareengine.GetLoggingServerRequest, @@ -1403,12 +2062,37 @@ def post_get_logging_server( ) -> vmwareengine_resources.LoggingServer: """Post-rpc interceptor for get_logging_server - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_logging_server_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_logging_server` interceptor runs + before the `post_get_logging_server_with_metadata` interceptor. """ return response + def post_get_logging_server_with_metadata( + self, + response: vmwareengine_resources.LoggingServer, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.LoggingServer, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_logging_server + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_logging_server_with_metadata` + interceptor in new development instead of the `post_get_logging_server` interceptor. + When both interceptors are used, this `post_get_logging_server_with_metadata` interceptor runs after the + `post_get_logging_server` interceptor. The (possibly modified) response returned by + `post_get_logging_server` will be passed to + `post_get_logging_server_with_metadata`. + """ + return response, metadata + def pre_get_management_dns_zone_binding( self, request: vmwareengine.GetManagementDnsZoneBindingRequest, @@ -1429,12 +2113,38 @@ def post_get_management_dns_zone_binding( ) -> vmwareengine_resources.ManagementDnsZoneBinding: """Post-rpc interceptor for get_management_dns_zone_binding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_management_dns_zone_binding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_management_dns_zone_binding` interceptor runs + before the `post_get_management_dns_zone_binding_with_metadata` interceptor. """ return response + def post_get_management_dns_zone_binding_with_metadata( + self, + response: vmwareengine_resources.ManagementDnsZoneBinding, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.ManagementDnsZoneBinding, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for get_management_dns_zone_binding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_management_dns_zone_binding_with_metadata` + interceptor in new development instead of the `post_get_management_dns_zone_binding` interceptor. + When both interceptors are used, this `post_get_management_dns_zone_binding_with_metadata` interceptor runs after the + `post_get_management_dns_zone_binding` interceptor. The (possibly modified) response returned by + `post_get_management_dns_zone_binding` will be passed to + `post_get_management_dns_zone_binding_with_metadata`. + """ + return response, metadata + def pre_get_network_peering( self, request: vmwareengine.GetNetworkPeeringRequest, @@ -1454,12 +2164,37 @@ def post_get_network_peering( ) -> vmwareengine_resources.NetworkPeering: """Post-rpc interceptor for get_network_peering - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_network_peering_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_network_peering` interceptor runs + before the `post_get_network_peering_with_metadata` interceptor. """ return response + def post_get_network_peering_with_metadata( + self, + response: vmwareengine_resources.NetworkPeering, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.NetworkPeering, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_network_peering + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_network_peering_with_metadata` + interceptor in new development instead of the `post_get_network_peering` interceptor. + When both interceptors are used, this `post_get_network_peering_with_metadata` interceptor runs after the + `post_get_network_peering` interceptor. The (possibly modified) response returned by + `post_get_network_peering` will be passed to + `post_get_network_peering_with_metadata`. + """ + return response, metadata + def pre_get_network_policy( self, request: vmwareengine.GetNetworkPolicyRequest, @@ -1479,12 +2214,37 @@ def post_get_network_policy( ) -> vmwareengine_resources.NetworkPolicy: """Post-rpc interceptor for get_network_policy - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_network_policy_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_network_policy` interceptor runs + before the `post_get_network_policy_with_metadata` interceptor. """ return response + def post_get_network_policy_with_metadata( + self, + response: vmwareengine_resources.NetworkPolicy, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.NetworkPolicy, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_network_policy + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_network_policy_with_metadata` + interceptor in new development instead of the `post_get_network_policy` interceptor. + When both interceptors are used, this `post_get_network_policy_with_metadata` interceptor runs after the + `post_get_network_policy` interceptor. The (possibly modified) response returned by + `post_get_network_policy` will be passed to + `post_get_network_policy_with_metadata`. + """ + return response, metadata + def pre_get_node( self, request: vmwareengine.GetNodeRequest, @@ -1502,12 +2262,35 @@ def post_get_node( ) -> vmwareengine_resources.Node: """Post-rpc interceptor for get_node - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_node_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_node` interceptor runs + before the `post_get_node_with_metadata` interceptor. """ return response + def post_get_node_with_metadata( + self, + response: vmwareengine_resources.Node, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmwareengine_resources.Node, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_node + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_node_with_metadata` + interceptor in new development instead of the `post_get_node` interceptor. + When both interceptors are used, this `post_get_node_with_metadata` interceptor runs after the + `post_get_node` interceptor. The (possibly modified) response returned by + `post_get_node` will be passed to + `post_get_node_with_metadata`. + """ + return response, metadata + def pre_get_node_type( self, request: vmwareengine.GetNodeTypeRequest, @@ -1527,12 +2310,37 @@ def post_get_node_type( ) -> vmwareengine_resources.NodeType: """Post-rpc interceptor for get_node_type - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_node_type_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_node_type` interceptor runs + before the `post_get_node_type_with_metadata` interceptor. """ return response + def post_get_node_type_with_metadata( + self, + response: vmwareengine_resources.NodeType, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.NodeType, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_node_type + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_node_type_with_metadata` + interceptor in new development instead of the `post_get_node_type` interceptor. + When both interceptors are used, this `post_get_node_type_with_metadata` interceptor runs after the + `post_get_node_type` interceptor. The (possibly modified) response returned by + `post_get_node_type` will be passed to + `post_get_node_type_with_metadata`. + """ + return response, metadata + def pre_get_private_cloud( self, request: vmwareengine.GetPrivateCloudRequest, @@ -1552,12 +2360,37 @@ def post_get_private_cloud( ) -> vmwareengine_resources.PrivateCloud: """Post-rpc interceptor for get_private_cloud - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_private_cloud_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_private_cloud` interceptor runs + before the `post_get_private_cloud_with_metadata` interceptor. """ return response + def post_get_private_cloud_with_metadata( + self, + response: vmwareengine_resources.PrivateCloud, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.PrivateCloud, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_private_cloud + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_private_cloud_with_metadata` + interceptor in new development instead of the `post_get_private_cloud` interceptor. + When both interceptors are used, this `post_get_private_cloud_with_metadata` interceptor runs after the + `post_get_private_cloud` interceptor. The (possibly modified) response returned by + `post_get_private_cloud` will be passed to + `post_get_private_cloud_with_metadata`. + """ + return response, metadata + def pre_get_private_connection( self, request: vmwareengine.GetPrivateConnectionRequest, @@ -1578,12 +2411,38 @@ def post_get_private_connection( ) -> vmwareengine_resources.PrivateConnection: """Post-rpc interceptor for get_private_connection - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_private_connection_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_private_connection` interceptor runs + before the `post_get_private_connection_with_metadata` interceptor. """ return response + def post_get_private_connection_with_metadata( + self, + response: vmwareengine_resources.PrivateConnection, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.PrivateConnection, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for get_private_connection + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_private_connection_with_metadata` + interceptor in new development instead of the `post_get_private_connection` interceptor. + When both interceptors are used, this `post_get_private_connection_with_metadata` interceptor runs after the + `post_get_private_connection` interceptor. The (possibly modified) response returned by + `post_get_private_connection` will be passed to + `post_get_private_connection_with_metadata`. + """ + return response, metadata + def pre_get_subnet( self, request: vmwareengine.GetSubnetRequest, @@ -1601,12 +2460,35 @@ def post_get_subnet( ) -> vmwareengine_resources.Subnet: """Post-rpc interceptor for get_subnet - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_subnet_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_subnet` interceptor runs + before the `post_get_subnet_with_metadata` interceptor. """ return response + def post_get_subnet_with_metadata( + self, + response: vmwareengine_resources.Subnet, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmwareengine_resources.Subnet, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_subnet + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_subnet_with_metadata` + interceptor in new development instead of the `post_get_subnet` interceptor. + When both interceptors are used, this `post_get_subnet_with_metadata` interceptor runs after the + `post_get_subnet` interceptor. The (possibly modified) response returned by + `post_get_subnet` will be passed to + `post_get_subnet_with_metadata`. + """ + return response, metadata + def pre_get_vmware_engine_network( self, request: vmwareengine.GetVmwareEngineNetworkRequest, @@ -1627,12 +2509,38 @@ def post_get_vmware_engine_network( ) -> vmwareengine_resources.VmwareEngineNetwork: """Post-rpc interceptor for get_vmware_engine_network - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_vmware_engine_network_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_get_vmware_engine_network` interceptor runs + before the `post_get_vmware_engine_network_with_metadata` interceptor. """ return response + def post_get_vmware_engine_network_with_metadata( + self, + response: vmwareengine_resources.VmwareEngineNetwork, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.VmwareEngineNetwork, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for get_vmware_engine_network + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_get_vmware_engine_network_with_metadata` + interceptor in new development instead of the `post_get_vmware_engine_network` interceptor. + When both interceptors are used, this `post_get_vmware_engine_network_with_metadata` interceptor runs after the + `post_get_vmware_engine_network` interceptor. The (possibly modified) response returned by + `post_get_vmware_engine_network` will be passed to + `post_get_vmware_engine_network_with_metadata`. + """ + return response, metadata + def pre_grant_dns_bind_permission( self, request: vmwareengine.GrantDnsBindPermissionRequest, @@ -1653,12 +2561,35 @@ def post_grant_dns_bind_permission( ) -> operations_pb2.Operation: """Post-rpc interceptor for grant_dns_bind_permission - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_grant_dns_bind_permission_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_grant_dns_bind_permission` interceptor runs + before the `post_grant_dns_bind_permission_with_metadata` interceptor. """ return response + def post_grant_dns_bind_permission_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for grant_dns_bind_permission + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_grant_dns_bind_permission_with_metadata` + interceptor in new development instead of the `post_grant_dns_bind_permission` interceptor. + When both interceptors are used, this `post_grant_dns_bind_permission_with_metadata` interceptor runs after the + `post_grant_dns_bind_permission` interceptor. The (possibly modified) response returned by + `post_grant_dns_bind_permission` will be passed to + `post_grant_dns_bind_permission_with_metadata`. + """ + return response, metadata + def pre_list_clusters( self, request: vmwareengine.ListClustersRequest, @@ -1678,12 +2609,37 @@ def post_list_clusters( ) -> vmwareengine.ListClustersResponse: """Post-rpc interceptor for list_clusters - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_clusters_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_clusters` interceptor runs + before the `post_list_clusters_with_metadata` interceptor. """ return response + def post_list_clusters_with_metadata( + self, + response: vmwareengine.ListClustersResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListClustersResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_clusters + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_clusters_with_metadata` + interceptor in new development instead of the `post_list_clusters` interceptor. + When both interceptors are used, this `post_list_clusters_with_metadata` interceptor runs after the + `post_list_clusters` interceptor. The (possibly modified) response returned by + `post_list_clusters` will be passed to + `post_list_clusters_with_metadata`. + """ + return response, metadata + def pre_list_external_access_rules( self, request: vmwareengine.ListExternalAccessRulesRequest, @@ -1704,12 +2660,38 @@ def post_list_external_access_rules( ) -> vmwareengine.ListExternalAccessRulesResponse: """Post-rpc interceptor for list_external_access_rules - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_external_access_rules_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_external_access_rules` interceptor runs + before the `post_list_external_access_rules_with_metadata` interceptor. """ return response + def post_list_external_access_rules_with_metadata( + self, + response: vmwareengine.ListExternalAccessRulesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListExternalAccessRulesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_external_access_rules + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_external_access_rules_with_metadata` + interceptor in new development instead of the `post_list_external_access_rules` interceptor. + When both interceptors are used, this `post_list_external_access_rules_with_metadata` interceptor runs after the + `post_list_external_access_rules` interceptor. The (possibly modified) response returned by + `post_list_external_access_rules` will be passed to + `post_list_external_access_rules_with_metadata`. + """ + return response, metadata + def pre_list_external_addresses( self, request: vmwareengine.ListExternalAddressesRequest, @@ -1730,12 +2712,38 @@ def post_list_external_addresses( ) -> vmwareengine.ListExternalAddressesResponse: """Post-rpc interceptor for list_external_addresses - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_external_addresses_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_external_addresses` interceptor runs + before the `post_list_external_addresses_with_metadata` interceptor. """ return response + def post_list_external_addresses_with_metadata( + self, + response: vmwareengine.ListExternalAddressesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListExternalAddressesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_external_addresses + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_external_addresses_with_metadata` + interceptor in new development instead of the `post_list_external_addresses` interceptor. + When both interceptors are used, this `post_list_external_addresses_with_metadata` interceptor runs after the + `post_list_external_addresses` interceptor. The (possibly modified) response returned by + `post_list_external_addresses` will be passed to + `post_list_external_addresses_with_metadata`. + """ + return response, metadata + def pre_list_hcx_activation_keys( self, request: vmwareengine.ListHcxActivationKeysRequest, @@ -1756,12 +2764,38 @@ def post_list_hcx_activation_keys( ) -> vmwareengine.ListHcxActivationKeysResponse: """Post-rpc interceptor for list_hcx_activation_keys - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_hcx_activation_keys_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_hcx_activation_keys` interceptor runs + before the `post_list_hcx_activation_keys_with_metadata` interceptor. """ return response + def post_list_hcx_activation_keys_with_metadata( + self, + response: vmwareengine.ListHcxActivationKeysResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListHcxActivationKeysResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_hcx_activation_keys + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_hcx_activation_keys_with_metadata` + interceptor in new development instead of the `post_list_hcx_activation_keys` interceptor. + When both interceptors are used, this `post_list_hcx_activation_keys_with_metadata` interceptor runs after the + `post_list_hcx_activation_keys` interceptor. The (possibly modified) response returned by + `post_list_hcx_activation_keys` will be passed to + `post_list_hcx_activation_keys_with_metadata`. + """ + return response, metadata + def pre_list_logging_servers( self, request: vmwareengine.ListLoggingServersRequest, @@ -1781,12 +2815,37 @@ def post_list_logging_servers( ) -> vmwareengine.ListLoggingServersResponse: """Post-rpc interceptor for list_logging_servers - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_logging_servers_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_logging_servers` interceptor runs + before the `post_list_logging_servers_with_metadata` interceptor. """ return response + def post_list_logging_servers_with_metadata( + self, + response: vmwareengine.ListLoggingServersResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListLoggingServersResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_logging_servers + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_logging_servers_with_metadata` + interceptor in new development instead of the `post_list_logging_servers` interceptor. + When both interceptors are used, this `post_list_logging_servers_with_metadata` interceptor runs after the + `post_list_logging_servers` interceptor. The (possibly modified) response returned by + `post_list_logging_servers` will be passed to + `post_list_logging_servers_with_metadata`. + """ + return response, metadata + def pre_list_management_dns_zone_bindings( self, request: vmwareengine.ListManagementDnsZoneBindingsRequest, @@ -1807,12 +2866,38 @@ def post_list_management_dns_zone_bindings( ) -> vmwareengine.ListManagementDnsZoneBindingsResponse: """Post-rpc interceptor for list_management_dns_zone_bindings - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_management_dns_zone_bindings_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_management_dns_zone_bindings` interceptor runs + before the `post_list_management_dns_zone_bindings_with_metadata` interceptor. """ return response + def post_list_management_dns_zone_bindings_with_metadata( + self, + response: vmwareengine.ListManagementDnsZoneBindingsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListManagementDnsZoneBindingsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_management_dns_zone_bindings + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_management_dns_zone_bindings_with_metadata` + interceptor in new development instead of the `post_list_management_dns_zone_bindings` interceptor. + When both interceptors are used, this `post_list_management_dns_zone_bindings_with_metadata` interceptor runs after the + `post_list_management_dns_zone_bindings` interceptor. The (possibly modified) response returned by + `post_list_management_dns_zone_bindings` will be passed to + `post_list_management_dns_zone_bindings_with_metadata`. + """ + return response, metadata + def pre_list_network_peerings( self, request: vmwareengine.ListNetworkPeeringsRequest, @@ -1832,12 +2917,38 @@ def post_list_network_peerings( ) -> vmwareengine.ListNetworkPeeringsResponse: """Post-rpc interceptor for list_network_peerings - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_network_peerings_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_network_peerings` interceptor runs + before the `post_list_network_peerings_with_metadata` interceptor. """ return response + def post_list_network_peerings_with_metadata( + self, + response: vmwareengine.ListNetworkPeeringsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListNetworkPeeringsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_network_peerings + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_network_peerings_with_metadata` + interceptor in new development instead of the `post_list_network_peerings` interceptor. + When both interceptors are used, this `post_list_network_peerings_with_metadata` interceptor runs after the + `post_list_network_peerings` interceptor. The (possibly modified) response returned by + `post_list_network_peerings` will be passed to + `post_list_network_peerings_with_metadata`. + """ + return response, metadata + def pre_list_network_policies( self, request: vmwareengine.ListNetworkPoliciesRequest, @@ -1857,12 +2968,38 @@ def post_list_network_policies( ) -> vmwareengine.ListNetworkPoliciesResponse: """Post-rpc interceptor for list_network_policies - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_network_policies_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_network_policies` interceptor runs + before the `post_list_network_policies_with_metadata` interceptor. """ return response + def post_list_network_policies_with_metadata( + self, + response: vmwareengine.ListNetworkPoliciesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListNetworkPoliciesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_network_policies + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_network_policies_with_metadata` + interceptor in new development instead of the `post_list_network_policies` interceptor. + When both interceptors are used, this `post_list_network_policies_with_metadata` interceptor runs after the + `post_list_network_policies` interceptor. The (possibly modified) response returned by + `post_list_network_policies` will be passed to + `post_list_network_policies_with_metadata`. + """ + return response, metadata + def pre_list_nodes( self, request: vmwareengine.ListNodesRequest, @@ -1880,12 +3017,35 @@ def post_list_nodes( ) -> vmwareengine.ListNodesResponse: """Post-rpc interceptor for list_nodes - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_nodes_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_nodes` interceptor runs + before the `post_list_nodes_with_metadata` interceptor. """ return response + def post_list_nodes_with_metadata( + self, + response: vmwareengine.ListNodesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vmwareengine.ListNodesResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_nodes + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_nodes_with_metadata` + interceptor in new development instead of the `post_list_nodes` interceptor. + When both interceptors are used, this `post_list_nodes_with_metadata` interceptor runs after the + `post_list_nodes` interceptor. The (possibly modified) response returned by + `post_list_nodes` will be passed to + `post_list_nodes_with_metadata`. + """ + return response, metadata + def pre_list_node_types( self, request: vmwareengine.ListNodeTypesRequest, @@ -1905,12 +3065,37 @@ def post_list_node_types( ) -> vmwareengine.ListNodeTypesResponse: """Post-rpc interceptor for list_node_types - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_node_types_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_node_types` interceptor runs + before the `post_list_node_types_with_metadata` interceptor. """ return response + def post_list_node_types_with_metadata( + self, + response: vmwareengine.ListNodeTypesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListNodeTypesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_node_types + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_node_types_with_metadata` + interceptor in new development instead of the `post_list_node_types` interceptor. + When both interceptors are used, this `post_list_node_types_with_metadata` interceptor runs after the + `post_list_node_types` interceptor. The (possibly modified) response returned by + `post_list_node_types` will be passed to + `post_list_node_types_with_metadata`. + """ + return response, metadata + def pre_list_peering_routes( self, request: vmwareengine.ListPeeringRoutesRequest, @@ -1930,12 +3115,37 @@ def post_list_peering_routes( ) -> vmwareengine.ListPeeringRoutesResponse: """Post-rpc interceptor for list_peering_routes - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_peering_routes_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_peering_routes` interceptor runs + before the `post_list_peering_routes_with_metadata` interceptor. """ return response + def post_list_peering_routes_with_metadata( + self, + response: vmwareengine.ListPeeringRoutesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListPeeringRoutesResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_peering_routes + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_peering_routes_with_metadata` + interceptor in new development instead of the `post_list_peering_routes` interceptor. + When both interceptors are used, this `post_list_peering_routes_with_metadata` interceptor runs after the + `post_list_peering_routes` interceptor. The (possibly modified) response returned by + `post_list_peering_routes` will be passed to + `post_list_peering_routes_with_metadata`. + """ + return response, metadata + def pre_list_private_clouds( self, request: vmwareengine.ListPrivateCloudsRequest, @@ -1955,12 +3165,37 @@ def post_list_private_clouds( ) -> vmwareengine.ListPrivateCloudsResponse: """Post-rpc interceptor for list_private_clouds - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_private_clouds_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_private_clouds` interceptor runs + before the `post_list_private_clouds_with_metadata` interceptor. """ return response + def post_list_private_clouds_with_metadata( + self, + response: vmwareengine.ListPrivateCloudsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListPrivateCloudsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_private_clouds + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_private_clouds_with_metadata` + interceptor in new development instead of the `post_list_private_clouds` interceptor. + When both interceptors are used, this `post_list_private_clouds_with_metadata` interceptor runs after the + `post_list_private_clouds` interceptor. The (possibly modified) response returned by + `post_list_private_clouds` will be passed to + `post_list_private_clouds_with_metadata`. + """ + return response, metadata + def pre_list_private_connection_peering_routes( self, request: vmwareengine.ListPrivateConnectionPeeringRoutesRequest, @@ -1981,12 +3216,38 @@ def post_list_private_connection_peering_routes( ) -> vmwareengine.ListPrivateConnectionPeeringRoutesResponse: """Post-rpc interceptor for list_private_connection_peering_routes - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_private_connection_peering_routes_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_private_connection_peering_routes` interceptor runs + before the `post_list_private_connection_peering_routes_with_metadata` interceptor. """ return response + def post_list_private_connection_peering_routes_with_metadata( + self, + response: vmwareengine.ListPrivateConnectionPeeringRoutesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListPrivateConnectionPeeringRoutesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_private_connection_peering_routes + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_private_connection_peering_routes_with_metadata` + interceptor in new development instead of the `post_list_private_connection_peering_routes` interceptor. + When both interceptors are used, this `post_list_private_connection_peering_routes_with_metadata` interceptor runs after the + `post_list_private_connection_peering_routes` interceptor. The (possibly modified) response returned by + `post_list_private_connection_peering_routes` will be passed to + `post_list_private_connection_peering_routes_with_metadata`. + """ + return response, metadata + def pre_list_private_connections( self, request: vmwareengine.ListPrivateConnectionsRequest, @@ -2007,12 +3268,38 @@ def post_list_private_connections( ) -> vmwareengine.ListPrivateConnectionsResponse: """Post-rpc interceptor for list_private_connections - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_private_connections_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_private_connections` interceptor runs + before the `post_list_private_connections_with_metadata` interceptor. """ return response + def post_list_private_connections_with_metadata( + self, + response: vmwareengine.ListPrivateConnectionsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListPrivateConnectionsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_private_connections + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_private_connections_with_metadata` + interceptor in new development instead of the `post_list_private_connections` interceptor. + When both interceptors are used, this `post_list_private_connections_with_metadata` interceptor runs after the + `post_list_private_connections` interceptor. The (possibly modified) response returned by + `post_list_private_connections` will be passed to + `post_list_private_connections_with_metadata`. + """ + return response, metadata + def pre_list_subnets( self, request: vmwareengine.ListSubnetsRequest, @@ -2032,12 +3319,37 @@ def post_list_subnets( ) -> vmwareengine.ListSubnetsResponse: """Post-rpc interceptor for list_subnets - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_subnets_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_subnets` interceptor runs + before the `post_list_subnets_with_metadata` interceptor. """ return response + def post_list_subnets_with_metadata( + self, + response: vmwareengine.ListSubnetsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListSubnetsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_subnets + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_subnets_with_metadata` + interceptor in new development instead of the `post_list_subnets` interceptor. + When both interceptors are used, this `post_list_subnets_with_metadata` interceptor runs after the + `post_list_subnets` interceptor. The (possibly modified) response returned by + `post_list_subnets` will be passed to + `post_list_subnets_with_metadata`. + """ + return response, metadata + def pre_list_vmware_engine_networks( self, request: vmwareengine.ListVmwareEngineNetworksRequest, @@ -2058,12 +3370,38 @@ def post_list_vmware_engine_networks( ) -> vmwareengine.ListVmwareEngineNetworksResponse: """Post-rpc interceptor for list_vmware_engine_networks - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_vmware_engine_networks_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_list_vmware_engine_networks` interceptor runs + before the `post_list_vmware_engine_networks_with_metadata` interceptor. """ return response + def post_list_vmware_engine_networks_with_metadata( + self, + response: vmwareengine.ListVmwareEngineNetworksResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine.ListVmwareEngineNetworksResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_vmware_engine_networks + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_list_vmware_engine_networks_with_metadata` + interceptor in new development instead of the `post_list_vmware_engine_networks` interceptor. + When both interceptors are used, this `post_list_vmware_engine_networks_with_metadata` interceptor runs after the + `post_list_vmware_engine_networks` interceptor. The (possibly modified) response returned by + `post_list_vmware_engine_networks` will be passed to + `post_list_vmware_engine_networks_with_metadata`. + """ + return response, metadata + def pre_repair_management_dns_zone_binding( self, request: vmwareengine.RepairManagementDnsZoneBindingRequest, @@ -2084,12 +3422,35 @@ def post_repair_management_dns_zone_binding( ) -> operations_pb2.Operation: """Post-rpc interceptor for repair_management_dns_zone_binding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_repair_management_dns_zone_binding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_repair_management_dns_zone_binding` interceptor runs + before the `post_repair_management_dns_zone_binding_with_metadata` interceptor. """ return response + def post_repair_management_dns_zone_binding_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for repair_management_dns_zone_binding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_repair_management_dns_zone_binding_with_metadata` + interceptor in new development instead of the `post_repair_management_dns_zone_binding` interceptor. + When both interceptors are used, this `post_repair_management_dns_zone_binding_with_metadata` interceptor runs after the + `post_repair_management_dns_zone_binding` interceptor. The (possibly modified) response returned by + `post_repair_management_dns_zone_binding` will be passed to + `post_repair_management_dns_zone_binding_with_metadata`. + """ + return response, metadata + def pre_reset_nsx_credentials( self, request: vmwareengine.ResetNsxCredentialsRequest, @@ -2109,12 +3470,35 @@ def post_reset_nsx_credentials( ) -> operations_pb2.Operation: """Post-rpc interceptor for reset_nsx_credentials - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_reset_nsx_credentials_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_reset_nsx_credentials` interceptor runs + before the `post_reset_nsx_credentials_with_metadata` interceptor. """ return response + def post_reset_nsx_credentials_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for reset_nsx_credentials + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_reset_nsx_credentials_with_metadata` + interceptor in new development instead of the `post_reset_nsx_credentials` interceptor. + When both interceptors are used, this `post_reset_nsx_credentials_with_metadata` interceptor runs after the + `post_reset_nsx_credentials` interceptor. The (possibly modified) response returned by + `post_reset_nsx_credentials` will be passed to + `post_reset_nsx_credentials_with_metadata`. + """ + return response, metadata + def pre_reset_vcenter_credentials( self, request: vmwareengine.ResetVcenterCredentialsRequest, @@ -2135,12 +3519,35 @@ def post_reset_vcenter_credentials( ) -> operations_pb2.Operation: """Post-rpc interceptor for reset_vcenter_credentials - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_reset_vcenter_credentials_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_reset_vcenter_credentials` interceptor runs + before the `post_reset_vcenter_credentials_with_metadata` interceptor. """ return response + def post_reset_vcenter_credentials_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for reset_vcenter_credentials + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_reset_vcenter_credentials_with_metadata` + interceptor in new development instead of the `post_reset_vcenter_credentials` interceptor. + When both interceptors are used, this `post_reset_vcenter_credentials_with_metadata` interceptor runs after the + `post_reset_vcenter_credentials` interceptor. The (possibly modified) response returned by + `post_reset_vcenter_credentials` will be passed to + `post_reset_vcenter_credentials_with_metadata`. + """ + return response, metadata + def pre_revoke_dns_bind_permission( self, request: vmwareengine.RevokeDnsBindPermissionRequest, @@ -2161,12 +3568,35 @@ def post_revoke_dns_bind_permission( ) -> operations_pb2.Operation: """Post-rpc interceptor for revoke_dns_bind_permission - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_revoke_dns_bind_permission_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_revoke_dns_bind_permission` interceptor runs + before the `post_revoke_dns_bind_permission_with_metadata` interceptor. """ return response + def post_revoke_dns_bind_permission_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for revoke_dns_bind_permission + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_revoke_dns_bind_permission_with_metadata` + interceptor in new development instead of the `post_revoke_dns_bind_permission` interceptor. + When both interceptors are used, this `post_revoke_dns_bind_permission_with_metadata` interceptor runs after the + `post_revoke_dns_bind_permission` interceptor. The (possibly modified) response returned by + `post_revoke_dns_bind_permission` will be passed to + `post_revoke_dns_bind_permission_with_metadata`. + """ + return response, metadata + def pre_show_nsx_credentials( self, request: vmwareengine.ShowNsxCredentialsRequest, @@ -2186,12 +3616,37 @@ def post_show_nsx_credentials( ) -> vmwareengine_resources.Credentials: """Post-rpc interceptor for show_nsx_credentials - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_show_nsx_credentials_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_show_nsx_credentials` interceptor runs + before the `post_show_nsx_credentials_with_metadata` interceptor. """ return response + def post_show_nsx_credentials_with_metadata( + self, + response: vmwareengine_resources.Credentials, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.Credentials, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for show_nsx_credentials + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_show_nsx_credentials_with_metadata` + interceptor in new development instead of the `post_show_nsx_credentials` interceptor. + When both interceptors are used, this `post_show_nsx_credentials_with_metadata` interceptor runs after the + `post_show_nsx_credentials` interceptor. The (possibly modified) response returned by + `post_show_nsx_credentials` will be passed to + `post_show_nsx_credentials_with_metadata`. + """ + return response, metadata + def pre_show_vcenter_credentials( self, request: vmwareengine.ShowVcenterCredentialsRequest, @@ -2212,12 +3667,37 @@ def post_show_vcenter_credentials( ) -> vmwareengine_resources.Credentials: """Post-rpc interceptor for show_vcenter_credentials - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_show_vcenter_credentials_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_show_vcenter_credentials` interceptor runs + before the `post_show_vcenter_credentials_with_metadata` interceptor. """ return response + def post_show_vcenter_credentials_with_metadata( + self, + response: vmwareengine_resources.Credentials, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vmwareengine_resources.Credentials, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for show_vcenter_credentials + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_show_vcenter_credentials_with_metadata` + interceptor in new development instead of the `post_show_vcenter_credentials` interceptor. + When both interceptors are used, this `post_show_vcenter_credentials_with_metadata` interceptor runs after the + `post_show_vcenter_credentials` interceptor. The (possibly modified) response returned by + `post_show_vcenter_credentials` will be passed to + `post_show_vcenter_credentials_with_metadata`. + """ + return response, metadata + def pre_undelete_private_cloud( self, request: vmwareengine.UndeletePrivateCloudRequest, @@ -2238,12 +3718,35 @@ def post_undelete_private_cloud( ) -> operations_pb2.Operation: """Post-rpc interceptor for undelete_private_cloud - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_undelete_private_cloud_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_undelete_private_cloud` interceptor runs + before the `post_undelete_private_cloud_with_metadata` interceptor. """ return response + def post_undelete_private_cloud_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for undelete_private_cloud + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_undelete_private_cloud_with_metadata` + interceptor in new development instead of the `post_undelete_private_cloud` interceptor. + When both interceptors are used, this `post_undelete_private_cloud_with_metadata` interceptor runs after the + `post_undelete_private_cloud` interceptor. The (possibly modified) response returned by + `post_undelete_private_cloud` will be passed to + `post_undelete_private_cloud_with_metadata`. + """ + return response, metadata + def pre_update_cluster( self, request: vmwareengine.UpdateClusterRequest, @@ -2263,12 +3766,35 @@ def post_update_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_cluster` interceptor runs + before the `post_update_cluster_with_metadata` interceptor. """ return response + def post_update_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_cluster_with_metadata` + interceptor in new development instead of the `post_update_cluster` interceptor. + When both interceptors are used, this `post_update_cluster_with_metadata` interceptor runs after the + `post_update_cluster` interceptor. The (possibly modified) response returned by + `post_update_cluster` will be passed to + `post_update_cluster_with_metadata`. + """ + return response, metadata + def pre_update_dns_forwarding( self, request: vmwareengine.UpdateDnsForwardingRequest, @@ -2288,12 +3814,35 @@ def post_update_dns_forwarding( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_dns_forwarding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_dns_forwarding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_dns_forwarding` interceptor runs + before the `post_update_dns_forwarding_with_metadata` interceptor. """ return response + def post_update_dns_forwarding_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_dns_forwarding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_dns_forwarding_with_metadata` + interceptor in new development instead of the `post_update_dns_forwarding` interceptor. + When both interceptors are used, this `post_update_dns_forwarding_with_metadata` interceptor runs after the + `post_update_dns_forwarding` interceptor. The (possibly modified) response returned by + `post_update_dns_forwarding` will be passed to + `post_update_dns_forwarding_with_metadata`. + """ + return response, metadata + def pre_update_external_access_rule( self, request: vmwareengine.UpdateExternalAccessRuleRequest, @@ -2314,12 +3863,35 @@ def post_update_external_access_rule( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_external_access_rule - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_external_access_rule_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_external_access_rule` interceptor runs + before the `post_update_external_access_rule_with_metadata` interceptor. """ return response + def post_update_external_access_rule_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_external_access_rule + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_external_access_rule_with_metadata` + interceptor in new development instead of the `post_update_external_access_rule` interceptor. + When both interceptors are used, this `post_update_external_access_rule_with_metadata` interceptor runs after the + `post_update_external_access_rule` interceptor. The (possibly modified) response returned by + `post_update_external_access_rule` will be passed to + `post_update_external_access_rule_with_metadata`. + """ + return response, metadata + def pre_update_external_address( self, request: vmwareengine.UpdateExternalAddressRequest, @@ -2340,12 +3912,35 @@ def post_update_external_address( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_external_address - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_external_address_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_external_address` interceptor runs + before the `post_update_external_address_with_metadata` interceptor. """ return response + def post_update_external_address_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_external_address + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_external_address_with_metadata` + interceptor in new development instead of the `post_update_external_address` interceptor. + When both interceptors are used, this `post_update_external_address_with_metadata` interceptor runs after the + `post_update_external_address` interceptor. The (possibly modified) response returned by + `post_update_external_address` will be passed to + `post_update_external_address_with_metadata`. + """ + return response, metadata + def pre_update_logging_server( self, request: vmwareengine.UpdateLoggingServerRequest, @@ -2365,12 +3960,35 @@ def post_update_logging_server( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_logging_server - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_logging_server_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_logging_server` interceptor runs + before the `post_update_logging_server_with_metadata` interceptor. """ return response + def post_update_logging_server_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_logging_server + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_logging_server_with_metadata` + interceptor in new development instead of the `post_update_logging_server` interceptor. + When both interceptors are used, this `post_update_logging_server_with_metadata` interceptor runs after the + `post_update_logging_server` interceptor. The (possibly modified) response returned by + `post_update_logging_server` will be passed to + `post_update_logging_server_with_metadata`. + """ + return response, metadata + def pre_update_management_dns_zone_binding( self, request: vmwareengine.UpdateManagementDnsZoneBindingRequest, @@ -2391,12 +4009,35 @@ def post_update_management_dns_zone_binding( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_management_dns_zone_binding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_management_dns_zone_binding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_management_dns_zone_binding` interceptor runs + before the `post_update_management_dns_zone_binding_with_metadata` interceptor. """ return response + def post_update_management_dns_zone_binding_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_management_dns_zone_binding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_management_dns_zone_binding_with_metadata` + interceptor in new development instead of the `post_update_management_dns_zone_binding` interceptor. + When both interceptors are used, this `post_update_management_dns_zone_binding_with_metadata` interceptor runs after the + `post_update_management_dns_zone_binding` interceptor. The (possibly modified) response returned by + `post_update_management_dns_zone_binding` will be passed to + `post_update_management_dns_zone_binding_with_metadata`. + """ + return response, metadata + def pre_update_network_peering( self, request: vmwareengine.UpdateNetworkPeeringRequest, @@ -2417,12 +4058,35 @@ def post_update_network_peering( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_network_peering - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_network_peering_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_network_peering` interceptor runs + before the `post_update_network_peering_with_metadata` interceptor. """ return response + def post_update_network_peering_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_network_peering + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_network_peering_with_metadata` + interceptor in new development instead of the `post_update_network_peering` interceptor. + When both interceptors are used, this `post_update_network_peering_with_metadata` interceptor runs after the + `post_update_network_peering` interceptor. The (possibly modified) response returned by + `post_update_network_peering` will be passed to + `post_update_network_peering_with_metadata`. + """ + return response, metadata + def pre_update_network_policy( self, request: vmwareengine.UpdateNetworkPolicyRequest, @@ -2442,12 +4106,35 @@ def post_update_network_policy( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_network_policy - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_network_policy_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_network_policy` interceptor runs + before the `post_update_network_policy_with_metadata` interceptor. """ return response + def post_update_network_policy_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_network_policy + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_network_policy_with_metadata` + interceptor in new development instead of the `post_update_network_policy` interceptor. + When both interceptors are used, this `post_update_network_policy_with_metadata` interceptor runs after the + `post_update_network_policy` interceptor. The (possibly modified) response returned by + `post_update_network_policy` will be passed to + `post_update_network_policy_with_metadata`. + """ + return response, metadata + def pre_update_private_cloud( self, request: vmwareengine.UpdatePrivateCloudRequest, @@ -2467,12 +4154,35 @@ def post_update_private_cloud( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_private_cloud - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_private_cloud_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_private_cloud` interceptor runs + before the `post_update_private_cloud_with_metadata` interceptor. """ return response + def post_update_private_cloud_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_private_cloud + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_private_cloud_with_metadata` + interceptor in new development instead of the `post_update_private_cloud` interceptor. + When both interceptors are used, this `post_update_private_cloud_with_metadata` interceptor runs after the + `post_update_private_cloud` interceptor. The (possibly modified) response returned by + `post_update_private_cloud` will be passed to + `post_update_private_cloud_with_metadata`. + """ + return response, metadata + def pre_update_private_connection( self, request: vmwareengine.UpdatePrivateConnectionRequest, @@ -2493,12 +4203,35 @@ def post_update_private_connection( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_private_connection - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_private_connection_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_private_connection` interceptor runs + before the `post_update_private_connection_with_metadata` interceptor. """ return response + def post_update_private_connection_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_private_connection + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_private_connection_with_metadata` + interceptor in new development instead of the `post_update_private_connection` interceptor. + When both interceptors are used, this `post_update_private_connection_with_metadata` interceptor runs after the + `post_update_private_connection` interceptor. The (possibly modified) response returned by + `post_update_private_connection` will be passed to + `post_update_private_connection_with_metadata`. + """ + return response, metadata + def pre_update_subnet( self, request: vmwareengine.UpdateSubnetRequest, @@ -2518,12 +4251,35 @@ def post_update_subnet( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_subnet - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_subnet_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_subnet` interceptor runs + before the `post_update_subnet_with_metadata` interceptor. """ return response + def post_update_subnet_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_subnet + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_subnet_with_metadata` + interceptor in new development instead of the `post_update_subnet` interceptor. + When both interceptors are used, this `post_update_subnet_with_metadata` interceptor runs after the + `post_update_subnet` interceptor. The (possibly modified) response returned by + `post_update_subnet` will be passed to + `post_update_subnet_with_metadata`. + """ + return response, metadata + def pre_update_vmware_engine_network( self, request: vmwareengine.UpdateVmwareEngineNetworkRequest, @@ -2544,12 +4300,35 @@ def post_update_vmware_engine_network( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_vmware_engine_network - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_vmware_engine_network_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VmwareEngine server but before - it is returned to user code. + it is returned to user code. This `post_update_vmware_engine_network` interceptor runs + before the `post_update_vmware_engine_network_with_metadata` interceptor. """ return response + def post_update_vmware_engine_network_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_vmware_engine_network + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VmwareEngine server but before it is returned to user code. + + We recommend only using this `post_update_vmware_engine_network_with_metadata` + interceptor in new development instead of the `post_update_vmware_engine_network` interceptor. + When both interceptors are used, this `post_update_vmware_engine_network_with_metadata` interceptor runs after the + `post_update_vmware_engine_network` interceptor. The (possibly modified) response returned by + `post_update_vmware_engine_network` will be passed to + `post_update_vmware_engine_network_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -3004,6 +4783,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3158,6 +4941,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_external_access_rule(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_external_access_rule_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3308,6 +5095,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_external_address(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_external_address_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3458,6 +5249,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_hcx_activation_key(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_hcx_activation_key_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3608,6 +5403,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_logging_server(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_logging_server_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3765,6 +5564,13 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_management_dns_zone_binding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_create_management_dns_zone_binding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3915,6 +5721,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_network_peering(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_network_peering_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4065,6 +5875,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_network_policy(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_network_policy_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4215,6 +6029,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_private_cloud(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_private_cloud_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4366,6 +6184,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_private_connection(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_private_connection_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4520,6 +6342,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_vmware_engine_network(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_vmware_engine_network_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4662,6 +6488,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4810,6 +6640,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_external_access_rule(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_external_access_rule_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4954,6 +6788,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_external_address(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_external_address_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5098,6 +6936,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_logging_server(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_logging_server_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5249,6 +7091,13 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_management_dns_zone_binding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_delete_management_dns_zone_binding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5393,6 +7242,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_network_peering(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_network_peering_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5537,6 +7390,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_network_policy(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_network_policy_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5681,6 +7538,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_private_cloud(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_private_cloud_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5826,6 +7687,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_private_connection(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_private_connection_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -5974,6 +7839,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_vmware_engine_network(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_vmware_engine_network_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6124,6 +7993,13 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_fetch_network_policy_external_addresses(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_fetch_network_policy_external_addresses_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6271,6 +8147,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6419,6 +8299,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_dns_bind_permission(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_dns_bind_permission_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6569,6 +8453,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_dns_forwarding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_dns_forwarding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6716,6 +8604,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_external_access_rule(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_external_access_rule_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -6864,6 +8756,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_external_address(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_external_address_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7016,6 +8912,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_hcx_activation_key(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_hcx_activation_key_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7163,6 +9063,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_logging_server(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_logging_server_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7321,6 +9225,13 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_management_dns_zone_binding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_get_management_dns_zone_binding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7468,6 +9379,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_network_peering(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_network_peering_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7624,6 +9539,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_network_policy(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_network_policy_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7769,6 +9688,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_node(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_node_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -7914,6 +9837,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_node_type(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_node_type_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8060,6 +9987,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_private_cloud(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_private_cloud_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8208,6 +10139,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_private_connection(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_private_connection_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8358,6 +10293,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_subnet(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_subnet_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8504,6 +10443,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_vmware_engine_network(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_vmware_engine_network_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8656,6 +10599,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_grant_dns_bind_permission(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_grant_dns_bind_permission_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8801,6 +10748,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_clusters(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_clusters_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -8950,6 +10901,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_external_access_rules(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_external_access_rules_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9097,6 +11052,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_external_addresses(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_external_addresses_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9244,6 +11203,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_hcx_activation_keys(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_hcx_activation_keys_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9391,6 +11354,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_logging_servers(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_logging_servers_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9542,6 +11509,13 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_management_dns_zone_bindings(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_list_management_dns_zone_bindings_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9691,6 +11665,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_network_peerings(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_network_peerings_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9838,6 +11816,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_network_policies(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_network_policies_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -9987,6 +11969,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_nodes(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_nodes_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10130,6 +12116,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_node_types(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_node_types_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10277,6 +12267,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_peering_routes(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_peering_routes_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10424,6 +12418,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_private_clouds(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_private_clouds_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10576,6 +12574,13 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_private_connection_peering_routes(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_list_private_connection_peering_routes_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10725,6 +12730,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_private_connections(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_private_connections_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -10874,6 +12883,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_subnets(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_subnets_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11025,6 +13038,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_vmware_engine_networks(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_vmware_engine_networks_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11184,6 +13201,13 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_repair_management_dns_zone_binding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_repair_management_dns_zone_binding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11334,6 +13358,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_reset_nsx_credentials(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_reset_nsx_credentials_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11485,6 +13513,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_reset_vcenter_credentials(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_reset_vcenter_credentials_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11637,6 +13669,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_revoke_dns_bind_permission(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_revoke_dns_bind_permission_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11780,6 +13816,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_show_nsx_credentials(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_show_nsx_credentials_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -11925,6 +13965,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_show_vcenter_credentials(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_show_vcenter_credentials_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -12077,6 +14121,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_undelete_private_cloud(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_undelete_private_cloud_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -12225,6 +14273,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -12375,6 +14427,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_dns_forwarding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_dns_forwarding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -12529,6 +14585,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_external_access_rule(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_external_access_rule_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -12679,6 +14739,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_external_address(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_external_address_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -12829,6 +14893,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_logging_server(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_logging_server_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -12986,6 +15054,13 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_management_dns_zone_binding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_update_management_dns_zone_binding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -13136,6 +15211,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_network_peering(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_network_peering_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -13286,6 +15365,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_network_policy(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_network_policy_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -13436,6 +15519,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_private_cloud(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_private_cloud_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -13587,6 +15674,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_private_connection(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_private_connection_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -13739,6 +15830,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_subnet(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_subnet_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -13893,6 +15988,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_vmware_engine_network(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_vmware_engine_network_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vmwareengine/samples/generated_samples/snippet_metadata_google.cloud.vmwareengine.v1.json b/packages/google-cloud-vmwareengine/samples/generated_samples/snippet_metadata_google.cloud.vmwareengine.v1.json index eb2fe65414ea..6d234586a410 100644 --- a/packages/google-cloud-vmwareengine/samples/generated_samples/snippet_metadata_google.cloud.vmwareengine.v1.json +++ b/packages/google-cloud-vmwareengine/samples/generated_samples/snippet_metadata_google.cloud.vmwareengine.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-vmwareengine", - "version": "1.7.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-vmwareengine/tests/unit/gapic/vmwareengine_v1/test_vmware_engine.py b/packages/google-cloud-vmwareengine/tests/unit/gapic/vmwareengine_v1/test_vmware_engine.py index 8ed7826f3a23..4bb6207790c0 100644 --- a/packages/google-cloud-vmwareengine/tests/unit/gapic/vmwareengine_v1/test_vmware_engine.py +++ b/packages/google-cloud-vmwareengine/tests/unit/gapic/vmwareengine_v1/test_vmware_engine.py @@ -78,6 +78,13 @@ ) from google.cloud.vmwareengine_v1.types import vmwareengine, vmwareengine_resources +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -321,6 +328,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VmwareEngineClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VmwareEngineClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -50659,10 +50709,13 @@ def test_list_private_clouds_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_private_clouds" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_list_private_clouds_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_private_clouds" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListPrivateCloudsRequest.pb( vmwareengine.ListPrivateCloudsRequest() ) @@ -50688,6 +50741,10 @@ def test_list_private_clouds_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListPrivateCloudsResponse() + post_with_metadata.return_value = ( + vmwareengine.ListPrivateCloudsResponse(), + metadata, + ) client.list_private_clouds( request, @@ -50699,6 +50756,7 @@ def test_list_private_clouds_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_private_cloud_rest_bad_request( @@ -50791,10 +50849,13 @@ def test_get_private_cloud_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_private_cloud" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_private_cloud_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_private_cloud" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetPrivateCloudRequest.pb( vmwareengine.GetPrivateCloudRequest() ) @@ -50820,6 +50881,10 @@ def test_get_private_cloud_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.PrivateCloud() + post_with_metadata.return_value = ( + vmwareengine_resources.PrivateCloud(), + metadata, + ) client.get_private_cloud( request, @@ -50831,6 +50896,7 @@ def test_get_private_cloud_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_private_cloud_rest_bad_request( @@ -51022,10 +51088,14 @@ def test_create_private_cloud_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_private_cloud" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_private_cloud_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_private_cloud" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreatePrivateCloudRequest.pb( vmwareengine.CreatePrivateCloudRequest() ) @@ -51049,6 +51119,7 @@ def test_create_private_cloud_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_private_cloud( request, @@ -51060,6 +51131,7 @@ def test_create_private_cloud_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_private_cloud_rest_bad_request( @@ -51259,10 +51331,14 @@ def test_update_private_cloud_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_private_cloud" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_private_cloud_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_private_cloud" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdatePrivateCloudRequest.pb( vmwareengine.UpdatePrivateCloudRequest() ) @@ -51286,6 +51362,7 @@ def test_update_private_cloud_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_private_cloud( request, @@ -51297,6 +51374,7 @@ def test_update_private_cloud_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_private_cloud_rest_bad_request( @@ -51377,10 +51455,14 @@ def test_delete_private_cloud_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_private_cloud" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_private_cloud_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_private_cloud" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeletePrivateCloudRequest.pb( vmwareengine.DeletePrivateCloudRequest() ) @@ -51404,6 +51486,7 @@ def test_delete_private_cloud_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_private_cloud( request, @@ -51415,6 +51498,7 @@ def test_delete_private_cloud_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_undelete_private_cloud_rest_bad_request( @@ -51495,10 +51579,14 @@ def test_undelete_private_cloud_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_undelete_private_cloud" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_undelete_private_cloud_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_undelete_private_cloud" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UndeletePrivateCloudRequest.pb( vmwareengine.UndeletePrivateCloudRequest() ) @@ -51522,6 +51610,7 @@ def test_undelete_private_cloud_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.undelete_private_cloud( request, @@ -51533,6 +51622,7 @@ def test_undelete_private_cloud_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_clusters_rest_bad_request(request_type=vmwareengine.ListClustersRequest): @@ -51621,10 +51711,13 @@ def test_list_clusters_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_clusters" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_list_clusters_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_clusters" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListClustersRequest.pb( vmwareengine.ListClustersRequest() ) @@ -51650,6 +51743,7 @@ def test_list_clusters_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListClustersResponse() + post_with_metadata.return_value = vmwareengine.ListClustersResponse(), metadata client.list_clusters( request, @@ -51661,6 +51755,7 @@ def test_list_clusters_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_cluster_rest_bad_request(request_type=vmwareengine.GetClusterRequest): @@ -51753,10 +51848,13 @@ def test_get_cluster_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_cluster" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetClusterRequest.pb(vmwareengine.GetClusterRequest()) transcode.return_value = { "method": "post", @@ -51780,6 +51878,7 @@ def test_get_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.Cluster() + post_with_metadata.return_value = vmwareengine_resources.Cluster(), metadata client.get_cluster( request, @@ -51791,6 +51890,7 @@ def test_get_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_cluster_rest_bad_request( @@ -51961,10 +52061,13 @@ def test_create_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_cluster" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_create_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateClusterRequest.pb( vmwareengine.CreateClusterRequest() ) @@ -51988,6 +52091,7 @@ def test_create_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_cluster( request, @@ -51999,6 +52103,7 @@ def test_create_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_cluster_rest_bad_request( @@ -52173,10 +52278,13 @@ def test_update_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_cluster" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_update_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateClusterRequest.pb( vmwareengine.UpdateClusterRequest() ) @@ -52200,6 +52308,7 @@ def test_update_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_cluster( request, @@ -52211,6 +52320,7 @@ def test_update_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_cluster_rest_bad_request( @@ -52295,10 +52405,13 @@ def test_delete_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_cluster" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_delete_cluster_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeleteClusterRequest.pb( vmwareengine.DeleteClusterRequest() ) @@ -52322,6 +52435,7 @@ def test_delete_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_cluster( request, @@ -52333,6 +52447,7 @@ def test_delete_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_nodes_rest_bad_request(request_type=vmwareengine.ListNodesRequest): @@ -52419,10 +52534,13 @@ def test_list_nodes_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_nodes" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_list_nodes_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_nodes" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListNodesRequest.pb(vmwareengine.ListNodesRequest()) transcode.return_value = { "method": "post", @@ -52446,6 +52564,7 @@ def test_list_nodes_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListNodesResponse() + post_with_metadata.return_value = vmwareengine.ListNodesResponse(), metadata client.list_nodes( request, @@ -52457,6 +52576,7 @@ def test_list_nodes_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_node_rest_bad_request(request_type=vmwareengine.GetNodeRequest): @@ -52555,10 +52675,13 @@ def test_get_node_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_node" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_node_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_node" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetNodeRequest.pb(vmwareengine.GetNodeRequest()) transcode.return_value = { "method": "post", @@ -52582,6 +52705,7 @@ def test_get_node_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.Node() + post_with_metadata.return_value = vmwareengine_resources.Node(), metadata client.get_node( request, @@ -52593,6 +52717,7 @@ def test_get_node_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_external_addresses_rest_bad_request( @@ -52683,10 +52808,14 @@ def test_list_external_addresses_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_external_addresses" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_external_addresses_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_external_addresses" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListExternalAddressesRequest.pb( vmwareengine.ListExternalAddressesRequest() ) @@ -52712,6 +52841,10 @@ def test_list_external_addresses_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListExternalAddressesResponse() + post_with_metadata.return_value = ( + vmwareengine.ListExternalAddressesResponse(), + metadata, + ) client.list_external_addresses( request, @@ -52723,6 +52856,7 @@ def test_list_external_addresses_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_fetch_network_policy_external_addresses_rest_bad_request( @@ -52814,11 +52948,15 @@ def test_fetch_network_policy_external_addresses_rest_interceptors(null_intercep transports.VmwareEngineRestInterceptor, "post_fetch_network_policy_external_addresses", ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_fetch_network_policy_external_addresses_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_fetch_network_policy_external_addresses", ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.FetchNetworkPolicyExternalAddressesRequest.pb( vmwareengine.FetchNetworkPolicyExternalAddressesRequest() ) @@ -52844,6 +52982,10 @@ def test_fetch_network_policy_external_addresses_rest_interceptors(null_intercep ] pre.return_value = request, metadata post.return_value = vmwareengine.FetchNetworkPolicyExternalAddressesResponse() + post_with_metadata.return_value = ( + vmwareengine.FetchNetworkPolicyExternalAddressesResponse(), + metadata, + ) client.fetch_network_policy_external_addresses( request, @@ -52855,6 +52997,7 @@ def test_fetch_network_policy_external_addresses_rest_interceptors(null_intercep pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_external_address_rest_bad_request( @@ -52953,10 +53096,14 @@ def test_get_external_address_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_external_address" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_get_external_address_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_external_address" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetExternalAddressRequest.pb( vmwareengine.GetExternalAddressRequest() ) @@ -52982,6 +53129,10 @@ def test_get_external_address_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.ExternalAddress() + post_with_metadata.return_value = ( + vmwareengine_resources.ExternalAddress(), + metadata, + ) client.get_external_address( request, @@ -52993,6 +53144,7 @@ def test_get_external_address_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_external_address_rest_bad_request( @@ -53156,10 +53308,14 @@ def test_create_external_address_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_external_address" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_external_address_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_external_address" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateExternalAddressRequest.pb( vmwareengine.CreateExternalAddressRequest() ) @@ -53183,6 +53339,7 @@ def test_create_external_address_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_external_address( request, @@ -53194,6 +53351,7 @@ def test_create_external_address_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_external_address_rest_bad_request( @@ -53361,10 +53519,14 @@ def test_update_external_address_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_external_address" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_external_address_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_external_address" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateExternalAddressRequest.pb( vmwareengine.UpdateExternalAddressRequest() ) @@ -53388,6 +53550,7 @@ def test_update_external_address_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_external_address( request, @@ -53399,6 +53562,7 @@ def test_update_external_address_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_external_address_rest_bad_request( @@ -53483,10 +53647,14 @@ def test_delete_external_address_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_external_address" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_external_address_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_external_address" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeleteExternalAddressRequest.pb( vmwareengine.DeleteExternalAddressRequest() ) @@ -53510,6 +53678,7 @@ def test_delete_external_address_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_external_address( request, @@ -53521,6 +53690,7 @@ def test_delete_external_address_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_subnets_rest_bad_request(request_type=vmwareengine.ListSubnetsRequest): @@ -53609,10 +53779,13 @@ def test_list_subnets_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_subnets" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_list_subnets_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_subnets" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListSubnetsRequest.pb( vmwareengine.ListSubnetsRequest() ) @@ -53638,6 +53811,7 @@ def test_list_subnets_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListSubnetsResponse() + post_with_metadata.return_value = vmwareengine.ListSubnetsResponse(), metadata client.list_subnets( request, @@ -53649,6 +53823,7 @@ def test_list_subnets_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_subnet_rest_bad_request(request_type=vmwareengine.GetSubnetRequest): @@ -53745,10 +53920,13 @@ def test_get_subnet_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_subnet" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_subnet_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_subnet" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetSubnetRequest.pb(vmwareengine.GetSubnetRequest()) transcode.return_value = { "method": "post", @@ -53772,6 +53950,7 @@ def test_get_subnet_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.Subnet() + post_with_metadata.return_value = vmwareengine_resources.Subnet(), metadata client.get_subnet( request, @@ -53783,6 +53962,7 @@ def test_get_subnet_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_subnet_rest_bad_request(request_type=vmwareengine.UpdateSubnetRequest): @@ -53944,10 +54124,13 @@ def test_update_subnet_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_subnet" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_update_subnet_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_subnet" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateSubnetRequest.pb( vmwareengine.UpdateSubnetRequest() ) @@ -53971,6 +54154,7 @@ def test_update_subnet_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_subnet( request, @@ -53982,6 +54166,7 @@ def test_update_subnet_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_external_access_rules_rest_bad_request( @@ -54072,10 +54257,14 @@ def test_list_external_access_rules_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_external_access_rules" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_external_access_rules_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_external_access_rules" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListExternalAccessRulesRequest.pb( vmwareengine.ListExternalAccessRulesRequest() ) @@ -54101,6 +54290,10 @@ def test_list_external_access_rules_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListExternalAccessRulesResponse() + post_with_metadata.return_value = ( + vmwareengine.ListExternalAccessRulesResponse(), + metadata, + ) client.list_external_access_rules( request, @@ -54112,6 +54305,7 @@ def test_list_external_access_rules_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_external_access_rule_rest_bad_request( @@ -54216,10 +54410,14 @@ def test_get_external_access_rule_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_external_access_rule" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_get_external_access_rule_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_external_access_rule" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetExternalAccessRuleRequest.pb( vmwareengine.GetExternalAccessRuleRequest() ) @@ -54245,6 +54443,10 @@ def test_get_external_access_rule_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.ExternalAccessRule() + post_with_metadata.return_value = ( + vmwareengine_resources.ExternalAccessRule(), + metadata, + ) client.get_external_access_rule( request, @@ -54256,6 +54458,7 @@ def test_get_external_access_rule_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_external_access_rule_rest_bad_request( @@ -54432,10 +54635,14 @@ def test_create_external_access_rule_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_external_access_rule" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_external_access_rule_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_external_access_rule" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateExternalAccessRuleRequest.pb( vmwareengine.CreateExternalAccessRuleRequest() ) @@ -54459,6 +54666,7 @@ def test_create_external_access_rule_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_external_access_rule( request, @@ -54470,6 +54678,7 @@ def test_create_external_access_rule_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_external_access_rule_rest_bad_request( @@ -54650,10 +54859,14 @@ def test_update_external_access_rule_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_external_access_rule" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_external_access_rule_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_external_access_rule" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateExternalAccessRuleRequest.pb( vmwareengine.UpdateExternalAccessRuleRequest() ) @@ -54677,6 +54890,7 @@ def test_update_external_access_rule_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_external_access_rule( request, @@ -54688,6 +54902,7 @@ def test_update_external_access_rule_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_external_access_rule_rest_bad_request( @@ -54772,10 +54987,14 @@ def test_delete_external_access_rule_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_external_access_rule" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_external_access_rule_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_external_access_rule" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeleteExternalAccessRuleRequest.pb( vmwareengine.DeleteExternalAccessRuleRequest() ) @@ -54799,6 +55018,7 @@ def test_delete_external_access_rule_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_external_access_rule( request, @@ -54810,6 +55030,7 @@ def test_delete_external_access_rule_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_logging_servers_rest_bad_request( @@ -54900,10 +55121,14 @@ def test_list_logging_servers_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_logging_servers" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_logging_servers_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_logging_servers" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListLoggingServersRequest.pb( vmwareengine.ListLoggingServersRequest() ) @@ -54929,6 +55154,10 @@ def test_list_logging_servers_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListLoggingServersResponse() + post_with_metadata.return_value = ( + vmwareengine.ListLoggingServersResponse(), + metadata, + ) client.list_logging_servers( request, @@ -54940,6 +55169,7 @@ def test_list_logging_servers_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_logging_server_rest_bad_request( @@ -55038,10 +55268,13 @@ def test_get_logging_server_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_logging_server" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_logging_server_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_logging_server" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetLoggingServerRequest.pb( vmwareengine.GetLoggingServerRequest() ) @@ -55067,6 +55300,10 @@ def test_get_logging_server_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.LoggingServer() + post_with_metadata.return_value = ( + vmwareengine_resources.LoggingServer(), + metadata, + ) client.get_logging_server( request, @@ -55078,6 +55315,7 @@ def test_get_logging_server_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_logging_server_rest_bad_request( @@ -55239,10 +55477,14 @@ def test_create_logging_server_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_logging_server" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_logging_server_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_logging_server" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateLoggingServerRequest.pb( vmwareengine.CreateLoggingServerRequest() ) @@ -55266,6 +55508,7 @@ def test_create_logging_server_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_logging_server( request, @@ -55277,6 +55520,7 @@ def test_create_logging_server_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_logging_server_rest_bad_request( @@ -55442,10 +55686,14 @@ def test_update_logging_server_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_logging_server" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_logging_server_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_logging_server" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateLoggingServerRequest.pb( vmwareengine.UpdateLoggingServerRequest() ) @@ -55469,6 +55717,7 @@ def test_update_logging_server_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_logging_server( request, @@ -55480,6 +55729,7 @@ def test_update_logging_server_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_logging_server_rest_bad_request( @@ -55564,10 +55814,14 @@ def test_delete_logging_server_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_logging_server" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_logging_server_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_logging_server" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeleteLoggingServerRequest.pb( vmwareengine.DeleteLoggingServerRequest() ) @@ -55591,6 +55845,7 @@ def test_delete_logging_server_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_logging_server( request, @@ -55602,6 +55857,7 @@ def test_delete_logging_server_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_node_types_rest_bad_request( @@ -55688,10 +55944,13 @@ def test_list_node_types_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_node_types" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_list_node_types_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_node_types" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListNodeTypesRequest.pb( vmwareengine.ListNodeTypesRequest() ) @@ -55717,6 +55976,7 @@ def test_list_node_types_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListNodeTypesResponse() + post_with_metadata.return_value = vmwareengine.ListNodeTypesResponse(), metadata client.list_node_types( request, @@ -55728,6 +55988,7 @@ def test_list_node_types_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_node_type_rest_bad_request(request_type=vmwareengine.GetNodeTypeRequest): @@ -55834,10 +56095,13 @@ def test_get_node_type_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_node_type" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_node_type_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_node_type" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetNodeTypeRequest.pb( vmwareengine.GetNodeTypeRequest() ) @@ -55863,6 +56127,7 @@ def test_get_node_type_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.NodeType() + post_with_metadata.return_value = vmwareengine_resources.NodeType(), metadata client.get_node_type( request, @@ -55874,6 +56139,7 @@ def test_get_node_type_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_show_nsx_credentials_rest_bad_request( @@ -55964,10 +56230,14 @@ def test_show_nsx_credentials_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_show_nsx_credentials" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_show_nsx_credentials_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_show_nsx_credentials" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ShowNsxCredentialsRequest.pb( vmwareengine.ShowNsxCredentialsRequest() ) @@ -55993,6 +56263,7 @@ def test_show_nsx_credentials_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.Credentials() + post_with_metadata.return_value = vmwareengine_resources.Credentials(), metadata client.show_nsx_credentials( request, @@ -56004,6 +56275,7 @@ def test_show_nsx_credentials_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_show_vcenter_credentials_rest_bad_request( @@ -56094,10 +56366,14 @@ def test_show_vcenter_credentials_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_show_vcenter_credentials" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_show_vcenter_credentials_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_show_vcenter_credentials" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ShowVcenterCredentialsRequest.pb( vmwareengine.ShowVcenterCredentialsRequest() ) @@ -56123,6 +56399,7 @@ def test_show_vcenter_credentials_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.Credentials() + post_with_metadata.return_value = vmwareengine_resources.Credentials(), metadata client.show_vcenter_credentials( request, @@ -56134,6 +56411,7 @@ def test_show_vcenter_credentials_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_reset_nsx_credentials_rest_bad_request( @@ -56218,10 +56496,14 @@ def test_reset_nsx_credentials_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_reset_nsx_credentials" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_reset_nsx_credentials_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_reset_nsx_credentials" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ResetNsxCredentialsRequest.pb( vmwareengine.ResetNsxCredentialsRequest() ) @@ -56245,6 +56527,7 @@ def test_reset_nsx_credentials_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.reset_nsx_credentials( request, @@ -56256,6 +56539,7 @@ def test_reset_nsx_credentials_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_reset_vcenter_credentials_rest_bad_request( @@ -56340,10 +56624,14 @@ def test_reset_vcenter_credentials_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_reset_vcenter_credentials" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_reset_vcenter_credentials_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_reset_vcenter_credentials" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ResetVcenterCredentialsRequest.pb( vmwareengine.ResetVcenterCredentialsRequest() ) @@ -56367,6 +56655,7 @@ def test_reset_vcenter_credentials_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.reset_vcenter_credentials( request, @@ -56378,6 +56667,7 @@ def test_reset_vcenter_credentials_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_dns_forwarding_rest_bad_request( @@ -56466,10 +56756,13 @@ def test_get_dns_forwarding_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_dns_forwarding" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_dns_forwarding_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_dns_forwarding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetDnsForwardingRequest.pb( vmwareengine.GetDnsForwardingRequest() ) @@ -56495,6 +56788,10 @@ def test_get_dns_forwarding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.DnsForwarding() + post_with_metadata.return_value = ( + vmwareengine_resources.DnsForwarding(), + metadata, + ) client.get_dns_forwarding( request, @@ -56506,6 +56803,7 @@ def test_get_dns_forwarding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_dns_forwarding_rest_bad_request( @@ -56672,10 +56970,14 @@ def test_update_dns_forwarding_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_dns_forwarding" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_dns_forwarding_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_dns_forwarding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateDnsForwardingRequest.pb( vmwareengine.UpdateDnsForwardingRequest() ) @@ -56699,6 +57001,7 @@ def test_update_dns_forwarding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_dns_forwarding( request, @@ -56710,6 +57013,7 @@ def test_update_dns_forwarding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_network_peering_rest_bad_request( @@ -56827,10 +57131,13 @@ def test_get_network_peering_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_network_peering" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_network_peering_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_network_peering" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetNetworkPeeringRequest.pb( vmwareengine.GetNetworkPeeringRequest() ) @@ -56856,6 +57163,10 @@ def test_get_network_peering_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.NetworkPeering() + post_with_metadata.return_value = ( + vmwareengine_resources.NetworkPeering(), + metadata, + ) client.get_network_peering( request, @@ -56867,6 +57178,7 @@ def test_get_network_peering_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_network_peerings_rest_bad_request( @@ -56953,10 +57265,14 @@ def test_list_network_peerings_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_network_peerings" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_network_peerings_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_network_peerings" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListNetworkPeeringsRequest.pb( vmwareengine.ListNetworkPeeringsRequest() ) @@ -56982,6 +57298,10 @@ def test_list_network_peerings_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListNetworkPeeringsResponse() + post_with_metadata.return_value = ( + vmwareengine.ListNetworkPeeringsResponse(), + metadata, + ) client.list_network_peerings( request, @@ -56993,6 +57313,7 @@ def test_list_network_peerings_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_network_peering_rest_bad_request( @@ -57158,10 +57479,14 @@ def test_create_network_peering_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_network_peering" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_network_peering_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_network_peering" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateNetworkPeeringRequest.pb( vmwareengine.CreateNetworkPeeringRequest() ) @@ -57185,6 +57510,7 @@ def test_create_network_peering_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_network_peering( request, @@ -57196,6 +57522,7 @@ def test_create_network_peering_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_network_peering_rest_bad_request( @@ -57280,10 +57607,14 @@ def test_delete_network_peering_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_network_peering" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_network_peering_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_network_peering" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeleteNetworkPeeringRequest.pb( vmwareengine.DeleteNetworkPeeringRequest() ) @@ -57307,6 +57638,7 @@ def test_delete_network_peering_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_network_peering( request, @@ -57318,6 +57650,7 @@ def test_delete_network_peering_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_network_peering_rest_bad_request( @@ -57491,10 +57824,14 @@ def test_update_network_peering_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_network_peering" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_network_peering_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_network_peering" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateNetworkPeeringRequest.pb( vmwareengine.UpdateNetworkPeeringRequest() ) @@ -57518,6 +57855,7 @@ def test_update_network_peering_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_network_peering( request, @@ -57529,6 +57867,7 @@ def test_update_network_peering_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_peering_routes_rest_bad_request( @@ -57617,10 +57956,13 @@ def test_list_peering_routes_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_peering_routes" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_list_peering_routes_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_peering_routes" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListPeeringRoutesRequest.pb( vmwareengine.ListPeeringRoutesRequest() ) @@ -57646,6 +57988,10 @@ def test_list_peering_routes_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListPeeringRoutesResponse() + post_with_metadata.return_value = ( + vmwareengine.ListPeeringRoutesResponse(), + metadata, + ) client.list_peering_routes( request, @@ -57657,6 +58003,7 @@ def test_list_peering_routes_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_hcx_activation_key_rest_bad_request( @@ -57817,10 +58164,14 @@ def test_create_hcx_activation_key_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_hcx_activation_key" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_hcx_activation_key_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_hcx_activation_key" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateHcxActivationKeyRequest.pb( vmwareengine.CreateHcxActivationKeyRequest() ) @@ -57844,6 +58195,7 @@ def test_create_hcx_activation_key_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_hcx_activation_key( request, @@ -57855,6 +58207,7 @@ def test_create_hcx_activation_key_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_hcx_activation_keys_rest_bad_request( @@ -57945,10 +58298,14 @@ def test_list_hcx_activation_keys_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_hcx_activation_keys" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_hcx_activation_keys_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_hcx_activation_keys" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListHcxActivationKeysRequest.pb( vmwareengine.ListHcxActivationKeysRequest() ) @@ -57974,6 +58331,10 @@ def test_list_hcx_activation_keys_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListHcxActivationKeysResponse() + post_with_metadata.return_value = ( + vmwareengine.ListHcxActivationKeysResponse(), + metadata, + ) client.list_hcx_activation_keys( request, @@ -57985,6 +58346,7 @@ def test_list_hcx_activation_keys_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_hcx_activation_key_rest_bad_request( @@ -58079,10 +58441,14 @@ def test_get_hcx_activation_key_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_hcx_activation_key" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_get_hcx_activation_key_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_hcx_activation_key" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetHcxActivationKeyRequest.pb( vmwareengine.GetHcxActivationKeyRequest() ) @@ -58108,6 +58474,10 @@ def test_get_hcx_activation_key_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.HcxActivationKey() + post_with_metadata.return_value = ( + vmwareengine_resources.HcxActivationKey(), + metadata, + ) client.get_hcx_activation_key( request, @@ -58119,6 +58489,7 @@ def test_get_hcx_activation_key_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_network_policy_rest_bad_request( @@ -58220,10 +58591,13 @@ def test_get_network_policy_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_network_policy" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, "post_get_network_policy_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_network_policy" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetNetworkPolicyRequest.pb( vmwareengine.GetNetworkPolicyRequest() ) @@ -58249,6 +58623,10 @@ def test_get_network_policy_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.NetworkPolicy() + post_with_metadata.return_value = ( + vmwareengine_resources.NetworkPolicy(), + metadata, + ) client.get_network_policy( request, @@ -58260,6 +58638,7 @@ def test_get_network_policy_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_network_policies_rest_bad_request( @@ -58346,10 +58725,14 @@ def test_list_network_policies_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_network_policies" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_network_policies_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_network_policies" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListNetworkPoliciesRequest.pb( vmwareengine.ListNetworkPoliciesRequest() ) @@ -58375,6 +58758,10 @@ def test_list_network_policies_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListNetworkPoliciesResponse() + post_with_metadata.return_value = ( + vmwareengine.ListNetworkPoliciesResponse(), + metadata, + ) client.list_network_policies( request, @@ -58386,6 +58773,7 @@ def test_list_network_policies_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_network_policy_rest_bad_request( @@ -58545,10 +58933,14 @@ def test_create_network_policy_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_network_policy" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_network_policy_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_network_policy" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateNetworkPolicyRequest.pb( vmwareengine.CreateNetworkPolicyRequest() ) @@ -58572,6 +58964,7 @@ def test_create_network_policy_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_network_policy( request, @@ -58583,6 +58976,7 @@ def test_create_network_policy_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_network_policy_rest_bad_request( @@ -58750,10 +59144,14 @@ def test_update_network_policy_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_network_policy" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_network_policy_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_network_policy" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateNetworkPolicyRequest.pb( vmwareengine.UpdateNetworkPolicyRequest() ) @@ -58777,6 +59175,7 @@ def test_update_network_policy_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_network_policy( request, @@ -58788,6 +59187,7 @@ def test_update_network_policy_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_network_policy_rest_bad_request( @@ -58872,10 +59272,14 @@ def test_delete_network_policy_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_network_policy" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_network_policy_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_network_policy" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeleteNetworkPolicyRequest.pb( vmwareengine.DeleteNetworkPolicyRequest() ) @@ -58899,6 +59303,7 @@ def test_delete_network_policy_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_network_policy( request, @@ -58910,6 +59315,7 @@ def test_delete_network_policy_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_management_dns_zone_bindings_rest_bad_request( @@ -59002,10 +59408,14 @@ def test_list_management_dns_zone_bindings_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_management_dns_zone_bindings" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_management_dns_zone_bindings_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_management_dns_zone_bindings" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListManagementDnsZoneBindingsRequest.pb( vmwareengine.ListManagementDnsZoneBindingsRequest() ) @@ -59031,6 +59441,10 @@ def test_list_management_dns_zone_bindings_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListManagementDnsZoneBindingsResponse() + post_with_metadata.return_value = ( + vmwareengine.ListManagementDnsZoneBindingsResponse(), + metadata, + ) client.list_management_dns_zone_bindings( request, @@ -59042,6 +59456,7 @@ def test_list_management_dns_zone_bindings_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_management_dns_zone_binding_rest_bad_request( @@ -59139,10 +59554,14 @@ def test_get_management_dns_zone_binding_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_management_dns_zone_binding" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_get_management_dns_zone_binding_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_management_dns_zone_binding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetManagementDnsZoneBindingRequest.pb( vmwareengine.GetManagementDnsZoneBindingRequest() ) @@ -59168,6 +59587,10 @@ def test_get_management_dns_zone_binding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.ManagementDnsZoneBinding() + post_with_metadata.return_value = ( + vmwareengine_resources.ManagementDnsZoneBinding(), + metadata, + ) client.get_management_dns_zone_binding( request, @@ -59179,6 +59602,7 @@ def test_get_management_dns_zone_binding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_management_dns_zone_binding_rest_bad_request( @@ -59347,10 +59771,14 @@ def test_create_management_dns_zone_binding_rest_interceptors(null_interceptor): transports.VmwareEngineRestInterceptor, "post_create_management_dns_zone_binding", ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_management_dns_zone_binding_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_management_dns_zone_binding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateManagementDnsZoneBindingRequest.pb( vmwareengine.CreateManagementDnsZoneBindingRequest() ) @@ -59374,6 +59802,7 @@ def test_create_management_dns_zone_binding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_management_dns_zone_binding( request, @@ -59385,6 +59814,7 @@ def test_create_management_dns_zone_binding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_management_dns_zone_binding_rest_bad_request( @@ -59557,10 +59987,14 @@ def test_update_management_dns_zone_binding_rest_interceptors(null_interceptor): transports.VmwareEngineRestInterceptor, "post_update_management_dns_zone_binding", ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_management_dns_zone_binding_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_management_dns_zone_binding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateManagementDnsZoneBindingRequest.pb( vmwareengine.UpdateManagementDnsZoneBindingRequest() ) @@ -59584,6 +60018,7 @@ def test_update_management_dns_zone_binding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_management_dns_zone_binding( request, @@ -59595,6 +60030,7 @@ def test_update_management_dns_zone_binding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_management_dns_zone_binding_rest_bad_request( @@ -59680,10 +60116,14 @@ def test_delete_management_dns_zone_binding_rest_interceptors(null_interceptor): transports.VmwareEngineRestInterceptor, "post_delete_management_dns_zone_binding", ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_management_dns_zone_binding_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_management_dns_zone_binding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeleteManagementDnsZoneBindingRequest.pb( vmwareengine.DeleteManagementDnsZoneBindingRequest() ) @@ -59707,6 +60147,7 @@ def test_delete_management_dns_zone_binding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_management_dns_zone_binding( request, @@ -59718,6 +60159,7 @@ def test_delete_management_dns_zone_binding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_repair_management_dns_zone_binding_rest_bad_request( @@ -59803,10 +60245,14 @@ def test_repair_management_dns_zone_binding_rest_interceptors(null_interceptor): transports.VmwareEngineRestInterceptor, "post_repair_management_dns_zone_binding", ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_repair_management_dns_zone_binding_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_repair_management_dns_zone_binding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.RepairManagementDnsZoneBindingRequest.pb( vmwareengine.RepairManagementDnsZoneBindingRequest() ) @@ -59830,6 +60276,7 @@ def test_repair_management_dns_zone_binding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.repair_management_dns_zone_binding( request, @@ -59841,6 +60288,7 @@ def test_repair_management_dns_zone_binding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_vmware_engine_network_rest_bad_request( @@ -60003,10 +60451,14 @@ def test_create_vmware_engine_network_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_vmware_engine_network" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_vmware_engine_network_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_vmware_engine_network" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreateVmwareEngineNetworkRequest.pb( vmwareengine.CreateVmwareEngineNetworkRequest() ) @@ -60030,6 +60482,7 @@ def test_create_vmware_engine_network_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_vmware_engine_network( request, @@ -60041,6 +60494,7 @@ def test_create_vmware_engine_network_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_vmware_engine_network_rest_bad_request( @@ -60211,10 +60665,14 @@ def test_update_vmware_engine_network_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_vmware_engine_network" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_vmware_engine_network_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_vmware_engine_network" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdateVmwareEngineNetworkRequest.pb( vmwareengine.UpdateVmwareEngineNetworkRequest() ) @@ -60238,6 +60696,7 @@ def test_update_vmware_engine_network_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_vmware_engine_network( request, @@ -60249,6 +60708,7 @@ def test_update_vmware_engine_network_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_vmware_engine_network_rest_bad_request( @@ -60333,10 +60793,14 @@ def test_delete_vmware_engine_network_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_vmware_engine_network" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_vmware_engine_network_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_vmware_engine_network" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeleteVmwareEngineNetworkRequest.pb( vmwareengine.DeleteVmwareEngineNetworkRequest() ) @@ -60360,6 +60824,7 @@ def test_delete_vmware_engine_network_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_vmware_engine_network( request, @@ -60371,6 +60836,7 @@ def test_delete_vmware_engine_network_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_vmware_engine_network_rest_bad_request( @@ -60469,10 +60935,14 @@ def test_get_vmware_engine_network_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_vmware_engine_network" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_get_vmware_engine_network_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_vmware_engine_network" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetVmwareEngineNetworkRequest.pb( vmwareengine.GetVmwareEngineNetworkRequest() ) @@ -60498,6 +60968,10 @@ def test_get_vmware_engine_network_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.VmwareEngineNetwork() + post_with_metadata.return_value = ( + vmwareengine_resources.VmwareEngineNetwork(), + metadata, + ) client.get_vmware_engine_network( request, @@ -60509,6 +60983,7 @@ def test_get_vmware_engine_network_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_vmware_engine_networks_rest_bad_request( @@ -60595,10 +61070,14 @@ def test_list_vmware_engine_networks_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_vmware_engine_networks" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_vmware_engine_networks_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_vmware_engine_networks" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListVmwareEngineNetworksRequest.pb( vmwareengine.ListVmwareEngineNetworksRequest() ) @@ -60624,6 +61103,10 @@ def test_list_vmware_engine_networks_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListVmwareEngineNetworksResponse() + post_with_metadata.return_value = ( + vmwareengine.ListVmwareEngineNetworksResponse(), + metadata, + ) client.list_vmware_engine_networks( request, @@ -60635,6 +61118,7 @@ def test_list_vmware_engine_networks_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_private_connection_rest_bad_request( @@ -60799,10 +61283,14 @@ def test_create_private_connection_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_create_private_connection" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_create_private_connection_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_create_private_connection" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.CreatePrivateConnectionRequest.pb( vmwareengine.CreatePrivateConnectionRequest() ) @@ -60826,6 +61314,7 @@ def test_create_private_connection_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_private_connection( request, @@ -60837,6 +61326,7 @@ def test_create_private_connection_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_private_connection_rest_bad_request( @@ -60957,10 +61447,14 @@ def test_get_private_connection_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_private_connection" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_get_private_connection_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_private_connection" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetPrivateConnectionRequest.pb( vmwareengine.GetPrivateConnectionRequest() ) @@ -60986,6 +61480,10 @@ def test_get_private_connection_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.PrivateConnection() + post_with_metadata.return_value = ( + vmwareengine_resources.PrivateConnection(), + metadata, + ) client.get_private_connection( request, @@ -60997,6 +61495,7 @@ def test_get_private_connection_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_private_connections_rest_bad_request( @@ -61083,10 +61582,14 @@ def test_list_private_connections_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_list_private_connections" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_private_connections_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_private_connections" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListPrivateConnectionsRequest.pb( vmwareengine.ListPrivateConnectionsRequest() ) @@ -61112,6 +61615,10 @@ def test_list_private_connections_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine.ListPrivateConnectionsResponse() + post_with_metadata.return_value = ( + vmwareengine.ListPrivateConnectionsResponse(), + metadata, + ) client.list_private_connections( request, @@ -61123,6 +61630,7 @@ def test_list_private_connections_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_private_connection_rest_bad_request( @@ -61295,10 +61803,14 @@ def test_update_private_connection_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_update_private_connection" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_update_private_connection_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_update_private_connection" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.UpdatePrivateConnectionRequest.pb( vmwareengine.UpdatePrivateConnectionRequest() ) @@ -61322,6 +61834,7 @@ def test_update_private_connection_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_private_connection( request, @@ -61333,6 +61846,7 @@ def test_update_private_connection_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_private_connection_rest_bad_request( @@ -61417,10 +61931,14 @@ def test_delete_private_connection_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_delete_private_connection" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_delete_private_connection_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_delete_private_connection" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.DeletePrivateConnectionRequest.pb( vmwareengine.DeletePrivateConnectionRequest() ) @@ -61444,6 +61962,7 @@ def test_delete_private_connection_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_private_connection( request, @@ -61455,6 +61974,7 @@ def test_delete_private_connection_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_private_connection_peering_routes_rest_bad_request( @@ -61546,11 +62066,15 @@ def test_list_private_connection_peering_routes_rest_interceptors(null_intercept transports.VmwareEngineRestInterceptor, "post_list_private_connection_peering_routes", ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_list_private_connection_peering_routes_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_list_private_connection_peering_routes", ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.ListPrivateConnectionPeeringRoutesRequest.pb( vmwareengine.ListPrivateConnectionPeeringRoutesRequest() ) @@ -61576,6 +62100,10 @@ def test_list_private_connection_peering_routes_rest_interceptors(null_intercept ] pre.return_value = request, metadata post.return_value = vmwareengine.ListPrivateConnectionPeeringRoutesResponse() + post_with_metadata.return_value = ( + vmwareengine.ListPrivateConnectionPeeringRoutesResponse(), + metadata, + ) client.list_private_connection_peering_routes( request, @@ -61587,6 +62115,7 @@ def test_list_private_connection_peering_routes_rest_interceptors(null_intercept pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_grant_dns_bind_permission_rest_bad_request( @@ -61667,10 +62196,14 @@ def test_grant_dns_bind_permission_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_grant_dns_bind_permission" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_grant_dns_bind_permission_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_grant_dns_bind_permission" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GrantDnsBindPermissionRequest.pb( vmwareengine.GrantDnsBindPermissionRequest() ) @@ -61694,6 +62227,7 @@ def test_grant_dns_bind_permission_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.grant_dns_bind_permission( request, @@ -61705,6 +62239,7 @@ def test_grant_dns_bind_permission_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_dns_bind_permission_rest_bad_request( @@ -61789,10 +62324,14 @@ def test_get_dns_bind_permission_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VmwareEngineRestInterceptor, "post_get_dns_bind_permission" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_get_dns_bind_permission_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_get_dns_bind_permission" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.GetDnsBindPermissionRequest.pb( vmwareengine.GetDnsBindPermissionRequest() ) @@ -61818,6 +62357,10 @@ def test_get_dns_bind_permission_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vmwareengine_resources.DnsBindPermission() + post_with_metadata.return_value = ( + vmwareengine_resources.DnsBindPermission(), + metadata, + ) client.get_dns_bind_permission( request, @@ -61829,6 +62372,7 @@ def test_get_dns_bind_permission_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_revoke_dns_bind_permission_rest_bad_request( @@ -61909,10 +62453,14 @@ def test_revoke_dns_bind_permission_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VmwareEngineRestInterceptor, "post_revoke_dns_bind_permission" ) as post, mock.patch.object( + transports.VmwareEngineRestInterceptor, + "post_revoke_dns_bind_permission_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VmwareEngineRestInterceptor, "pre_revoke_dns_bind_permission" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vmwareengine.RevokeDnsBindPermissionRequest.pb( vmwareengine.RevokeDnsBindPermissionRequest() ) @@ -61936,6 +62484,7 @@ def test_revoke_dns_bind_permission_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.revoke_dns_bind_permission( request, @@ -61947,6 +62496,7 @@ def test_revoke_dns_bind_permission_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-vpc-access/google/cloud/vpcaccess/gapic_version.py b/packages/google-cloud-vpc-access/google/cloud/vpcaccess/gapic_version.py index 739fdfae141c..558c8aab67c5 100644 --- a/packages/google-cloud-vpc-access/google/cloud/vpcaccess/gapic_version.py +++ b/packages/google-cloud-vpc-access/google/cloud/vpcaccess/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.12.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/gapic_version.py b/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/gapic_version.py index 739fdfae141c..558c8aab67c5 100644 --- a/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/gapic_version.py +++ b/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.12.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/services/vpc_access_service/client.py b/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/services/vpc_access_service/client.py index 8a80f3ef1064..ddf7e44cf87e 100644 --- a/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/services/vpc_access_service/client.py +++ b/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/services/vpc_access_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -493,6 +495,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -1244,16 +1273,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -1299,16 +1332,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -1354,16 +1391,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/services/vpc_access_service/transports/rest.py b/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/services/vpc_access_service/transports/rest.py index a1c7d5539ab1..53c7ee71f9da 100644 --- a/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/services/vpc_access_service/transports/rest.py +++ b/packages/google-cloud-vpc-access/google/cloud/vpcaccess_v1/services/vpc_access_service/transports/rest.py @@ -127,12 +127,35 @@ def post_create_connector( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_connector - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_connector_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VpcAccessService server but before - it is returned to user code. + it is returned to user code. This `post_create_connector` interceptor runs + before the `post_create_connector_with_metadata` interceptor. """ return response + def post_create_connector_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_connector + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VpcAccessService server but before it is returned to user code. + + We recommend only using this `post_create_connector_with_metadata` + interceptor in new development instead of the `post_create_connector` interceptor. + When both interceptors are used, this `post_create_connector_with_metadata` interceptor runs after the + `post_create_connector` interceptor. The (possibly modified) response returned by + `post_create_connector` will be passed to + `post_create_connector_with_metadata`. + """ + return response, metadata + def pre_delete_connector( self, request: vpc_access.DeleteConnectorRequest, @@ -152,12 +175,35 @@ def post_delete_connector( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_connector - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_connector_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VpcAccessService server but before - it is returned to user code. + it is returned to user code. This `post_delete_connector` interceptor runs + before the `post_delete_connector_with_metadata` interceptor. """ return response + def post_delete_connector_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_connector + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VpcAccessService server but before it is returned to user code. + + We recommend only using this `post_delete_connector_with_metadata` + interceptor in new development instead of the `post_delete_connector` interceptor. + When both interceptors are used, this `post_delete_connector_with_metadata` interceptor runs after the + `post_delete_connector` interceptor. The (possibly modified) response returned by + `post_delete_connector` will be passed to + `post_delete_connector_with_metadata`. + """ + return response, metadata + def pre_get_connector( self, request: vpc_access.GetConnectorRequest, @@ -175,12 +221,35 @@ def post_get_connector( ) -> vpc_access.Connector: """Post-rpc interceptor for get_connector - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_connector_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VpcAccessService server but before - it is returned to user code. + it is returned to user code. This `post_get_connector` interceptor runs + before the `post_get_connector_with_metadata` interceptor. """ return response + def post_get_connector_with_metadata( + self, + response: vpc_access.Connector, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[vpc_access.Connector, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_connector + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VpcAccessService server but before it is returned to user code. + + We recommend only using this `post_get_connector_with_metadata` + interceptor in new development instead of the `post_get_connector` interceptor. + When both interceptors are used, this `post_get_connector_with_metadata` interceptor runs after the + `post_get_connector` interceptor. The (possibly modified) response returned by + `post_get_connector` will be passed to + `post_get_connector_with_metadata`. + """ + return response, metadata + def pre_list_connectors( self, request: vpc_access.ListConnectorsRequest, @@ -200,12 +269,37 @@ def post_list_connectors( ) -> vpc_access.ListConnectorsResponse: """Post-rpc interceptor for list_connectors - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_connectors_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the VpcAccessService server but before - it is returned to user code. + it is returned to user code. This `post_list_connectors` interceptor runs + before the `post_list_connectors_with_metadata` interceptor. """ return response + def post_list_connectors_with_metadata( + self, + response: vpc_access.ListConnectorsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + vpc_access.ListConnectorsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_connectors + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the VpcAccessService server but before it is returned to user code. + + We recommend only using this `post_list_connectors_with_metadata` + interceptor in new development instead of the `post_list_connectors` interceptor. + When both interceptors are used, this `post_list_connectors_with_metadata` interceptor runs after the + `post_list_connectors` interceptor. The (possibly modified) response returned by + `post_list_connectors` will be passed to + `post_list_connectors_with_metadata`. + """ + return response, metadata + def pre_list_locations( self, request: locations_pb2.ListLocationsRequest, @@ -539,6 +633,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_connector(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_connector_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -684,6 +782,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_connector(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_connector_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -827,6 +929,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_connector(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_connector_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -970,6 +1076,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_connectors(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_connectors_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-vpc-access/samples/generated_samples/snippet_metadata_google.cloud.vpcaccess.v1.json b/packages/google-cloud-vpc-access/samples/generated_samples/snippet_metadata_google.cloud.vpcaccess.v1.json index 63307afc9e03..97bc0f76d20d 100644 --- a/packages/google-cloud-vpc-access/samples/generated_samples/snippet_metadata_google.cloud.vpcaccess.v1.json +++ b/packages/google-cloud-vpc-access/samples/generated_samples/snippet_metadata_google.cloud.vpcaccess.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-vpc-access", - "version": "1.12.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-vpc-access/tests/unit/gapic/vpcaccess_v1/test_vpc_access_service.py b/packages/google-cloud-vpc-access/tests/unit/gapic/vpcaccess_v1/test_vpc_access_service.py index 870232fe7dd8..e90f53c0b510 100644 --- a/packages/google-cloud-vpc-access/tests/unit/gapic/vpcaccess_v1/test_vpc_access_service.py +++ b/packages/google-cloud-vpc-access/tests/unit/gapic/vpcaccess_v1/test_vpc_access_service.py @@ -72,6 +72,13 @@ ) from google.cloud.vpcaccess_v1.types import vpc_access +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -331,6 +338,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VpcAccessServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VpcAccessServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -3964,10 +4014,14 @@ def test_create_connector_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VpcAccessServiceRestInterceptor, "post_create_connector" ) as post, mock.patch.object( + transports.VpcAccessServiceRestInterceptor, + "post_create_connector_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VpcAccessServiceRestInterceptor, "pre_create_connector" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vpc_access.CreateConnectorRequest.pb( vpc_access.CreateConnectorRequest() ) @@ -3991,6 +4045,7 @@ def test_create_connector_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_connector( request, @@ -4002,6 +4057,7 @@ def test_create_connector_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_connector_rest_bad_request(request_type=vpc_access.GetConnectorRequest): @@ -4102,10 +4158,13 @@ def test_get_connector_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VpcAccessServiceRestInterceptor, "post_get_connector" ) as post, mock.patch.object( + transports.VpcAccessServiceRestInterceptor, "post_get_connector_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VpcAccessServiceRestInterceptor, "pre_get_connector" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vpc_access.GetConnectorRequest.pb(vpc_access.GetConnectorRequest()) transcode.return_value = { "method": "post", @@ -4127,6 +4186,7 @@ def test_get_connector_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vpc_access.Connector() + post_with_metadata.return_value = vpc_access.Connector(), metadata client.get_connector( request, @@ -4138,6 +4198,7 @@ def test_get_connector_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_connectors_rest_bad_request( @@ -4222,10 +4283,13 @@ def test_list_connectors_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.VpcAccessServiceRestInterceptor, "post_list_connectors" ) as post, mock.patch.object( + transports.VpcAccessServiceRestInterceptor, "post_list_connectors_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.VpcAccessServiceRestInterceptor, "pre_list_connectors" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vpc_access.ListConnectorsRequest.pb( vpc_access.ListConnectorsRequest() ) @@ -4251,6 +4315,7 @@ def test_list_connectors_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = vpc_access.ListConnectorsResponse() + post_with_metadata.return_value = vpc_access.ListConnectorsResponse(), metadata client.list_connectors( request, @@ -4262,6 +4327,7 @@ def test_list_connectors_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_connector_rest_bad_request( @@ -4342,10 +4408,14 @@ def test_delete_connector_rest_interceptors(null_interceptor): ), mock.patch.object( transports.VpcAccessServiceRestInterceptor, "post_delete_connector" ) as post, mock.patch.object( + transports.VpcAccessServiceRestInterceptor, + "post_delete_connector_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.VpcAccessServiceRestInterceptor, "pre_delete_connector" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = vpc_access.DeleteConnectorRequest.pb( vpc_access.DeleteConnectorRequest() ) @@ -4369,6 +4439,7 @@ def test_delete_connector_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_connector( request, @@ -4380,6 +4451,7 @@ def test_delete_connector_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_locations_rest_bad_request( diff --git a/packages/google-cloud-webrisk/google/cloud/webrisk/gapic_version.py b/packages/google-cloud-webrisk/google/cloud/webrisk/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-webrisk/google/cloud/webrisk/gapic_version.py +++ b/packages/google-cloud-webrisk/google/cloud/webrisk/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-webrisk/google/cloud/webrisk_v1/gapic_version.py b/packages/google-cloud-webrisk/google/cloud/webrisk_v1/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-webrisk/google/cloud/webrisk_v1/gapic_version.py +++ b/packages/google-cloud-webrisk/google/cloud/webrisk_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-webrisk/google/cloud/webrisk_v1/services/web_risk_service/client.py b/packages/google-cloud-webrisk/google/cloud/webrisk_v1/services/web_risk_service/client.py index 0314d235bfe5..dc02176e9bf9 100644 --- a/packages/google-cloud-webrisk/google/cloud/webrisk_v1/services/web_risk_service/client.py +++ b/packages/google-cloud-webrisk/google/cloud/webrisk_v1/services/web_risk_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -468,6 +470,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -1329,16 +1358,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -1384,16 +1417,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, diff --git a/packages/google-cloud-webrisk/google/cloud/webrisk_v1/services/web_risk_service/transports/rest.py b/packages/google-cloud-webrisk/google/cloud/webrisk_v1/services/web_risk_service/transports/rest.py index 10f0bc9a8962..75432778b6be 100644 --- a/packages/google-cloud-webrisk/google/cloud/webrisk_v1/services/web_risk_service/transports/rest.py +++ b/packages/google-cloud-webrisk/google/cloud/webrisk_v1/services/web_risk_service/transports/rest.py @@ -134,12 +134,37 @@ def post_compute_threat_list_diff( ) -> webrisk.ComputeThreatListDiffResponse: """Post-rpc interceptor for compute_threat_list_diff - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_compute_threat_list_diff_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebRiskService server but before - it is returned to user code. + it is returned to user code. This `post_compute_threat_list_diff` interceptor runs + before the `post_compute_threat_list_diff_with_metadata` interceptor. """ return response + def post_compute_threat_list_diff_with_metadata( + self, + response: webrisk.ComputeThreatListDiffResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + webrisk.ComputeThreatListDiffResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for compute_threat_list_diff + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebRiskService server but before it is returned to user code. + + We recommend only using this `post_compute_threat_list_diff_with_metadata` + interceptor in new development instead of the `post_compute_threat_list_diff` interceptor. + When both interceptors are used, this `post_compute_threat_list_diff_with_metadata` interceptor runs after the + `post_compute_threat_list_diff` interceptor. The (possibly modified) response returned by + `post_compute_threat_list_diff` will be passed to + `post_compute_threat_list_diff_with_metadata`. + """ + return response, metadata + def pre_create_submission( self, request: webrisk.CreateSubmissionRequest, @@ -159,12 +184,35 @@ def post_create_submission( ) -> webrisk.Submission: """Post-rpc interceptor for create_submission - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_submission_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebRiskService server but before - it is returned to user code. + it is returned to user code. This `post_create_submission` interceptor runs + before the `post_create_submission_with_metadata` interceptor. """ return response + def post_create_submission_with_metadata( + self, + response: webrisk.Submission, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[webrisk.Submission, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_submission + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebRiskService server but before it is returned to user code. + + We recommend only using this `post_create_submission_with_metadata` + interceptor in new development instead of the `post_create_submission` interceptor. + When both interceptors are used, this `post_create_submission_with_metadata` interceptor runs after the + `post_create_submission` interceptor. The (possibly modified) response returned by + `post_create_submission` will be passed to + `post_create_submission_with_metadata`. + """ + return response, metadata + def pre_search_hashes( self, request: webrisk.SearchHashesRequest, @@ -182,12 +230,35 @@ def post_search_hashes( ) -> webrisk.SearchHashesResponse: """Post-rpc interceptor for search_hashes - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_search_hashes_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebRiskService server but before - it is returned to user code. + it is returned to user code. This `post_search_hashes` interceptor runs + before the `post_search_hashes_with_metadata` interceptor. """ return response + def post_search_hashes_with_metadata( + self, + response: webrisk.SearchHashesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[webrisk.SearchHashesResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for search_hashes + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebRiskService server but before it is returned to user code. + + We recommend only using this `post_search_hashes_with_metadata` + interceptor in new development instead of the `post_search_hashes` interceptor. + When both interceptors are used, this `post_search_hashes_with_metadata` interceptor runs after the + `post_search_hashes` interceptor. The (possibly modified) response returned by + `post_search_hashes` will be passed to + `post_search_hashes_with_metadata`. + """ + return response, metadata + def pre_search_uris( self, request: webrisk.SearchUrisRequest, @@ -205,12 +276,35 @@ def post_search_uris( ) -> webrisk.SearchUrisResponse: """Post-rpc interceptor for search_uris - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_search_uris_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebRiskService server but before - it is returned to user code. + it is returned to user code. This `post_search_uris` interceptor runs + before the `post_search_uris_with_metadata` interceptor. """ return response + def post_search_uris_with_metadata( + self, + response: webrisk.SearchUrisResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[webrisk.SearchUrisResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for search_uris + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebRiskService server but before it is returned to user code. + + We recommend only using this `post_search_uris_with_metadata` + interceptor in new development instead of the `post_search_uris` interceptor. + When both interceptors are used, this `post_search_uris_with_metadata` interceptor runs after the + `post_search_uris` interceptor. The (possibly modified) response returned by + `post_search_uris` will be passed to + `post_search_uris_with_metadata`. + """ + return response, metadata + def pre_submit_uri( self, request: webrisk.SubmitUriRequest, @@ -228,12 +322,35 @@ def post_submit_uri( ) -> operations_pb2.Operation: """Post-rpc interceptor for submit_uri - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_submit_uri_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebRiskService server but before - it is returned to user code. + it is returned to user code. This `post_submit_uri` interceptor runs + before the `post_submit_uri_with_metadata` interceptor. """ return response + def post_submit_uri_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for submit_uri + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebRiskService server but before it is returned to user code. + + We recommend only using this `post_submit_uri_with_metadata` + interceptor in new development instead of the `post_submit_uri` interceptor. + When both interceptors are used, this `post_submit_uri_with_metadata` interceptor runs after the + `post_submit_uri` interceptor. The (possibly modified) response returned by + `post_submit_uri` will be passed to + `post_submit_uri_with_metadata`. + """ + return response, metadata + def pre_cancel_operation( self, request: operations_pb2.CancelOperationRequest, @@ -592,6 +709,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_compute_threat_list_diff(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_compute_threat_list_diff_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -745,6 +866,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_submission(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_submission_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -886,6 +1011,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_search_hashes(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_search_hashes_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1029,6 +1158,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_search_uris(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_search_uris_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1183,6 +1316,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_submit_uri(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_submit_uri_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/gapic_version.py b/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/gapic_version.py +++ b/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py b/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py index a5bf56a5f4f3..bbcbc1bf8e09 100644 --- a/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py +++ b/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -467,6 +469,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/rest.py b/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/rest.py index d55b80c24fb1..c157b0f4fd19 100644 --- a/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/rest.py +++ b/packages/google-cloud-webrisk/google/cloud/webrisk_v1beta1/services/web_risk_service_v1_beta1/transports/rest.py @@ -117,12 +117,37 @@ def post_compute_threat_list_diff( ) -> webrisk.ComputeThreatListDiffResponse: """Post-rpc interceptor for compute_threat_list_diff - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_compute_threat_list_diff_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebRiskServiceV1Beta1 server but before - it is returned to user code. + it is returned to user code. This `post_compute_threat_list_diff` interceptor runs + before the `post_compute_threat_list_diff_with_metadata` interceptor. """ return response + def post_compute_threat_list_diff_with_metadata( + self, + response: webrisk.ComputeThreatListDiffResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + webrisk.ComputeThreatListDiffResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for compute_threat_list_diff + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebRiskServiceV1Beta1 server but before it is returned to user code. + + We recommend only using this `post_compute_threat_list_diff_with_metadata` + interceptor in new development instead of the `post_compute_threat_list_diff` interceptor. + When both interceptors are used, this `post_compute_threat_list_diff_with_metadata` interceptor runs after the + `post_compute_threat_list_diff` interceptor. The (possibly modified) response returned by + `post_compute_threat_list_diff` will be passed to + `post_compute_threat_list_diff_with_metadata`. + """ + return response, metadata + def pre_search_hashes( self, request: webrisk.SearchHashesRequest, @@ -140,12 +165,35 @@ def post_search_hashes( ) -> webrisk.SearchHashesResponse: """Post-rpc interceptor for search_hashes - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_search_hashes_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebRiskServiceV1Beta1 server but before - it is returned to user code. + it is returned to user code. This `post_search_hashes` interceptor runs + before the `post_search_hashes_with_metadata` interceptor. """ return response + def post_search_hashes_with_metadata( + self, + response: webrisk.SearchHashesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[webrisk.SearchHashesResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for search_hashes + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebRiskServiceV1Beta1 server but before it is returned to user code. + + We recommend only using this `post_search_hashes_with_metadata` + interceptor in new development instead of the `post_search_hashes` interceptor. + When both interceptors are used, this `post_search_hashes_with_metadata` interceptor runs after the + `post_search_hashes` interceptor. The (possibly modified) response returned by + `post_search_hashes` will be passed to + `post_search_hashes_with_metadata`. + """ + return response, metadata + def pre_search_uris( self, request: webrisk.SearchUrisRequest, @@ -163,12 +211,35 @@ def post_search_uris( ) -> webrisk.SearchUrisResponse: """Post-rpc interceptor for search_uris - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_search_uris_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebRiskServiceV1Beta1 server but before - it is returned to user code. + it is returned to user code. This `post_search_uris` interceptor runs + before the `post_search_uris_with_metadata` interceptor. """ return response + def post_search_uris_with_metadata( + self, + response: webrisk.SearchUrisResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[webrisk.SearchUrisResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for search_uris + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebRiskServiceV1Beta1 server but before it is returned to user code. + + We recommend only using this `post_search_uris_with_metadata` + interceptor in new development instead of the `post_search_uris` interceptor. + When both interceptors are used, this `post_search_uris_with_metadata` interceptor runs after the + `post_search_uris` interceptor. The (possibly modified) response returned by + `post_search_uris` will be passed to + `post_search_uris_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class WebRiskServiceV1Beta1RestStub: @@ -379,6 +450,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_compute_threat_list_diff(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_compute_threat_list_diff_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -523,6 +598,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_search_hashes(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_search_hashes_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -665,6 +744,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_search_uris(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_search_uris_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-webrisk/samples/generated_samples/snippet_metadata_google.cloud.webrisk.v1.json b/packages/google-cloud-webrisk/samples/generated_samples/snippet_metadata_google.cloud.webrisk.v1.json index 2c708f2a7f7e..654bd4d32e74 100644 --- a/packages/google-cloud-webrisk/samples/generated_samples/snippet_metadata_google.cloud.webrisk.v1.json +++ b/packages/google-cloud-webrisk/samples/generated_samples/snippet_metadata_google.cloud.webrisk.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-webrisk", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-webrisk/samples/generated_samples/snippet_metadata_google.cloud.webrisk.v1beta1.json b/packages/google-cloud-webrisk/samples/generated_samples/snippet_metadata_google.cloud.webrisk.v1beta1.json index 3f175947e030..e281efca18fe 100644 --- a/packages/google-cloud-webrisk/samples/generated_samples/snippet_metadata_google.cloud.webrisk.v1beta1.json +++ b/packages/google-cloud-webrisk/samples/generated_samples/snippet_metadata_google.cloud.webrisk.v1beta1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-webrisk", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-webrisk/tests/unit/gapic/webrisk_v1/test_web_risk_service.py b/packages/google-cloud-webrisk/tests/unit/gapic/webrisk_v1/test_web_risk_service.py index e9bbbf3f9506..443c0566955b 100644 --- a/packages/google-cloud-webrisk/tests/unit/gapic/webrisk_v1/test_web_risk_service.py +++ b/packages/google-cloud-webrisk/tests/unit/gapic/webrisk_v1/test_web_risk_service.py @@ -70,6 +70,13 @@ ) from google.cloud.webrisk_v1.types import webrisk +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -328,6 +335,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WebRiskServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WebRiskServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -3881,10 +3931,14 @@ def test_compute_threat_list_diff_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebRiskServiceRestInterceptor, "post_compute_threat_list_diff" ) as post, mock.patch.object( + transports.WebRiskServiceRestInterceptor, + "post_compute_threat_list_diff_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebRiskServiceRestInterceptor, "pre_compute_threat_list_diff" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = webrisk.ComputeThreatListDiffRequest.pb( webrisk.ComputeThreatListDiffRequest() ) @@ -3910,6 +3964,10 @@ def test_compute_threat_list_diff_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = webrisk.ComputeThreatListDiffResponse() + post_with_metadata.return_value = ( + webrisk.ComputeThreatListDiffResponse(), + metadata, + ) client.compute_threat_list_diff( request, @@ -3921,6 +3979,7 @@ def test_compute_threat_list_diff_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_search_uris_rest_bad_request(request_type=webrisk.SearchUrisRequest): @@ -4000,10 +4059,13 @@ def test_search_uris_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebRiskServiceRestInterceptor, "post_search_uris" ) as post, mock.patch.object( + transports.WebRiskServiceRestInterceptor, "post_search_uris_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebRiskServiceRestInterceptor, "pre_search_uris" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = webrisk.SearchUrisRequest.pb(webrisk.SearchUrisRequest()) transcode.return_value = { "method": "post", @@ -4025,6 +4087,7 @@ def test_search_uris_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = webrisk.SearchUrisResponse() + post_with_metadata.return_value = webrisk.SearchUrisResponse(), metadata client.search_uris( request, @@ -4036,6 +4099,7 @@ def test_search_uris_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_search_hashes_rest_bad_request(request_type=webrisk.SearchHashesRequest): @@ -4115,10 +4179,13 @@ def test_search_hashes_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebRiskServiceRestInterceptor, "post_search_hashes" ) as post, mock.patch.object( + transports.WebRiskServiceRestInterceptor, "post_search_hashes_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebRiskServiceRestInterceptor, "pre_search_hashes" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = webrisk.SearchHashesRequest.pb(webrisk.SearchHashesRequest()) transcode.return_value = { "method": "post", @@ -4142,6 +4209,7 @@ def test_search_hashes_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = webrisk.SearchHashesResponse() + post_with_metadata.return_value = webrisk.SearchHashesResponse(), metadata client.search_hashes( request, @@ -4153,6 +4221,7 @@ def test_search_hashes_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_submission_rest_bad_request( @@ -4307,10 +4376,13 @@ def test_create_submission_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebRiskServiceRestInterceptor, "post_create_submission" ) as post, mock.patch.object( + transports.WebRiskServiceRestInterceptor, "post_create_submission_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebRiskServiceRestInterceptor, "pre_create_submission" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = webrisk.CreateSubmissionRequest.pb( webrisk.CreateSubmissionRequest() ) @@ -4334,6 +4406,7 @@ def test_create_submission_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = webrisk.Submission() + post_with_metadata.return_value = webrisk.Submission(), metadata client.create_submission( request, @@ -4345,6 +4418,7 @@ def test_create_submission_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_submit_uri_rest_bad_request(request_type=webrisk.SubmitUriRequest): @@ -4423,10 +4497,13 @@ def test_submit_uri_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WebRiskServiceRestInterceptor, "post_submit_uri" ) as post, mock.patch.object( + transports.WebRiskServiceRestInterceptor, "post_submit_uri_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebRiskServiceRestInterceptor, "pre_submit_uri" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = webrisk.SubmitUriRequest.pb(webrisk.SubmitUriRequest()) transcode.return_value = { "method": "post", @@ -4448,6 +4525,7 @@ def test_submit_uri_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.submit_uri( request, @@ -4459,6 +4537,7 @@ def test_submit_uri_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_cancel_operation_rest_bad_request( diff --git a/packages/google-cloud-webrisk/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py b/packages/google-cloud-webrisk/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py index a5e283f4ec0b..a719dd3d4b31 100644 --- a/packages/google-cloud-webrisk/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py +++ b/packages/google-cloud-webrisk/tests/unit/gapic/webrisk_v1beta1/test_web_risk_service_v1_beta1.py @@ -60,6 +60,13 @@ ) from google.cloud.webrisk_v1beta1.types import webrisk +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -335,6 +342,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WebRiskServiceV1Beta1Client(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WebRiskServiceV1Beta1Client(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -2923,10 +2973,14 @@ def test_compute_threat_list_diff_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebRiskServiceV1Beta1RestInterceptor, "post_compute_threat_list_diff" ) as post, mock.patch.object( + transports.WebRiskServiceV1Beta1RestInterceptor, + "post_compute_threat_list_diff_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebRiskServiceV1Beta1RestInterceptor, "pre_compute_threat_list_diff" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = webrisk.ComputeThreatListDiffRequest.pb( webrisk.ComputeThreatListDiffRequest() ) @@ -2952,6 +3006,10 @@ def test_compute_threat_list_diff_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = webrisk.ComputeThreatListDiffResponse() + post_with_metadata.return_value = ( + webrisk.ComputeThreatListDiffResponse(), + metadata, + ) client.compute_threat_list_diff( request, @@ -2963,6 +3021,7 @@ def test_compute_threat_list_diff_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_search_uris_rest_bad_request(request_type=webrisk.SearchUrisRequest): @@ -3042,10 +3101,14 @@ def test_search_uris_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebRiskServiceV1Beta1RestInterceptor, "post_search_uris" ) as post, mock.patch.object( + transports.WebRiskServiceV1Beta1RestInterceptor, + "post_search_uris_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebRiskServiceV1Beta1RestInterceptor, "pre_search_uris" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = webrisk.SearchUrisRequest.pb(webrisk.SearchUrisRequest()) transcode.return_value = { "method": "post", @@ -3067,6 +3130,7 @@ def test_search_uris_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = webrisk.SearchUrisResponse() + post_with_metadata.return_value = webrisk.SearchUrisResponse(), metadata client.search_uris( request, @@ -3078,6 +3142,7 @@ def test_search_uris_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_search_hashes_rest_bad_request(request_type=webrisk.SearchHashesRequest): @@ -3157,10 +3222,14 @@ def test_search_hashes_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebRiskServiceV1Beta1RestInterceptor, "post_search_hashes" ) as post, mock.patch.object( + transports.WebRiskServiceV1Beta1RestInterceptor, + "post_search_hashes_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebRiskServiceV1Beta1RestInterceptor, "pre_search_hashes" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = webrisk.SearchHashesRequest.pb(webrisk.SearchHashesRequest()) transcode.return_value = { "method": "post", @@ -3184,6 +3253,7 @@ def test_search_hashes_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = webrisk.SearchHashesResponse() + post_with_metadata.return_value = webrisk.SearchHashesResponse(), metadata client.search_hashes( request, @@ -3195,6 +3265,7 @@ def test_search_hashes_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner/gapic_version.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner/gapic_version.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/gapic_version.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/gapic_version.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/services/web_security_scanner/client.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/services/web_security_scanner/client.py index 650b71708577..6e05ff339249 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/services/web_security_scanner/client.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/services/web_security_scanner/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -502,6 +504,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/services/web_security_scanner/transports/rest.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/services/web_security_scanner/transports/rest.py index 0468accd4a1c..88a8860a21a5 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/services/web_security_scanner/transports/rest.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1/services/web_security_scanner/transports/rest.py @@ -200,12 +200,35 @@ def post_create_scan_config( ) -> scan_config.ScanConfig: """Post-rpc interceptor for create_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_create_scan_config` interceptor runs + before the `post_create_scan_config_with_metadata` interceptor. """ return response + def post_create_scan_config_with_metadata( + self, + response: scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_create_scan_config_with_metadata` + interceptor in new development instead of the `post_create_scan_config` interceptor. + When both interceptors are used, this `post_create_scan_config_with_metadata` interceptor runs after the + `post_create_scan_config` interceptor. The (possibly modified) response returned by + `post_create_scan_config` will be passed to + `post_create_scan_config_with_metadata`. + """ + return response, metadata + def pre_delete_scan_config( self, request: web_security_scanner.DeleteScanConfigRequest, @@ -238,12 +261,35 @@ def pre_get_finding( def post_get_finding(self, response: finding.Finding) -> finding.Finding: """Post-rpc interceptor for get_finding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_finding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_finding` interceptor runs + before the `post_get_finding_with_metadata` interceptor. """ return response + def post_get_finding_with_metadata( + self, + response: finding.Finding, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[finding.Finding, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_finding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_finding_with_metadata` + interceptor in new development instead of the `post_get_finding` interceptor. + When both interceptors are used, this `post_get_finding_with_metadata` interceptor runs after the + `post_get_finding` interceptor. The (possibly modified) response returned by + `post_get_finding` will be passed to + `post_get_finding_with_metadata`. + """ + return response, metadata + def pre_get_scan_config( self, request: web_security_scanner.GetScanConfigRequest, @@ -264,12 +310,35 @@ def post_get_scan_config( ) -> scan_config.ScanConfig: """Post-rpc interceptor for get_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_scan_config` interceptor runs + before the `post_get_scan_config_with_metadata` interceptor. """ return response + def post_get_scan_config_with_metadata( + self, + response: scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_scan_config_with_metadata` + interceptor in new development instead of the `post_get_scan_config` interceptor. + When both interceptors are used, this `post_get_scan_config_with_metadata` interceptor runs after the + `post_get_scan_config` interceptor. The (possibly modified) response returned by + `post_get_scan_config` will be passed to + `post_get_scan_config_with_metadata`. + """ + return response, metadata + def pre_get_scan_run( self, request: web_security_scanner.GetScanRunRequest, @@ -287,12 +356,35 @@ def pre_get_scan_run( def post_get_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for get_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_scan_run` interceptor runs + before the `post_get_scan_run_with_metadata` interceptor. """ return response + def post_get_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_scan_run_with_metadata` + interceptor in new development instead of the `post_get_scan_run` interceptor. + When both interceptors are used, this `post_get_scan_run_with_metadata` interceptor runs after the + `post_get_scan_run` interceptor. The (possibly modified) response returned by + `post_get_scan_run` will be passed to + `post_get_scan_run_with_metadata`. + """ + return response, metadata + def pre_list_crawled_urls( self, request: web_security_scanner.ListCrawledUrlsRequest, @@ -313,12 +405,38 @@ def post_list_crawled_urls( ) -> web_security_scanner.ListCrawledUrlsResponse: """Post-rpc interceptor for list_crawled_urls - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_crawled_urls_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_crawled_urls` interceptor runs + before the `post_list_crawled_urls_with_metadata` interceptor. """ return response + def post_list_crawled_urls_with_metadata( + self, + response: web_security_scanner.ListCrawledUrlsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListCrawledUrlsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_crawled_urls + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_crawled_urls_with_metadata` + interceptor in new development instead of the `post_list_crawled_urls` interceptor. + When both interceptors are used, this `post_list_crawled_urls_with_metadata` interceptor runs after the + `post_list_crawled_urls` interceptor. The (possibly modified) response returned by + `post_list_crawled_urls` will be passed to + `post_list_crawled_urls_with_metadata`. + """ + return response, metadata + def pre_list_findings( self, request: web_security_scanner.ListFindingsRequest, @@ -339,12 +457,38 @@ def post_list_findings( ) -> web_security_scanner.ListFindingsResponse: """Post-rpc interceptor for list_findings - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_findings_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_findings` interceptor runs + before the `post_list_findings_with_metadata` interceptor. """ return response + def post_list_findings_with_metadata( + self, + response: web_security_scanner.ListFindingsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListFindingsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_findings + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_findings_with_metadata` + interceptor in new development instead of the `post_list_findings` interceptor. + When both interceptors are used, this `post_list_findings_with_metadata` interceptor runs after the + `post_list_findings` interceptor. The (possibly modified) response returned by + `post_list_findings` will be passed to + `post_list_findings_with_metadata`. + """ + return response, metadata + def pre_list_finding_type_stats( self, request: web_security_scanner.ListFindingTypeStatsRequest, @@ -365,12 +509,38 @@ def post_list_finding_type_stats( ) -> web_security_scanner.ListFindingTypeStatsResponse: """Post-rpc interceptor for list_finding_type_stats - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_finding_type_stats_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_finding_type_stats` interceptor runs + before the `post_list_finding_type_stats_with_metadata` interceptor. """ return response + def post_list_finding_type_stats_with_metadata( + self, + response: web_security_scanner.ListFindingTypeStatsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListFindingTypeStatsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_finding_type_stats + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_finding_type_stats_with_metadata` + interceptor in new development instead of the `post_list_finding_type_stats` interceptor. + When both interceptors are used, this `post_list_finding_type_stats_with_metadata` interceptor runs after the + `post_list_finding_type_stats` interceptor. The (possibly modified) response returned by + `post_list_finding_type_stats` will be passed to + `post_list_finding_type_stats_with_metadata`. + """ + return response, metadata + def pre_list_scan_configs( self, request: web_security_scanner.ListScanConfigsRequest, @@ -391,12 +561,38 @@ def post_list_scan_configs( ) -> web_security_scanner.ListScanConfigsResponse: """Post-rpc interceptor for list_scan_configs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_scan_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_scan_configs` interceptor runs + before the `post_list_scan_configs_with_metadata` interceptor. """ return response + def post_list_scan_configs_with_metadata( + self, + response: web_security_scanner.ListScanConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListScanConfigsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_scan_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_scan_configs_with_metadata` + interceptor in new development instead of the `post_list_scan_configs` interceptor. + When both interceptors are used, this `post_list_scan_configs_with_metadata` interceptor runs after the + `post_list_scan_configs` interceptor. The (possibly modified) response returned by + `post_list_scan_configs` will be passed to + `post_list_scan_configs_with_metadata`. + """ + return response, metadata + def pre_list_scan_runs( self, request: web_security_scanner.ListScanRunsRequest, @@ -417,12 +613,38 @@ def post_list_scan_runs( ) -> web_security_scanner.ListScanRunsResponse: """Post-rpc interceptor for list_scan_runs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_scan_runs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_scan_runs` interceptor runs + before the `post_list_scan_runs_with_metadata` interceptor. """ return response + def post_list_scan_runs_with_metadata( + self, + response: web_security_scanner.ListScanRunsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListScanRunsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_scan_runs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_scan_runs_with_metadata` + interceptor in new development instead of the `post_list_scan_runs` interceptor. + When both interceptors are used, this `post_list_scan_runs_with_metadata` interceptor runs after the + `post_list_scan_runs` interceptor. The (possibly modified) response returned by + `post_list_scan_runs` will be passed to + `post_list_scan_runs_with_metadata`. + """ + return response, metadata + def pre_start_scan_run( self, request: web_security_scanner.StartScanRunRequest, @@ -441,12 +663,35 @@ def pre_start_scan_run( def post_start_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for start_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_start_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_start_scan_run` interceptor runs + before the `post_start_scan_run_with_metadata` interceptor. """ return response + def post_start_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for start_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_start_scan_run_with_metadata` + interceptor in new development instead of the `post_start_scan_run` interceptor. + When both interceptors are used, this `post_start_scan_run_with_metadata` interceptor runs after the + `post_start_scan_run` interceptor. The (possibly modified) response returned by + `post_start_scan_run` will be passed to + `post_start_scan_run_with_metadata`. + """ + return response, metadata + def pre_stop_scan_run( self, request: web_security_scanner.StopScanRunRequest, @@ -464,12 +709,35 @@ def pre_stop_scan_run( def post_stop_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for stop_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_stop_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_stop_scan_run` interceptor runs + before the `post_stop_scan_run_with_metadata` interceptor. """ return response + def post_stop_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for stop_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_stop_scan_run_with_metadata` + interceptor in new development instead of the `post_stop_scan_run` interceptor. + When both interceptors are used, this `post_stop_scan_run_with_metadata` interceptor runs after the + `post_stop_scan_run` interceptor. The (possibly modified) response returned by + `post_stop_scan_run` will be passed to + `post_stop_scan_run_with_metadata`. + """ + return response, metadata + def pre_update_scan_config( self, request: web_security_scanner.UpdateScanConfigRequest, @@ -490,12 +758,35 @@ def post_update_scan_config( ) -> scan_config.ScanConfig: """Post-rpc interceptor for update_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_update_scan_config` interceptor runs + before the `post_update_scan_config_with_metadata` interceptor. """ return response + def post_update_scan_config_with_metadata( + self, + response: scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_update_scan_config_with_metadata` + interceptor in new development instead of the `post_update_scan_config` interceptor. + When both interceptors are used, this `post_update_scan_config_with_metadata` interceptor runs after the + `post_update_scan_config` interceptor. The (possibly modified) response returned by + `post_update_scan_config` will be passed to + `post_update_scan_config_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class WebSecurityScannerRestStub: @@ -714,6 +1005,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -966,6 +1261,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_finding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_finding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1109,6 +1408,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1252,6 +1555,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1395,6 +1702,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_crawled_urls(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_crawled_urls_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1538,6 +1849,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_findings(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_findings_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1685,6 +2000,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_finding_type_stats(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_finding_type_stats_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1832,6 +2151,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_scan_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_scan_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1975,6 +2298,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_scan_runs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_scan_runs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2127,6 +2454,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_start_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_start_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2277,6 +2608,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_stop_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_stop_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2428,6 +2763,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/gapic_version.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/gapic_version.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/services/web_security_scanner/client.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/services/web_security_scanner/client.py index 71a7637efedc..6e1f23f8d99c 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/services/web_security_scanner/client.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/services/web_security_scanner/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -544,6 +546,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/services/web_security_scanner/transports/rest.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/services/web_security_scanner/transports/rest.py index b3ab17f88981..afb4e7271ede 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/services/web_security_scanner/transports/rest.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1alpha/services/web_security_scanner/transports/rest.py @@ -198,12 +198,35 @@ def post_create_scan_config( ) -> gcw_scan_config.ScanConfig: """Post-rpc interceptor for create_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_create_scan_config` interceptor runs + before the `post_create_scan_config_with_metadata` interceptor. """ return response + def post_create_scan_config_with_metadata( + self, + response: gcw_scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[gcw_scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_create_scan_config_with_metadata` + interceptor in new development instead of the `post_create_scan_config` interceptor. + When both interceptors are used, this `post_create_scan_config_with_metadata` interceptor runs after the + `post_create_scan_config` interceptor. The (possibly modified) response returned by + `post_create_scan_config` will be passed to + `post_create_scan_config_with_metadata`. + """ + return response, metadata + def pre_delete_scan_config( self, request: web_security_scanner.DeleteScanConfigRequest, @@ -236,12 +259,35 @@ def pre_get_finding( def post_get_finding(self, response: finding.Finding) -> finding.Finding: """Post-rpc interceptor for get_finding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_finding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_finding` interceptor runs + before the `post_get_finding_with_metadata` interceptor. """ return response + def post_get_finding_with_metadata( + self, + response: finding.Finding, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[finding.Finding, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_finding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_finding_with_metadata` + interceptor in new development instead of the `post_get_finding` interceptor. + When both interceptors are used, this `post_get_finding_with_metadata` interceptor runs after the + `post_get_finding` interceptor. The (possibly modified) response returned by + `post_get_finding` will be passed to + `post_get_finding_with_metadata`. + """ + return response, metadata + def pre_get_scan_config( self, request: web_security_scanner.GetScanConfigRequest, @@ -262,12 +308,35 @@ def post_get_scan_config( ) -> scan_config.ScanConfig: """Post-rpc interceptor for get_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_scan_config` interceptor runs + before the `post_get_scan_config_with_metadata` interceptor. """ return response + def post_get_scan_config_with_metadata( + self, + response: scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_scan_config_with_metadata` + interceptor in new development instead of the `post_get_scan_config` interceptor. + When both interceptors are used, this `post_get_scan_config_with_metadata` interceptor runs after the + `post_get_scan_config` interceptor. The (possibly modified) response returned by + `post_get_scan_config` will be passed to + `post_get_scan_config_with_metadata`. + """ + return response, metadata + def pre_get_scan_run( self, request: web_security_scanner.GetScanRunRequest, @@ -285,12 +354,35 @@ def pre_get_scan_run( def post_get_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for get_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_scan_run` interceptor runs + before the `post_get_scan_run_with_metadata` interceptor. """ return response + def post_get_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_scan_run_with_metadata` + interceptor in new development instead of the `post_get_scan_run` interceptor. + When both interceptors are used, this `post_get_scan_run_with_metadata` interceptor runs after the + `post_get_scan_run` interceptor. The (possibly modified) response returned by + `post_get_scan_run` will be passed to + `post_get_scan_run_with_metadata`. + """ + return response, metadata + def pre_list_crawled_urls( self, request: web_security_scanner.ListCrawledUrlsRequest, @@ -311,12 +403,38 @@ def post_list_crawled_urls( ) -> web_security_scanner.ListCrawledUrlsResponse: """Post-rpc interceptor for list_crawled_urls - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_crawled_urls_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_crawled_urls` interceptor runs + before the `post_list_crawled_urls_with_metadata` interceptor. """ return response + def post_list_crawled_urls_with_metadata( + self, + response: web_security_scanner.ListCrawledUrlsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListCrawledUrlsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_crawled_urls + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_crawled_urls_with_metadata` + interceptor in new development instead of the `post_list_crawled_urls` interceptor. + When both interceptors are used, this `post_list_crawled_urls_with_metadata` interceptor runs after the + `post_list_crawled_urls` interceptor. The (possibly modified) response returned by + `post_list_crawled_urls` will be passed to + `post_list_crawled_urls_with_metadata`. + """ + return response, metadata + def pre_list_findings( self, request: web_security_scanner.ListFindingsRequest, @@ -337,12 +455,38 @@ def post_list_findings( ) -> web_security_scanner.ListFindingsResponse: """Post-rpc interceptor for list_findings - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_findings_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_findings` interceptor runs + before the `post_list_findings_with_metadata` interceptor. """ return response + def post_list_findings_with_metadata( + self, + response: web_security_scanner.ListFindingsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListFindingsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_findings + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_findings_with_metadata` + interceptor in new development instead of the `post_list_findings` interceptor. + When both interceptors are used, this `post_list_findings_with_metadata` interceptor runs after the + `post_list_findings` interceptor. The (possibly modified) response returned by + `post_list_findings` will be passed to + `post_list_findings_with_metadata`. + """ + return response, metadata + def pre_list_finding_type_stats( self, request: web_security_scanner.ListFindingTypeStatsRequest, @@ -363,12 +507,38 @@ def post_list_finding_type_stats( ) -> web_security_scanner.ListFindingTypeStatsResponse: """Post-rpc interceptor for list_finding_type_stats - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_finding_type_stats_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_finding_type_stats` interceptor runs + before the `post_list_finding_type_stats_with_metadata` interceptor. """ return response + def post_list_finding_type_stats_with_metadata( + self, + response: web_security_scanner.ListFindingTypeStatsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListFindingTypeStatsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_finding_type_stats + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_finding_type_stats_with_metadata` + interceptor in new development instead of the `post_list_finding_type_stats` interceptor. + When both interceptors are used, this `post_list_finding_type_stats_with_metadata` interceptor runs after the + `post_list_finding_type_stats` interceptor. The (possibly modified) response returned by + `post_list_finding_type_stats` will be passed to + `post_list_finding_type_stats_with_metadata`. + """ + return response, metadata + def pre_list_scan_configs( self, request: web_security_scanner.ListScanConfigsRequest, @@ -389,12 +559,38 @@ def post_list_scan_configs( ) -> web_security_scanner.ListScanConfigsResponse: """Post-rpc interceptor for list_scan_configs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_scan_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_scan_configs` interceptor runs + before the `post_list_scan_configs_with_metadata` interceptor. """ return response + def post_list_scan_configs_with_metadata( + self, + response: web_security_scanner.ListScanConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListScanConfigsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_scan_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_scan_configs_with_metadata` + interceptor in new development instead of the `post_list_scan_configs` interceptor. + When both interceptors are used, this `post_list_scan_configs_with_metadata` interceptor runs after the + `post_list_scan_configs` interceptor. The (possibly modified) response returned by + `post_list_scan_configs` will be passed to + `post_list_scan_configs_with_metadata`. + """ + return response, metadata + def pre_list_scan_runs( self, request: web_security_scanner.ListScanRunsRequest, @@ -415,12 +611,38 @@ def post_list_scan_runs( ) -> web_security_scanner.ListScanRunsResponse: """Post-rpc interceptor for list_scan_runs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_scan_runs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_scan_runs` interceptor runs + before the `post_list_scan_runs_with_metadata` interceptor. """ return response + def post_list_scan_runs_with_metadata( + self, + response: web_security_scanner.ListScanRunsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListScanRunsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_scan_runs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_scan_runs_with_metadata` + interceptor in new development instead of the `post_list_scan_runs` interceptor. + When both interceptors are used, this `post_list_scan_runs_with_metadata` interceptor runs after the + `post_list_scan_runs` interceptor. The (possibly modified) response returned by + `post_list_scan_runs` will be passed to + `post_list_scan_runs_with_metadata`. + """ + return response, metadata + def pre_start_scan_run( self, request: web_security_scanner.StartScanRunRequest, @@ -439,12 +661,35 @@ def pre_start_scan_run( def post_start_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for start_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_start_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_start_scan_run` interceptor runs + before the `post_start_scan_run_with_metadata` interceptor. """ return response + def post_start_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for start_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_start_scan_run_with_metadata` + interceptor in new development instead of the `post_start_scan_run` interceptor. + When both interceptors are used, this `post_start_scan_run_with_metadata` interceptor runs after the + `post_start_scan_run` interceptor. The (possibly modified) response returned by + `post_start_scan_run` will be passed to + `post_start_scan_run_with_metadata`. + """ + return response, metadata + def pre_stop_scan_run( self, request: web_security_scanner.StopScanRunRequest, @@ -462,12 +707,35 @@ def pre_stop_scan_run( def post_stop_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for stop_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_stop_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_stop_scan_run` interceptor runs + before the `post_stop_scan_run_with_metadata` interceptor. """ return response + def post_stop_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for stop_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_stop_scan_run_with_metadata` + interceptor in new development instead of the `post_stop_scan_run` interceptor. + When both interceptors are used, this `post_stop_scan_run_with_metadata` interceptor runs after the + `post_stop_scan_run` interceptor. The (possibly modified) response returned by + `post_stop_scan_run` will be passed to + `post_stop_scan_run_with_metadata`. + """ + return response, metadata + def pre_update_scan_config( self, request: web_security_scanner.UpdateScanConfigRequest, @@ -488,12 +756,35 @@ def post_update_scan_config( ) -> gcw_scan_config.ScanConfig: """Post-rpc interceptor for update_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_update_scan_config` interceptor runs + before the `post_update_scan_config_with_metadata` interceptor. """ return response + def post_update_scan_config_with_metadata( + self, + response: gcw_scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[gcw_scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_update_scan_config_with_metadata` + interceptor in new development instead of the `post_update_scan_config` interceptor. + When both interceptors are used, this `post_update_scan_config_with_metadata` interceptor runs after the + `post_update_scan_config` interceptor. The (possibly modified) response returned by + `post_update_scan_config` will be passed to + `post_update_scan_config_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class WebSecurityScannerRestStub: @@ -713,6 +1004,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -965,6 +1260,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_finding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_finding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1109,6 +1408,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1251,6 +1554,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1394,6 +1701,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_crawled_urls(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_crawled_urls_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1537,6 +1848,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_findings(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_findings_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1684,6 +1999,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_finding_type_stats(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_finding_type_stats_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1831,6 +2150,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_scan_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_scan_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1974,6 +2297,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_scan_runs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_scan_runs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2125,6 +2452,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_start_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_start_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2274,6 +2605,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_stop_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_stop_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2426,6 +2761,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/gapic_version.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/gapic_version.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/services/web_security_scanner/client.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/services/web_security_scanner/client.py index 5da5353fd2dc..333d0e330f18 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/services/web_security_scanner/client.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/services/web_security_scanner/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -549,6 +551,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/services/web_security_scanner/transports/rest.py b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/services/web_security_scanner/transports/rest.py index f97923c261c7..999c80b5ea1d 100644 --- a/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/services/web_security_scanner/transports/rest.py +++ b/packages/google-cloud-websecurityscanner/google/cloud/websecurityscanner_v1beta/services/web_security_scanner/transports/rest.py @@ -198,12 +198,35 @@ def post_create_scan_config( ) -> gcw_scan_config.ScanConfig: """Post-rpc interceptor for create_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_create_scan_config` interceptor runs + before the `post_create_scan_config_with_metadata` interceptor. """ return response + def post_create_scan_config_with_metadata( + self, + response: gcw_scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[gcw_scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_create_scan_config_with_metadata` + interceptor in new development instead of the `post_create_scan_config` interceptor. + When both interceptors are used, this `post_create_scan_config_with_metadata` interceptor runs after the + `post_create_scan_config` interceptor. The (possibly modified) response returned by + `post_create_scan_config` will be passed to + `post_create_scan_config_with_metadata`. + """ + return response, metadata + def pre_delete_scan_config( self, request: web_security_scanner.DeleteScanConfigRequest, @@ -236,12 +259,35 @@ def pre_get_finding( def post_get_finding(self, response: finding.Finding) -> finding.Finding: """Post-rpc interceptor for get_finding - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_finding_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_finding` interceptor runs + before the `post_get_finding_with_metadata` interceptor. """ return response + def post_get_finding_with_metadata( + self, + response: finding.Finding, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[finding.Finding, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_finding + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_finding_with_metadata` + interceptor in new development instead of the `post_get_finding` interceptor. + When both interceptors are used, this `post_get_finding_with_metadata` interceptor runs after the + `post_get_finding` interceptor. The (possibly modified) response returned by + `post_get_finding` will be passed to + `post_get_finding_with_metadata`. + """ + return response, metadata + def pre_get_scan_config( self, request: web_security_scanner.GetScanConfigRequest, @@ -262,12 +308,35 @@ def post_get_scan_config( ) -> scan_config.ScanConfig: """Post-rpc interceptor for get_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_scan_config` interceptor runs + before the `post_get_scan_config_with_metadata` interceptor. """ return response + def post_get_scan_config_with_metadata( + self, + response: scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_scan_config_with_metadata` + interceptor in new development instead of the `post_get_scan_config` interceptor. + When both interceptors are used, this `post_get_scan_config_with_metadata` interceptor runs after the + `post_get_scan_config` interceptor. The (possibly modified) response returned by + `post_get_scan_config` will be passed to + `post_get_scan_config_with_metadata`. + """ + return response, metadata + def pre_get_scan_run( self, request: web_security_scanner.GetScanRunRequest, @@ -285,12 +354,35 @@ def pre_get_scan_run( def post_get_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for get_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_get_scan_run` interceptor runs + before the `post_get_scan_run_with_metadata` interceptor. """ return response + def post_get_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_get_scan_run_with_metadata` + interceptor in new development instead of the `post_get_scan_run` interceptor. + When both interceptors are used, this `post_get_scan_run_with_metadata` interceptor runs after the + `post_get_scan_run` interceptor. The (possibly modified) response returned by + `post_get_scan_run` will be passed to + `post_get_scan_run_with_metadata`. + """ + return response, metadata + def pre_list_crawled_urls( self, request: web_security_scanner.ListCrawledUrlsRequest, @@ -311,12 +403,38 @@ def post_list_crawled_urls( ) -> web_security_scanner.ListCrawledUrlsResponse: """Post-rpc interceptor for list_crawled_urls - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_crawled_urls_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_crawled_urls` interceptor runs + before the `post_list_crawled_urls_with_metadata` interceptor. """ return response + def post_list_crawled_urls_with_metadata( + self, + response: web_security_scanner.ListCrawledUrlsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListCrawledUrlsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_crawled_urls + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_crawled_urls_with_metadata` + interceptor in new development instead of the `post_list_crawled_urls` interceptor. + When both interceptors are used, this `post_list_crawled_urls_with_metadata` interceptor runs after the + `post_list_crawled_urls` interceptor. The (possibly modified) response returned by + `post_list_crawled_urls` will be passed to + `post_list_crawled_urls_with_metadata`. + """ + return response, metadata + def pre_list_findings( self, request: web_security_scanner.ListFindingsRequest, @@ -337,12 +455,38 @@ def post_list_findings( ) -> web_security_scanner.ListFindingsResponse: """Post-rpc interceptor for list_findings - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_findings_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_findings` interceptor runs + before the `post_list_findings_with_metadata` interceptor. """ return response + def post_list_findings_with_metadata( + self, + response: web_security_scanner.ListFindingsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListFindingsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_findings + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_findings_with_metadata` + interceptor in new development instead of the `post_list_findings` interceptor. + When both interceptors are used, this `post_list_findings_with_metadata` interceptor runs after the + `post_list_findings` interceptor. The (possibly modified) response returned by + `post_list_findings` will be passed to + `post_list_findings_with_metadata`. + """ + return response, metadata + def pre_list_finding_type_stats( self, request: web_security_scanner.ListFindingTypeStatsRequest, @@ -363,12 +507,38 @@ def post_list_finding_type_stats( ) -> web_security_scanner.ListFindingTypeStatsResponse: """Post-rpc interceptor for list_finding_type_stats - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_finding_type_stats_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_finding_type_stats` interceptor runs + before the `post_list_finding_type_stats_with_metadata` interceptor. """ return response + def post_list_finding_type_stats_with_metadata( + self, + response: web_security_scanner.ListFindingTypeStatsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListFindingTypeStatsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_finding_type_stats + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_finding_type_stats_with_metadata` + interceptor in new development instead of the `post_list_finding_type_stats` interceptor. + When both interceptors are used, this `post_list_finding_type_stats_with_metadata` interceptor runs after the + `post_list_finding_type_stats` interceptor. The (possibly modified) response returned by + `post_list_finding_type_stats` will be passed to + `post_list_finding_type_stats_with_metadata`. + """ + return response, metadata + def pre_list_scan_configs( self, request: web_security_scanner.ListScanConfigsRequest, @@ -389,12 +559,38 @@ def post_list_scan_configs( ) -> web_security_scanner.ListScanConfigsResponse: """Post-rpc interceptor for list_scan_configs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_scan_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_scan_configs` interceptor runs + before the `post_list_scan_configs_with_metadata` interceptor. """ return response + def post_list_scan_configs_with_metadata( + self, + response: web_security_scanner.ListScanConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListScanConfigsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_scan_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_scan_configs_with_metadata` + interceptor in new development instead of the `post_list_scan_configs` interceptor. + When both interceptors are used, this `post_list_scan_configs_with_metadata` interceptor runs after the + `post_list_scan_configs` interceptor. The (possibly modified) response returned by + `post_list_scan_configs` will be passed to + `post_list_scan_configs_with_metadata`. + """ + return response, metadata + def pre_list_scan_runs( self, request: web_security_scanner.ListScanRunsRequest, @@ -415,12 +611,38 @@ def post_list_scan_runs( ) -> web_security_scanner.ListScanRunsResponse: """Post-rpc interceptor for list_scan_runs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_scan_runs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_list_scan_runs` interceptor runs + before the `post_list_scan_runs_with_metadata` interceptor. """ return response + def post_list_scan_runs_with_metadata( + self, + response: web_security_scanner.ListScanRunsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + web_security_scanner.ListScanRunsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_scan_runs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_list_scan_runs_with_metadata` + interceptor in new development instead of the `post_list_scan_runs` interceptor. + When both interceptors are used, this `post_list_scan_runs_with_metadata` interceptor runs after the + `post_list_scan_runs` interceptor. The (possibly modified) response returned by + `post_list_scan_runs` will be passed to + `post_list_scan_runs_with_metadata`. + """ + return response, metadata + def pre_start_scan_run( self, request: web_security_scanner.StartScanRunRequest, @@ -439,12 +661,35 @@ def pre_start_scan_run( def post_start_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for start_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_start_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_start_scan_run` interceptor runs + before the `post_start_scan_run_with_metadata` interceptor. """ return response + def post_start_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for start_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_start_scan_run_with_metadata` + interceptor in new development instead of the `post_start_scan_run` interceptor. + When both interceptors are used, this `post_start_scan_run_with_metadata` interceptor runs after the + `post_start_scan_run` interceptor. The (possibly modified) response returned by + `post_start_scan_run` will be passed to + `post_start_scan_run_with_metadata`. + """ + return response, metadata + def pre_stop_scan_run( self, request: web_security_scanner.StopScanRunRequest, @@ -462,12 +707,35 @@ def pre_stop_scan_run( def post_stop_scan_run(self, response: scan_run.ScanRun) -> scan_run.ScanRun: """Post-rpc interceptor for stop_scan_run - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_stop_scan_run_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_stop_scan_run` interceptor runs + before the `post_stop_scan_run_with_metadata` interceptor. """ return response + def post_stop_scan_run_with_metadata( + self, + response: scan_run.ScanRun, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[scan_run.ScanRun, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for stop_scan_run + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_stop_scan_run_with_metadata` + interceptor in new development instead of the `post_stop_scan_run` interceptor. + When both interceptors are used, this `post_stop_scan_run_with_metadata` interceptor runs after the + `post_stop_scan_run` interceptor. The (possibly modified) response returned by + `post_stop_scan_run` will be passed to + `post_stop_scan_run_with_metadata`. + """ + return response, metadata + def pre_update_scan_config( self, request: web_security_scanner.UpdateScanConfigRequest, @@ -488,12 +756,35 @@ def post_update_scan_config( ) -> gcw_scan_config.ScanConfig: """Post-rpc interceptor for update_scan_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_scan_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the WebSecurityScanner server but before - it is returned to user code. + it is returned to user code. This `post_update_scan_config` interceptor runs + before the `post_update_scan_config_with_metadata` interceptor. """ return response + def post_update_scan_config_with_metadata( + self, + response: gcw_scan_config.ScanConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[gcw_scan_config.ScanConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_scan_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the WebSecurityScanner server but before it is returned to user code. + + We recommend only using this `post_update_scan_config_with_metadata` + interceptor in new development instead of the `post_update_scan_config` interceptor. + When both interceptors are used, this `post_update_scan_config_with_metadata` interceptor runs after the + `post_update_scan_config` interceptor. The (possibly modified) response returned by + `post_update_scan_config` will be passed to + `post_update_scan_config_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class WebSecurityScannerRestStub: @@ -712,6 +1003,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -964,6 +1259,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_finding(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_finding_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1107,6 +1406,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1250,6 +1553,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1393,6 +1700,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_crawled_urls(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_crawled_urls_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1536,6 +1847,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_findings(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_findings_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1683,6 +1998,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_finding_type_stats(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_finding_type_stats_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1830,6 +2149,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_scan_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_scan_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1973,6 +2296,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_scan_runs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_scan_runs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2125,6 +2452,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_start_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_start_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2275,6 +2606,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_stop_scan_run(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_stop_scan_run_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2426,6 +2761,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_scan_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_scan_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1.json b/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1.json index 60f463df04a2..147488567a91 100644 --- a/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1.json +++ b/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-websecurityscanner", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1alpha.json b/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1alpha.json index b7cbd48f7373..21a75dfa6018 100644 --- a/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1alpha.json +++ b/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1alpha.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-websecurityscanner", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1beta.json b/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1beta.json index fdd045adca0d..a41a6a4c4dd5 100644 --- a/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1beta.json +++ b/packages/google-cloud-websecurityscanner/samples/generated_samples/snippet_metadata_google.cloud.websecurityscanner.v1beta.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-websecurityscanner", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1/test_web_security_scanner.py b/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1/test_web_security_scanner.py index d07c0978e8c1..db707c5dcb2a 100644 --- a/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1/test_web_security_scanner.py +++ b/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1/test_web_security_scanner.py @@ -72,6 +72,13 @@ web_security_scanner, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -343,6 +350,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WebSecurityScannerClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WebSecurityScannerClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -7143,10 +7193,14 @@ def test_create_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_create_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_create_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_create_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.CreateScanConfigRequest.pb( web_security_scanner.CreateScanConfigRequest() ) @@ -7170,6 +7224,7 @@ def test_create_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_config.ScanConfig() + post_with_metadata.return_value = scan_config.ScanConfig(), metadata client.create_scan_config( request, @@ -7181,6 +7236,7 @@ def test_create_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_scan_config_rest_bad_request( @@ -7397,10 +7453,14 @@ def test_get_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_get_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetScanConfigRequest.pb( web_security_scanner.GetScanConfigRequest() ) @@ -7424,6 +7484,7 @@ def test_get_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_config.ScanConfig() + post_with_metadata.return_value = scan_config.ScanConfig(), metadata client.get_scan_config( request, @@ -7435,6 +7496,7 @@ def test_get_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_scan_configs_rest_bad_request( @@ -7519,10 +7581,14 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_scan_configs" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_scan_configs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_scan_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListScanConfigsRequest.pb( web_security_scanner.ListScanConfigsRequest() ) @@ -7548,6 +7614,10 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListScanConfigsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListScanConfigsResponse(), + metadata, + ) client.list_scan_configs( request, @@ -7559,6 +7629,7 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_scan_config_rest_bad_request( @@ -7769,10 +7840,14 @@ def test_update_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_update_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_update_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_update_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.UpdateScanConfigRequest.pb( web_security_scanner.UpdateScanConfigRequest() ) @@ -7796,6 +7871,7 @@ def test_update_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_config.ScanConfig() + post_with_metadata.return_value = scan_config.ScanConfig(), metadata client.update_scan_config( request, @@ -7807,6 +7883,7 @@ def test_update_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_start_scan_run_rest_bad_request( @@ -7903,10 +7980,14 @@ def test_start_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_start_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_start_scan_run_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_start_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.StartScanRunRequest.pb( web_security_scanner.StartScanRunRequest() ) @@ -7930,6 +8011,7 @@ def test_start_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.start_scan_run( request, @@ -7941,6 +8023,7 @@ def test_start_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_scan_run_rest_bad_request( @@ -8037,10 +8120,13 @@ def test_get_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_get_scan_run_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetScanRunRequest.pb( web_security_scanner.GetScanRunRequest() ) @@ -8064,6 +8150,7 @@ def test_get_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.get_scan_run( request, @@ -8075,6 +8162,7 @@ def test_get_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_scan_runs_rest_bad_request( @@ -8159,10 +8247,14 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_scan_runs" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_scan_runs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_scan_runs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListScanRunsRequest.pb( web_security_scanner.ListScanRunsRequest() ) @@ -8188,6 +8280,10 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListScanRunsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListScanRunsResponse(), + metadata, + ) client.list_scan_runs( request, @@ -8199,6 +8295,7 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_stop_scan_run_rest_bad_request( @@ -8295,10 +8392,13 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_stop_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_stop_scan_run_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_stop_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.StopScanRunRequest.pb( web_security_scanner.StopScanRunRequest() ) @@ -8322,6 +8422,7 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.stop_scan_run( request, @@ -8333,6 +8434,7 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_crawled_urls_rest_bad_request( @@ -8417,10 +8519,14 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_crawled_urls" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_crawled_urls_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_crawled_urls" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListCrawledUrlsRequest.pb( web_security_scanner.ListCrawledUrlsRequest() ) @@ -8446,6 +8552,10 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListCrawledUrlsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListCrawledUrlsResponse(), + metadata, + ) client.list_crawled_urls( request, @@ -8457,6 +8567,7 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_finding_rest_bad_request( @@ -8565,10 +8676,13 @@ def test_get_finding_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_finding" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_get_finding_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_finding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetFindingRequest.pb( web_security_scanner.GetFindingRequest() ) @@ -8592,6 +8706,7 @@ def test_get_finding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = finding.Finding() + post_with_metadata.return_value = finding.Finding(), metadata client.get_finding( request, @@ -8603,6 +8718,7 @@ def test_get_finding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_findings_rest_bad_request( @@ -8687,10 +8803,13 @@ def test_list_findings_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_findings" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_list_findings_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_findings" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListFindingsRequest.pb( web_security_scanner.ListFindingsRequest() ) @@ -8716,6 +8835,10 @@ def test_list_findings_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListFindingsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListFindingsResponse(), + metadata, + ) client.list_findings( request, @@ -8727,6 +8850,7 @@ def test_list_findings_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_finding_type_stats_rest_bad_request( @@ -8810,10 +8934,14 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_finding_type_stats" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_finding_type_stats_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_finding_type_stats" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListFindingTypeStatsRequest.pb( web_security_scanner.ListFindingTypeStatsRequest() ) @@ -8839,6 +8967,10 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListFindingTypeStatsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListFindingTypeStatsResponse(), + metadata, + ) client.list_finding_type_stats( request, @@ -8850,6 +8982,7 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1alpha/test_web_security_scanner.py b/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1alpha/test_web_security_scanner.py index eca8e50dd406..b52e59be7b3e 100644 --- a/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1alpha/test_web_security_scanner.py +++ b/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1alpha/test_web_security_scanner.py @@ -70,6 +70,13 @@ from google.cloud.websecurityscanner_v1alpha.types import scan_config as gcw_scan_config from google.cloud.websecurityscanner_v1alpha.types import scan_config +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -341,6 +348,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WebSecurityScannerClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WebSecurityScannerClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -10130,10 +10180,14 @@ def test_create_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_create_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_create_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_create_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.CreateScanConfigRequest.pb( web_security_scanner.CreateScanConfigRequest() ) @@ -10157,6 +10211,7 @@ def test_create_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = gcw_scan_config.ScanConfig() + post_with_metadata.return_value = gcw_scan_config.ScanConfig(), metadata client.create_scan_config( request, @@ -10168,6 +10223,7 @@ def test_create_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_scan_config_rest_bad_request( @@ -10375,10 +10431,14 @@ def test_get_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_get_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetScanConfigRequest.pb( web_security_scanner.GetScanConfigRequest() ) @@ -10402,6 +10462,7 @@ def test_get_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_config.ScanConfig() + post_with_metadata.return_value = scan_config.ScanConfig(), metadata client.get_scan_config( request, @@ -10413,6 +10474,7 @@ def test_get_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_scan_configs_rest_bad_request( @@ -10497,10 +10559,14 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_scan_configs" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_scan_configs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_scan_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListScanConfigsRequest.pb( web_security_scanner.ListScanConfigsRequest() ) @@ -10526,6 +10592,10 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListScanConfigsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListScanConfigsResponse(), + metadata, + ) client.list_scan_configs( request, @@ -10537,6 +10607,7 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_scan_config_rest_bad_request( @@ -10740,10 +10811,14 @@ def test_update_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_update_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_update_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_update_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.UpdateScanConfigRequest.pb( web_security_scanner.UpdateScanConfigRequest() ) @@ -10767,6 +10842,7 @@ def test_update_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = gcw_scan_config.ScanConfig() + post_with_metadata.return_value = gcw_scan_config.ScanConfig(), metadata client.update_scan_config( request, @@ -10778,6 +10854,7 @@ def test_update_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_start_scan_run_rest_bad_request( @@ -10874,10 +10951,14 @@ def test_start_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_start_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_start_scan_run_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_start_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.StartScanRunRequest.pb( web_security_scanner.StartScanRunRequest() ) @@ -10901,6 +10982,7 @@ def test_start_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.start_scan_run( request, @@ -10912,6 +10994,7 @@ def test_start_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_scan_run_rest_bad_request( @@ -11008,10 +11091,13 @@ def test_get_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_get_scan_run_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetScanRunRequest.pb( web_security_scanner.GetScanRunRequest() ) @@ -11035,6 +11121,7 @@ def test_get_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.get_scan_run( request, @@ -11046,6 +11133,7 @@ def test_get_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_scan_runs_rest_bad_request( @@ -11130,10 +11218,14 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_scan_runs" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_scan_runs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_scan_runs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListScanRunsRequest.pb( web_security_scanner.ListScanRunsRequest() ) @@ -11159,6 +11251,10 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListScanRunsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListScanRunsResponse(), + metadata, + ) client.list_scan_runs( request, @@ -11170,6 +11266,7 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_stop_scan_run_rest_bad_request( @@ -11266,10 +11363,13 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_stop_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_stop_scan_run_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_stop_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.StopScanRunRequest.pb( web_security_scanner.StopScanRunRequest() ) @@ -11293,6 +11393,7 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.stop_scan_run( request, @@ -11304,6 +11405,7 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_crawled_urls_rest_bad_request( @@ -11388,10 +11490,14 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_crawled_urls" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_crawled_urls_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_crawled_urls" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListCrawledUrlsRequest.pb( web_security_scanner.ListCrawledUrlsRequest() ) @@ -11417,6 +11523,10 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListCrawledUrlsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListCrawledUrlsResponse(), + metadata, + ) client.list_crawled_urls( request, @@ -11428,6 +11538,7 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_finding_rest_bad_request( @@ -11534,10 +11645,13 @@ def test_get_finding_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_finding" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_get_finding_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_finding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetFindingRequest.pb( web_security_scanner.GetFindingRequest() ) @@ -11561,6 +11675,7 @@ def test_get_finding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = finding.Finding() + post_with_metadata.return_value = finding.Finding(), metadata client.get_finding( request, @@ -11572,6 +11687,7 @@ def test_get_finding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_findings_rest_bad_request( @@ -11656,10 +11772,13 @@ def test_list_findings_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_findings" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_list_findings_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_findings" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListFindingsRequest.pb( web_security_scanner.ListFindingsRequest() ) @@ -11685,6 +11804,10 @@ def test_list_findings_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListFindingsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListFindingsResponse(), + metadata, + ) client.list_findings( request, @@ -11696,6 +11819,7 @@ def test_list_findings_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_finding_type_stats_rest_bad_request( @@ -11779,10 +11903,14 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_finding_type_stats" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_finding_type_stats_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_finding_type_stats" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListFindingTypeStatsRequest.pb( web_security_scanner.ListFindingTypeStatsRequest() ) @@ -11808,6 +11936,10 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListFindingTypeStatsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListFindingTypeStatsResponse(), + metadata, + ) client.list_finding_type_stats( request, @@ -11819,6 +11951,7 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1beta/test_web_security_scanner.py b/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1beta/test_web_security_scanner.py index e731e5ab7299..1369b015f2c2 100644 --- a/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1beta/test_web_security_scanner.py +++ b/packages/google-cloud-websecurityscanner/tests/unit/gapic/websecurityscanner_v1beta/test_web_security_scanner.py @@ -76,6 +76,13 @@ from google.cloud.websecurityscanner_v1beta.types import scan_config as gcw_scan_config from google.cloud.websecurityscanner_v1beta.types import scan_config +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -347,6 +354,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WebSecurityScannerClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WebSecurityScannerClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -10199,10 +10249,14 @@ def test_create_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_create_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_create_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_create_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.CreateScanConfigRequest.pb( web_security_scanner.CreateScanConfigRequest() ) @@ -10226,6 +10280,7 @@ def test_create_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = gcw_scan_config.ScanConfig() + post_with_metadata.return_value = gcw_scan_config.ScanConfig(), metadata client.create_scan_config( request, @@ -10237,6 +10292,7 @@ def test_create_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_scan_config_rest_bad_request( @@ -10451,10 +10507,14 @@ def test_get_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_get_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetScanConfigRequest.pb( web_security_scanner.GetScanConfigRequest() ) @@ -10478,6 +10538,7 @@ def test_get_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_config.ScanConfig() + post_with_metadata.return_value = scan_config.ScanConfig(), metadata client.get_scan_config( request, @@ -10489,6 +10550,7 @@ def test_get_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_scan_configs_rest_bad_request( @@ -10573,10 +10635,14 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_scan_configs" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_scan_configs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_scan_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListScanConfigsRequest.pb( web_security_scanner.ListScanConfigsRequest() ) @@ -10602,6 +10668,10 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListScanConfigsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListScanConfigsResponse(), + metadata, + ) client.list_scan_configs( request, @@ -10613,6 +10683,7 @@ def test_list_scan_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_scan_config_rest_bad_request( @@ -10831,10 +10902,14 @@ def test_update_scan_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_update_scan_config" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_update_scan_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_update_scan_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.UpdateScanConfigRequest.pb( web_security_scanner.UpdateScanConfigRequest() ) @@ -10858,6 +10933,7 @@ def test_update_scan_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = gcw_scan_config.ScanConfig() + post_with_metadata.return_value = gcw_scan_config.ScanConfig(), metadata client.update_scan_config( request, @@ -10869,6 +10945,7 @@ def test_update_scan_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_start_scan_run_rest_bad_request( @@ -10965,10 +11042,14 @@ def test_start_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_start_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_start_scan_run_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_start_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.StartScanRunRequest.pb( web_security_scanner.StartScanRunRequest() ) @@ -10992,6 +11073,7 @@ def test_start_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.start_scan_run( request, @@ -11003,6 +11085,7 @@ def test_start_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_scan_run_rest_bad_request( @@ -11099,10 +11182,13 @@ def test_get_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_get_scan_run_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetScanRunRequest.pb( web_security_scanner.GetScanRunRequest() ) @@ -11126,6 +11212,7 @@ def test_get_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.get_scan_run( request, @@ -11137,6 +11224,7 @@ def test_get_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_scan_runs_rest_bad_request( @@ -11221,10 +11309,14 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_scan_runs" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_scan_runs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_scan_runs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListScanRunsRequest.pb( web_security_scanner.ListScanRunsRequest() ) @@ -11250,6 +11342,10 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListScanRunsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListScanRunsResponse(), + metadata, + ) client.list_scan_runs( request, @@ -11261,6 +11357,7 @@ def test_list_scan_runs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_stop_scan_run_rest_bad_request( @@ -11357,10 +11454,13 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_stop_scan_run" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_stop_scan_run_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_stop_scan_run" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.StopScanRunRequest.pb( web_security_scanner.StopScanRunRequest() ) @@ -11384,6 +11484,7 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = scan_run.ScanRun() + post_with_metadata.return_value = scan_run.ScanRun(), metadata client.stop_scan_run( request, @@ -11395,6 +11496,7 @@ def test_stop_scan_run_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_crawled_urls_rest_bad_request( @@ -11479,10 +11581,14 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_crawled_urls" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_crawled_urls_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_crawled_urls" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListCrawledUrlsRequest.pb( web_security_scanner.ListCrawledUrlsRequest() ) @@ -11508,6 +11614,10 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListCrawledUrlsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListCrawledUrlsResponse(), + metadata, + ) client.list_crawled_urls( request, @@ -11519,6 +11629,7 @@ def test_list_crawled_urls_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_finding_rest_bad_request( @@ -11625,10 +11736,13 @@ def test_get_finding_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_get_finding" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_get_finding_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_get_finding" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.GetFindingRequest.pb( web_security_scanner.GetFindingRequest() ) @@ -11652,6 +11766,7 @@ def test_get_finding_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = finding.Finding() + post_with_metadata.return_value = finding.Finding(), metadata client.get_finding( request, @@ -11663,6 +11778,7 @@ def test_get_finding_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_findings_rest_bad_request( @@ -11747,10 +11863,13 @@ def test_list_findings_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_findings" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, "post_list_findings_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_findings" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListFindingsRequest.pb( web_security_scanner.ListFindingsRequest() ) @@ -11776,6 +11895,10 @@ def test_list_findings_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListFindingsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListFindingsResponse(), + metadata, + ) client.list_findings( request, @@ -11787,6 +11910,7 @@ def test_list_findings_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_finding_type_stats_rest_bad_request( @@ -11870,10 +11994,14 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "post_list_finding_type_stats" ) as post, mock.patch.object( + transports.WebSecurityScannerRestInterceptor, + "post_list_finding_type_stats_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WebSecurityScannerRestInterceptor, "pre_list_finding_type_stats" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = web_security_scanner.ListFindingTypeStatsRequest.pb( web_security_scanner.ListFindingTypeStatsRequest() ) @@ -11899,6 +12027,10 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = web_security_scanner.ListFindingTypeStatsResponse() + post_with_metadata.return_value = ( + web_security_scanner.ListFindingTypeStatsResponse(), + metadata, + ) client.list_finding_type_stats( request, @@ -11910,6 +12042,7 @@ def test_list_finding_type_stats_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-workflows/google/cloud/workflows/executions/gapic_version.py b/packages/google-cloud-workflows/google/cloud/workflows/executions/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows/executions/gapic_version.py +++ b/packages/google-cloud-workflows/google/cloud/workflows/executions/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workflows/google/cloud/workflows/executions_v1/gapic_version.py b/packages/google-cloud-workflows/google/cloud/workflows/executions_v1/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows/executions_v1/gapic_version.py +++ b/packages/google-cloud-workflows/google/cloud/workflows/executions_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workflows/google/cloud/workflows/executions_v1/services/executions/client.py b/packages/google-cloud-workflows/google/cloud/workflows/executions_v1/services/executions/client.py index e97f953c9e22..7d0596bbc446 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows/executions_v1/services/executions/client.py +++ b/packages/google-cloud-workflows/google/cloud/workflows/executions_v1/services/executions/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -509,6 +511,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-workflows/google/cloud/workflows/executions_v1beta/gapic_version.py b/packages/google-cloud-workflows/google/cloud/workflows/executions_v1beta/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows/executions_v1beta/gapic_version.py +++ b/packages/google-cloud-workflows/google/cloud/workflows/executions_v1beta/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workflows/google/cloud/workflows/executions_v1beta/services/executions/client.py b/packages/google-cloud-workflows/google/cloud/workflows/executions_v1beta/services/executions/client.py index 2e4ff661809c..e2813df8e165 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows/executions_v1beta/services/executions/client.py +++ b/packages/google-cloud-workflows/google/cloud/workflows/executions_v1beta/services/executions/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -509,6 +511,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-workflows/google/cloud/workflows/gapic_version.py b/packages/google-cloud-workflows/google/cloud/workflows/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows/gapic_version.py +++ b/packages/google-cloud-workflows/google/cloud/workflows/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workflows/google/cloud/workflows_v1/gapic_version.py b/packages/google-cloud-workflows/google/cloud/workflows_v1/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows_v1/gapic_version.py +++ b/packages/google-cloud-workflows/google/cloud/workflows_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workflows/google/cloud/workflows_v1/services/workflows/client.py b/packages/google-cloud-workflows/google/cloud/workflows_v1/services/workflows/client.py index 3456ac7e278d..90eaecc671af 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows_v1/services/workflows/client.py +++ b/packages/google-cloud-workflows/google/cloud/workflows_v1/services/workflows/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -517,6 +519,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -1428,16 +1457,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -1483,16 +1516,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -1594,16 +1631,20 @@ def get_location( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def list_locations( self, @@ -1649,16 +1690,20 @@ def list_locations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-workflows/google/cloud/workflows_v1/services/workflows/transports/rest.py b/packages/google-cloud-workflows/google/cloud/workflows_v1/services/workflows/transports/rest.py index edd59bc56b8e..fa75d4bea52f 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows_v1/services/workflows/transports/rest.py +++ b/packages/google-cloud-workflows/google/cloud/workflows_v1/services/workflows/transports/rest.py @@ -135,12 +135,35 @@ def post_create_workflow( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_workflow - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_workflow_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_create_workflow` interceptor runs + before the `post_create_workflow_with_metadata` interceptor. """ return response + def post_create_workflow_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_workflow + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_create_workflow_with_metadata` + interceptor in new development instead of the `post_create_workflow` interceptor. + When both interceptors are used, this `post_create_workflow_with_metadata` interceptor runs after the + `post_create_workflow` interceptor. The (possibly modified) response returned by + `post_create_workflow` will be passed to + `post_create_workflow_with_metadata`. + """ + return response, metadata + def pre_delete_workflow( self, request: workflows.DeleteWorkflowRequest, @@ -160,12 +183,35 @@ def post_delete_workflow( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_workflow - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_workflow_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_delete_workflow` interceptor runs + before the `post_delete_workflow_with_metadata` interceptor. """ return response + def post_delete_workflow_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_workflow + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_delete_workflow_with_metadata` + interceptor in new development instead of the `post_delete_workflow` interceptor. + When both interceptors are used, this `post_delete_workflow_with_metadata` interceptor runs after the + `post_delete_workflow` interceptor. The (possibly modified) response returned by + `post_delete_workflow` will be passed to + `post_delete_workflow_with_metadata`. + """ + return response, metadata + def pre_get_workflow( self, request: workflows.GetWorkflowRequest, @@ -181,12 +227,35 @@ def pre_get_workflow( def post_get_workflow(self, response: workflows.Workflow) -> workflows.Workflow: """Post-rpc interceptor for get_workflow - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_workflow_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_get_workflow` interceptor runs + before the `post_get_workflow_with_metadata` interceptor. """ return response + def post_get_workflow_with_metadata( + self, + response: workflows.Workflow, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[workflows.Workflow, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_workflow + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_get_workflow_with_metadata` + interceptor in new development instead of the `post_get_workflow` interceptor. + When both interceptors are used, this `post_get_workflow_with_metadata` interceptor runs after the + `post_get_workflow` interceptor. The (possibly modified) response returned by + `post_get_workflow` will be passed to + `post_get_workflow_with_metadata`. + """ + return response, metadata + def pre_list_workflows( self, request: workflows.ListWorkflowsRequest, @@ -204,12 +273,37 @@ def post_list_workflows( ) -> workflows.ListWorkflowsResponse: """Post-rpc interceptor for list_workflows - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_workflows_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_list_workflows` interceptor runs + before the `post_list_workflows_with_metadata` interceptor. """ return response + def post_list_workflows_with_metadata( + self, + response: workflows.ListWorkflowsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workflows.ListWorkflowsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_workflows + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_list_workflows_with_metadata` + interceptor in new development instead of the `post_list_workflows` interceptor. + When both interceptors are used, this `post_list_workflows_with_metadata` interceptor runs after the + `post_list_workflows` interceptor. The (possibly modified) response returned by + `post_list_workflows` will be passed to + `post_list_workflows_with_metadata`. + """ + return response, metadata + def pre_update_workflow( self, request: workflows.UpdateWorkflowRequest, @@ -229,12 +323,35 @@ def post_update_workflow( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_workflow - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_workflow_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_update_workflow` interceptor runs + before the `post_update_workflow_with_metadata` interceptor. """ return response + def post_update_workflow_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_workflow + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_update_workflow_with_metadata` + interceptor in new development instead of the `post_update_workflow` interceptor. + When both interceptors are used, this `post_update_workflow_with_metadata` interceptor runs after the + `post_update_workflow` interceptor. The (possibly modified) response returned by + `post_update_workflow` will be passed to + `post_update_workflow_with_metadata`. + """ + return response, metadata + def pre_get_location( self, request: locations_pb2.GetLocationRequest, @@ -626,6 +743,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_workflow(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_workflow_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -773,6 +894,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_workflow(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_workflow_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -919,6 +1044,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_workflow(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_workflow_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1068,6 +1197,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_workflows(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_workflows_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1223,6 +1356,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_workflow(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_workflow_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-workflows/google/cloud/workflows_v1beta/gapic_version.py b/packages/google-cloud-workflows/google/cloud/workflows_v1beta/gapic_version.py index 3e0ea3b28f0a..558c8aab67c5 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows_v1beta/gapic_version.py +++ b/packages/google-cloud-workflows/google/cloud/workflows_v1beta/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "1.16.0" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workflows/google/cloud/workflows_v1beta/services/workflows/client.py b/packages/google-cloud-workflows/google/cloud/workflows_v1beta/services/workflows/client.py index 52dbc7aecb88..623ce18acf73 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows_v1beta/services/workflows/client.py +++ b/packages/google-cloud-workflows/google/cloud/workflows_v1beta/services/workflows/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -491,6 +493,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-cloud-workflows/google/cloud/workflows_v1beta/services/workflows/transports/rest.py b/packages/google-cloud-workflows/google/cloud/workflows_v1beta/services/workflows/transports/rest.py index e69848b1336a..d462b9172f76 100644 --- a/packages/google-cloud-workflows/google/cloud/workflows_v1beta/services/workflows/transports/rest.py +++ b/packages/google-cloud-workflows/google/cloud/workflows_v1beta/services/workflows/transports/rest.py @@ -134,12 +134,35 @@ def post_create_workflow( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_workflow - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_workflow_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_create_workflow` interceptor runs + before the `post_create_workflow_with_metadata` interceptor. """ return response + def post_create_workflow_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_workflow + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_create_workflow_with_metadata` + interceptor in new development instead of the `post_create_workflow` interceptor. + When both interceptors are used, this `post_create_workflow_with_metadata` interceptor runs after the + `post_create_workflow` interceptor. The (possibly modified) response returned by + `post_create_workflow` will be passed to + `post_create_workflow_with_metadata`. + """ + return response, metadata + def pre_delete_workflow( self, request: workflows.DeleteWorkflowRequest, @@ -159,12 +182,35 @@ def post_delete_workflow( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_workflow - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_workflow_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_delete_workflow` interceptor runs + before the `post_delete_workflow_with_metadata` interceptor. """ return response + def post_delete_workflow_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_workflow + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_delete_workflow_with_metadata` + interceptor in new development instead of the `post_delete_workflow` interceptor. + When both interceptors are used, this `post_delete_workflow_with_metadata` interceptor runs after the + `post_delete_workflow` interceptor. The (possibly modified) response returned by + `post_delete_workflow` will be passed to + `post_delete_workflow_with_metadata`. + """ + return response, metadata + def pre_get_workflow( self, request: workflows.GetWorkflowRequest, @@ -180,12 +226,35 @@ def pre_get_workflow( def post_get_workflow(self, response: workflows.Workflow) -> workflows.Workflow: """Post-rpc interceptor for get_workflow - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_workflow_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_get_workflow` interceptor runs + before the `post_get_workflow_with_metadata` interceptor. """ return response + def post_get_workflow_with_metadata( + self, + response: workflows.Workflow, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[workflows.Workflow, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_workflow + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_get_workflow_with_metadata` + interceptor in new development instead of the `post_get_workflow` interceptor. + When both interceptors are used, this `post_get_workflow_with_metadata` interceptor runs after the + `post_get_workflow` interceptor. The (possibly modified) response returned by + `post_get_workflow` will be passed to + `post_get_workflow_with_metadata`. + """ + return response, metadata + def pre_list_workflows( self, request: workflows.ListWorkflowsRequest, @@ -203,12 +272,37 @@ def post_list_workflows( ) -> workflows.ListWorkflowsResponse: """Post-rpc interceptor for list_workflows - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_workflows_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_list_workflows` interceptor runs + before the `post_list_workflows_with_metadata` interceptor. """ return response + def post_list_workflows_with_metadata( + self, + response: workflows.ListWorkflowsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workflows.ListWorkflowsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_workflows + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_list_workflows_with_metadata` + interceptor in new development instead of the `post_list_workflows` interceptor. + When both interceptors are used, this `post_list_workflows_with_metadata` interceptor runs after the + `post_list_workflows` interceptor. The (possibly modified) response returned by + `post_list_workflows` will be passed to + `post_list_workflows_with_metadata`. + """ + return response, metadata + def pre_update_workflow( self, request: workflows.UpdateWorkflowRequest, @@ -228,12 +322,35 @@ def post_update_workflow( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_workflow - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_workflow_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workflows server but before - it is returned to user code. + it is returned to user code. This `post_update_workflow` interceptor runs + before the `post_update_workflow_with_metadata` interceptor. """ return response + def post_update_workflow_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_workflow + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workflows server but before it is returned to user code. + + We recommend only using this `post_update_workflow_with_metadata` + interceptor in new development instead of the `post_update_workflow` interceptor. + When both interceptors are used, this `post_update_workflow_with_metadata` interceptor runs after the + `post_update_workflow` interceptor. The (possibly modified) response returned by + `post_update_workflow` will be passed to + `post_update_workflow_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class WorkflowsRestStub: @@ -502,6 +619,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_workflow(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_workflow_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -649,6 +770,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_workflow(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_workflow_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -795,6 +920,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_workflow(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_workflow_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -944,6 +1073,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_workflows(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_workflows_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1099,6 +1232,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_workflow(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_workflow_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.executions.v1.json b/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.executions.v1.json index 86251e75c77d..fba2ed08eb7a 100644 --- a/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.executions.v1.json +++ b/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.executions.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-workflows-executions", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.executions.v1beta.json b/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.executions.v1beta.json index 84fcf0a65a8f..6f534b55fa27 100644 --- a/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.executions.v1beta.json +++ b/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.executions.v1beta.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-workflows-executions", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.v1.json b/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.v1.json index 4648f7d6b976..d0498f290f1f 100644 --- a/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.v1.json +++ b/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-workflows", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.v1beta.json b/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.v1beta.json index 258f44db0e56..1e4a9ce7a54e 100644 --- a/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.v1beta.json +++ b/packages/google-cloud-workflows/samples/generated_samples/snippet_metadata_google.cloud.workflows.v1beta.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-workflows", - "version": "1.16.0" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-workflows/tests/unit/gapic/executions_v1/test_executions.py b/packages/google-cloud-workflows/tests/unit/gapic/executions_v1/test_executions.py index 9e4941d9a851..cc02b29a21b8 100644 --- a/packages/google-cloud-workflows/tests/unit/gapic/executions_v1/test_executions.py +++ b/packages/google-cloud-workflows/tests/unit/gapic/executions_v1/test_executions.py @@ -22,6 +22,7 @@ except ImportError: # pragma: NO COVER import mock +import json import math from google.api_core import api_core_version @@ -57,6 +58,13 @@ ) from google.cloud.workflows.executions_v1.types import executions +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -292,6 +300,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ExecutionsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ExecutionsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ diff --git a/packages/google-cloud-workflows/tests/unit/gapic/executions_v1beta/test_executions.py b/packages/google-cloud-workflows/tests/unit/gapic/executions_v1beta/test_executions.py index b5f408d9e6db..9d6eef5d0dd5 100644 --- a/packages/google-cloud-workflows/tests/unit/gapic/executions_v1beta/test_executions.py +++ b/packages/google-cloud-workflows/tests/unit/gapic/executions_v1beta/test_executions.py @@ -22,6 +22,7 @@ except ImportError: # pragma: NO COVER import mock +import json import math from google.api_core import api_core_version @@ -56,6 +57,13 @@ ) from google.cloud.workflows.executions_v1beta.types import executions +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -291,6 +299,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = ExecutionsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = ExecutionsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ diff --git a/packages/google-cloud-workflows/tests/unit/gapic/workflows_v1/test_workflows.py b/packages/google-cloud-workflows/tests/unit/gapic/workflows_v1/test_workflows.py index c613c1671b54..6af73c28a05e 100644 --- a/packages/google-cloud-workflows/tests/unit/gapic/workflows_v1/test_workflows.py +++ b/packages/google-cloud-workflows/tests/unit/gapic/workflows_v1/test_workflows.py @@ -74,6 +74,13 @@ ) from google.cloud.workflows_v1.types import workflows +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -307,6 +314,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WorkflowsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WorkflowsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -4357,10 +4407,13 @@ def test_list_workflows_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkflowsRestInterceptor, "post_list_workflows" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_list_workflows_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_list_workflows" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.ListWorkflowsRequest.pb(workflows.ListWorkflowsRequest()) transcode.return_value = { "method": "post", @@ -4384,6 +4437,7 @@ def test_list_workflows_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workflows.ListWorkflowsResponse() + post_with_metadata.return_value = workflows.ListWorkflowsResponse(), metadata client.list_workflows( request, @@ -4395,6 +4449,7 @@ def test_list_workflows_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_workflow_rest_bad_request(request_type=workflows.GetWorkflowRequest): @@ -4488,10 +4543,13 @@ def test_get_workflow_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkflowsRestInterceptor, "post_get_workflow" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_get_workflow_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_get_workflow" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.GetWorkflowRequest.pb(workflows.GetWorkflowRequest()) transcode.return_value = { "method": "post", @@ -4513,6 +4571,7 @@ def test_get_workflow_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workflows.Workflow() + post_with_metadata.return_value = workflows.Workflow(), metadata client.get_workflow( request, @@ -4524,6 +4583,7 @@ def test_get_workflow_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_workflow_rest_bad_request(request_type=workflows.CreateWorkflowRequest): @@ -4683,10 +4743,13 @@ def test_create_workflow_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkflowsRestInterceptor, "post_create_workflow" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_create_workflow_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_create_workflow" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.CreateWorkflowRequest.pb( workflows.CreateWorkflowRequest() ) @@ -4710,6 +4773,7 @@ def test_create_workflow_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_workflow( request, @@ -4721,6 +4785,7 @@ def test_create_workflow_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_workflow_rest_bad_request(request_type=workflows.DeleteWorkflowRequest): @@ -4797,10 +4862,13 @@ def test_delete_workflow_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkflowsRestInterceptor, "post_delete_workflow" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_delete_workflow_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_delete_workflow" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.DeleteWorkflowRequest.pb( workflows.DeleteWorkflowRequest() ) @@ -4824,6 +4892,7 @@ def test_delete_workflow_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_workflow( request, @@ -4835,6 +4904,7 @@ def test_delete_workflow_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_workflow_rest_bad_request(request_type=workflows.UpdateWorkflowRequest): @@ -4998,10 +5068,13 @@ def test_update_workflow_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkflowsRestInterceptor, "post_update_workflow" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_update_workflow_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_update_workflow" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.UpdateWorkflowRequest.pb( workflows.UpdateWorkflowRequest() ) @@ -5025,6 +5098,7 @@ def test_update_workflow_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_workflow( request, @@ -5036,6 +5110,7 @@ def test_update_workflow_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_location_rest_bad_request(request_type=locations_pb2.GetLocationRequest): diff --git a/packages/google-cloud-workflows/tests/unit/gapic/workflows_v1beta/test_workflows.py b/packages/google-cloud-workflows/tests/unit/gapic/workflows_v1beta/test_workflows.py index e327a5532b35..541f3fce96bd 100644 --- a/packages/google-cloud-workflows/tests/unit/gapic/workflows_v1beta/test_workflows.py +++ b/packages/google-cloud-workflows/tests/unit/gapic/workflows_v1beta/test_workflows.py @@ -73,6 +73,13 @@ ) from google.cloud.workflows_v1beta.types import workflows +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -306,6 +313,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WorkflowsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WorkflowsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -4346,10 +4396,13 @@ def test_list_workflows_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkflowsRestInterceptor, "post_list_workflows" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_list_workflows_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_list_workflows" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.ListWorkflowsRequest.pb(workflows.ListWorkflowsRequest()) transcode.return_value = { "method": "post", @@ -4373,6 +4426,7 @@ def test_list_workflows_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workflows.ListWorkflowsResponse() + post_with_metadata.return_value = workflows.ListWorkflowsResponse(), metadata client.list_workflows( request, @@ -4384,6 +4438,7 @@ def test_list_workflows_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_workflow_rest_bad_request(request_type=workflows.GetWorkflowRequest): @@ -4473,10 +4528,13 @@ def test_get_workflow_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkflowsRestInterceptor, "post_get_workflow" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_get_workflow_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_get_workflow" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.GetWorkflowRequest.pb(workflows.GetWorkflowRequest()) transcode.return_value = { "method": "post", @@ -4498,6 +4556,7 @@ def test_get_workflow_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workflows.Workflow() + post_with_metadata.return_value = workflows.Workflow(), metadata client.get_workflow( request, @@ -4509,6 +4568,7 @@ def test_get_workflow_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_workflow_rest_bad_request(request_type=workflows.CreateWorkflowRequest): @@ -4664,10 +4724,13 @@ def test_create_workflow_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkflowsRestInterceptor, "post_create_workflow" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_create_workflow_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_create_workflow" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.CreateWorkflowRequest.pb( workflows.CreateWorkflowRequest() ) @@ -4691,6 +4754,7 @@ def test_create_workflow_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_workflow( request, @@ -4702,6 +4766,7 @@ def test_create_workflow_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_workflow_rest_bad_request(request_type=workflows.DeleteWorkflowRequest): @@ -4778,10 +4843,13 @@ def test_delete_workflow_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkflowsRestInterceptor, "post_delete_workflow" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_delete_workflow_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_delete_workflow" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.DeleteWorkflowRequest.pb( workflows.DeleteWorkflowRequest() ) @@ -4805,6 +4873,7 @@ def test_delete_workflow_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_workflow( request, @@ -4816,6 +4885,7 @@ def test_delete_workflow_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_workflow_rest_bad_request(request_type=workflows.UpdateWorkflowRequest): @@ -4975,10 +5045,13 @@ def test_update_workflow_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkflowsRestInterceptor, "post_update_workflow" ) as post, mock.patch.object( + transports.WorkflowsRestInterceptor, "post_update_workflow_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkflowsRestInterceptor, "pre_update_workflow" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workflows.UpdateWorkflowRequest.pb( workflows.UpdateWorkflowRequest() ) @@ -5002,6 +5075,7 @@ def test_update_workflow_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_workflow( request, @@ -5013,6 +5087,7 @@ def test_update_workflow_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-cloud-workstations/google/cloud/workstations/gapic_version.py b/packages/google-cloud-workstations/google/cloud/workstations/gapic_version.py index 0d21cc226e8f..558c8aab67c5 100644 --- a/packages/google-cloud-workstations/google/cloud/workstations/gapic_version.py +++ b/packages/google-cloud-workstations/google/cloud/workstations/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.5.11" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workstations/google/cloud/workstations_v1/gapic_version.py b/packages/google-cloud-workstations/google/cloud/workstations_v1/gapic_version.py index 0d21cc226e8f..558c8aab67c5 100644 --- a/packages/google-cloud-workstations/google/cloud/workstations_v1/gapic_version.py +++ b/packages/google-cloud-workstations/google/cloud/workstations_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.5.11" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workstations/google/cloud/workstations_v1/services/workstations/client.py b/packages/google-cloud-workstations/google/cloud/workstations_v1/services/workstations/client.py index 9d5d5ec5887c..42b830c44006 100644 --- a/packages/google-cloud-workstations/google/cloud/workstations_v1/services/workstations/client.py +++ b/packages/google-cloud-workstations/google/cloud/workstations_v1/services/workstations/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -543,6 +545,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -3325,16 +3354,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -3380,16 +3413,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -3612,16 +3649,20 @@ def set_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_iam_policy( self, @@ -3734,16 +3775,20 @@ def get_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def test_iam_permissions( self, @@ -3794,16 +3839,20 @@ def test_iam_permissions( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-workstations/google/cloud/workstations_v1/services/workstations/transports/rest.py b/packages/google-cloud-workstations/google/cloud/workstations_v1/services/workstations/transports/rest.py index c02f4ce26b68..2e28e3990f5c 100644 --- a/packages/google-cloud-workstations/google/cloud/workstations_v1/services/workstations/transports/rest.py +++ b/packages/google-cloud-workstations/google/cloud/workstations_v1/services/workstations/transports/rest.py @@ -257,12 +257,35 @@ def post_create_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_create_workstation` interceptor runs + before the `post_create_workstation_with_metadata` interceptor. """ return response + def post_create_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_create_workstation_with_metadata` + interceptor in new development instead of the `post_create_workstation` interceptor. + When both interceptors are used, this `post_create_workstation_with_metadata` interceptor runs after the + `post_create_workstation` interceptor. The (possibly modified) response returned by + `post_create_workstation` will be passed to + `post_create_workstation_with_metadata`. + """ + return response, metadata + def pre_create_workstation_cluster( self, request: workstations.CreateWorkstationClusterRequest, @@ -283,12 +306,35 @@ def post_create_workstation_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_workstation_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_workstation_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_create_workstation_cluster` interceptor runs + before the `post_create_workstation_cluster_with_metadata` interceptor. """ return response + def post_create_workstation_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_workstation_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_create_workstation_cluster_with_metadata` + interceptor in new development instead of the `post_create_workstation_cluster` interceptor. + When both interceptors are used, this `post_create_workstation_cluster_with_metadata` interceptor runs after the + `post_create_workstation_cluster` interceptor. The (possibly modified) response returned by + `post_create_workstation_cluster` will be passed to + `post_create_workstation_cluster_with_metadata`. + """ + return response, metadata + def pre_create_workstation_config( self, request: workstations.CreateWorkstationConfigRequest, @@ -309,12 +355,35 @@ def post_create_workstation_config( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_workstation_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_workstation_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_create_workstation_config` interceptor runs + before the `post_create_workstation_config_with_metadata` interceptor. """ return response + def post_create_workstation_config_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_workstation_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_create_workstation_config_with_metadata` + interceptor in new development instead of the `post_create_workstation_config` interceptor. + When both interceptors are used, this `post_create_workstation_config_with_metadata` interceptor runs after the + `post_create_workstation_config` interceptor. The (possibly modified) response returned by + `post_create_workstation_config` will be passed to + `post_create_workstation_config_with_metadata`. + """ + return response, metadata + def pre_delete_workstation( self, request: workstations.DeleteWorkstationRequest, @@ -334,12 +403,35 @@ def post_delete_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_delete_workstation` interceptor runs + before the `post_delete_workstation_with_metadata` interceptor. """ return response + def post_delete_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_delete_workstation_with_metadata` + interceptor in new development instead of the `post_delete_workstation` interceptor. + When both interceptors are used, this `post_delete_workstation_with_metadata` interceptor runs after the + `post_delete_workstation` interceptor. The (possibly modified) response returned by + `post_delete_workstation` will be passed to + `post_delete_workstation_with_metadata`. + """ + return response, metadata + def pre_delete_workstation_cluster( self, request: workstations.DeleteWorkstationClusterRequest, @@ -360,12 +452,35 @@ def post_delete_workstation_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_workstation_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_workstation_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_delete_workstation_cluster` interceptor runs + before the `post_delete_workstation_cluster_with_metadata` interceptor. """ return response + def post_delete_workstation_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_workstation_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_delete_workstation_cluster_with_metadata` + interceptor in new development instead of the `post_delete_workstation_cluster` interceptor. + When both interceptors are used, this `post_delete_workstation_cluster_with_metadata` interceptor runs after the + `post_delete_workstation_cluster` interceptor. The (possibly modified) response returned by + `post_delete_workstation_cluster` will be passed to + `post_delete_workstation_cluster_with_metadata`. + """ + return response, metadata + def pre_delete_workstation_config( self, request: workstations.DeleteWorkstationConfigRequest, @@ -386,12 +501,35 @@ def post_delete_workstation_config( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_workstation_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_workstation_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_delete_workstation_config` interceptor runs + before the `post_delete_workstation_config_with_metadata` interceptor. """ return response + def post_delete_workstation_config_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_workstation_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_delete_workstation_config_with_metadata` + interceptor in new development instead of the `post_delete_workstation_config` interceptor. + When both interceptors are used, this `post_delete_workstation_config_with_metadata` interceptor runs after the + `post_delete_workstation_config` interceptor. The (possibly modified) response returned by + `post_delete_workstation_config` will be passed to + `post_delete_workstation_config_with_metadata`. + """ + return response, metadata + def pre_generate_access_token( self, request: workstations.GenerateAccessTokenRequest, @@ -411,12 +549,38 @@ def post_generate_access_token( ) -> workstations.GenerateAccessTokenResponse: """Post-rpc interceptor for generate_access_token - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_generate_access_token_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_generate_access_token` interceptor runs + before the `post_generate_access_token_with_metadata` interceptor. """ return response + def post_generate_access_token_with_metadata( + self, + response: workstations.GenerateAccessTokenResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.GenerateAccessTokenResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for generate_access_token + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_generate_access_token_with_metadata` + interceptor in new development instead of the `post_generate_access_token` interceptor. + When both interceptors are used, this `post_generate_access_token_with_metadata` interceptor runs after the + `post_generate_access_token` interceptor. The (possibly modified) response returned by + `post_generate_access_token` will be passed to + `post_generate_access_token_with_metadata`. + """ + return response, metadata + def pre_get_workstation( self, request: workstations.GetWorkstationRequest, @@ -436,12 +600,35 @@ def post_get_workstation( ) -> workstations.Workstation: """Post-rpc interceptor for get_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_get_workstation` interceptor runs + before the `post_get_workstation_with_metadata` interceptor. """ return response + def post_get_workstation_with_metadata( + self, + response: workstations.Workstation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[workstations.Workstation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_get_workstation_with_metadata` + interceptor in new development instead of the `post_get_workstation` interceptor. + When both interceptors are used, this `post_get_workstation_with_metadata` interceptor runs after the + `post_get_workstation` interceptor. The (possibly modified) response returned by + `post_get_workstation` will be passed to + `post_get_workstation_with_metadata`. + """ + return response, metadata + def pre_get_workstation_cluster( self, request: workstations.GetWorkstationClusterRequest, @@ -462,12 +649,37 @@ def post_get_workstation_cluster( ) -> workstations.WorkstationCluster: """Post-rpc interceptor for get_workstation_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_workstation_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_get_workstation_cluster` interceptor runs + before the `post_get_workstation_cluster_with_metadata` interceptor. """ return response + def post_get_workstation_cluster_with_metadata( + self, + response: workstations.WorkstationCluster, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.WorkstationCluster, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_workstation_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_get_workstation_cluster_with_metadata` + interceptor in new development instead of the `post_get_workstation_cluster` interceptor. + When both interceptors are used, this `post_get_workstation_cluster_with_metadata` interceptor runs after the + `post_get_workstation_cluster` interceptor. The (possibly modified) response returned by + `post_get_workstation_cluster` will be passed to + `post_get_workstation_cluster_with_metadata`. + """ + return response, metadata + def pre_get_workstation_config( self, request: workstations.GetWorkstationConfigRequest, @@ -488,12 +700,35 @@ def post_get_workstation_config( ) -> workstations.WorkstationConfig: """Post-rpc interceptor for get_workstation_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_workstation_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_get_workstation_config` interceptor runs + before the `post_get_workstation_config_with_metadata` interceptor. """ return response + def post_get_workstation_config_with_metadata( + self, + response: workstations.WorkstationConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[workstations.WorkstationConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_workstation_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_get_workstation_config_with_metadata` + interceptor in new development instead of the `post_get_workstation_config` interceptor. + When both interceptors are used, this `post_get_workstation_config_with_metadata` interceptor runs after the + `post_get_workstation_config` interceptor. The (possibly modified) response returned by + `post_get_workstation_config` will be passed to + `post_get_workstation_config_with_metadata`. + """ + return response, metadata + def pre_list_usable_workstation_configs( self, request: workstations.ListUsableWorkstationConfigsRequest, @@ -514,12 +749,38 @@ def post_list_usable_workstation_configs( ) -> workstations.ListUsableWorkstationConfigsResponse: """Post-rpc interceptor for list_usable_workstation_configs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_usable_workstation_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_usable_workstation_configs` interceptor runs + before the `post_list_usable_workstation_configs_with_metadata` interceptor. """ return response + def post_list_usable_workstation_configs_with_metadata( + self, + response: workstations.ListUsableWorkstationConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListUsableWorkstationConfigsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_usable_workstation_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_usable_workstation_configs_with_metadata` + interceptor in new development instead of the `post_list_usable_workstation_configs` interceptor. + When both interceptors are used, this `post_list_usable_workstation_configs_with_metadata` interceptor runs after the + `post_list_usable_workstation_configs` interceptor. The (possibly modified) response returned by + `post_list_usable_workstation_configs` will be passed to + `post_list_usable_workstation_configs_with_metadata`. + """ + return response, metadata + def pre_list_usable_workstations( self, request: workstations.ListUsableWorkstationsRequest, @@ -540,12 +801,38 @@ def post_list_usable_workstations( ) -> workstations.ListUsableWorkstationsResponse: """Post-rpc interceptor for list_usable_workstations - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_usable_workstations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_usable_workstations` interceptor runs + before the `post_list_usable_workstations_with_metadata` interceptor. """ return response + def post_list_usable_workstations_with_metadata( + self, + response: workstations.ListUsableWorkstationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListUsableWorkstationsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_usable_workstations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_usable_workstations_with_metadata` + interceptor in new development instead of the `post_list_usable_workstations` interceptor. + When both interceptors are used, this `post_list_usable_workstations_with_metadata` interceptor runs after the + `post_list_usable_workstations` interceptor. The (possibly modified) response returned by + `post_list_usable_workstations` will be passed to + `post_list_usable_workstations_with_metadata`. + """ + return response, metadata + def pre_list_workstation_clusters( self, request: workstations.ListWorkstationClustersRequest, @@ -566,12 +853,38 @@ def post_list_workstation_clusters( ) -> workstations.ListWorkstationClustersResponse: """Post-rpc interceptor for list_workstation_clusters - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_workstation_clusters_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_workstation_clusters` interceptor runs + before the `post_list_workstation_clusters_with_metadata` interceptor. """ return response + def post_list_workstation_clusters_with_metadata( + self, + response: workstations.ListWorkstationClustersResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListWorkstationClustersResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_workstation_clusters + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_workstation_clusters_with_metadata` + interceptor in new development instead of the `post_list_workstation_clusters` interceptor. + When both interceptors are used, this `post_list_workstation_clusters_with_metadata` interceptor runs after the + `post_list_workstation_clusters` interceptor. The (possibly modified) response returned by + `post_list_workstation_clusters` will be passed to + `post_list_workstation_clusters_with_metadata`. + """ + return response, metadata + def pre_list_workstation_configs( self, request: workstations.ListWorkstationConfigsRequest, @@ -592,12 +905,38 @@ def post_list_workstation_configs( ) -> workstations.ListWorkstationConfigsResponse: """Post-rpc interceptor for list_workstation_configs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_workstation_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_workstation_configs` interceptor runs + before the `post_list_workstation_configs_with_metadata` interceptor. """ return response + def post_list_workstation_configs_with_metadata( + self, + response: workstations.ListWorkstationConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListWorkstationConfigsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_workstation_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_workstation_configs_with_metadata` + interceptor in new development instead of the `post_list_workstation_configs` interceptor. + When both interceptors are used, this `post_list_workstation_configs_with_metadata` interceptor runs after the + `post_list_workstation_configs` interceptor. The (possibly modified) response returned by + `post_list_workstation_configs` will be passed to + `post_list_workstation_configs_with_metadata`. + """ + return response, metadata + def pre_list_workstations( self, request: workstations.ListWorkstationsRequest, @@ -617,12 +956,37 @@ def post_list_workstations( ) -> workstations.ListWorkstationsResponse: """Post-rpc interceptor for list_workstations - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_workstations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_workstations` interceptor runs + before the `post_list_workstations_with_metadata` interceptor. """ return response + def post_list_workstations_with_metadata( + self, + response: workstations.ListWorkstationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListWorkstationsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_workstations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_workstations_with_metadata` + interceptor in new development instead of the `post_list_workstations` interceptor. + When both interceptors are used, this `post_list_workstations_with_metadata` interceptor runs after the + `post_list_workstations` interceptor. The (possibly modified) response returned by + `post_list_workstations` will be passed to + `post_list_workstations_with_metadata`. + """ + return response, metadata + def pre_start_workstation( self, request: workstations.StartWorkstationRequest, @@ -642,12 +1006,35 @@ def post_start_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for start_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_start_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_start_workstation` interceptor runs + before the `post_start_workstation_with_metadata` interceptor. """ return response + def post_start_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for start_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_start_workstation_with_metadata` + interceptor in new development instead of the `post_start_workstation` interceptor. + When both interceptors are used, this `post_start_workstation_with_metadata` interceptor runs after the + `post_start_workstation` interceptor. The (possibly modified) response returned by + `post_start_workstation` will be passed to + `post_start_workstation_with_metadata`. + """ + return response, metadata + def pre_stop_workstation( self, request: workstations.StopWorkstationRequest, @@ -667,12 +1054,35 @@ def post_stop_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for stop_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_stop_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_stop_workstation` interceptor runs + before the `post_stop_workstation_with_metadata` interceptor. """ return response + def post_stop_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for stop_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_stop_workstation_with_metadata` + interceptor in new development instead of the `post_stop_workstation` interceptor. + When both interceptors are used, this `post_stop_workstation_with_metadata` interceptor runs after the + `post_stop_workstation` interceptor. The (possibly modified) response returned by + `post_stop_workstation` will be passed to + `post_stop_workstation_with_metadata`. + """ + return response, metadata + def pre_update_workstation( self, request: workstations.UpdateWorkstationRequest, @@ -692,12 +1102,35 @@ def post_update_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_update_workstation` interceptor runs + before the `post_update_workstation_with_metadata` interceptor. """ return response + def post_update_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_update_workstation_with_metadata` + interceptor in new development instead of the `post_update_workstation` interceptor. + When both interceptors are used, this `post_update_workstation_with_metadata` interceptor runs after the + `post_update_workstation` interceptor. The (possibly modified) response returned by + `post_update_workstation` will be passed to + `post_update_workstation_with_metadata`. + """ + return response, metadata + def pre_update_workstation_cluster( self, request: workstations.UpdateWorkstationClusterRequest, @@ -718,12 +1151,35 @@ def post_update_workstation_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_workstation_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_workstation_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_update_workstation_cluster` interceptor runs + before the `post_update_workstation_cluster_with_metadata` interceptor. """ return response + def post_update_workstation_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_workstation_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_update_workstation_cluster_with_metadata` + interceptor in new development instead of the `post_update_workstation_cluster` interceptor. + When both interceptors are used, this `post_update_workstation_cluster_with_metadata` interceptor runs after the + `post_update_workstation_cluster` interceptor. The (possibly modified) response returned by + `post_update_workstation_cluster` will be passed to + `post_update_workstation_cluster_with_metadata`. + """ + return response, metadata + def pre_update_workstation_config( self, request: workstations.UpdateWorkstationConfigRequest, @@ -744,12 +1200,35 @@ def post_update_workstation_config( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_workstation_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_workstation_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_update_workstation_config` interceptor runs + before the `post_update_workstation_config_with_metadata` interceptor. """ return response + def post_update_workstation_config_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_workstation_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_update_workstation_config_with_metadata` + interceptor in new development instead of the `post_update_workstation_config` interceptor. + When both interceptors are used, this `post_update_workstation_config_with_metadata` interceptor runs after the + `post_update_workstation_config` interceptor. The (possibly modified) response returned by + `post_update_workstation_config` will be passed to + `post_update_workstation_config_with_metadata`. + """ + return response, metadata + def pre_get_iam_policy( self, request: iam_policy_pb2.GetIamPolicyRequest, @@ -1186,6 +1665,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1340,6 +1823,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_workstation_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_workstation_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1491,6 +1978,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_workstation_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_workstation_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1635,6 +2126,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1783,6 +2278,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_workstation_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_workstation_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1928,6 +2427,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_workstation_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_workstation_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2079,6 +2582,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_generate_access_token(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_generate_access_token_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2224,6 +2731,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2372,6 +2883,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_workstation_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_workstation_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2528,6 +3043,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_workstation_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_workstation_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2677,6 +3196,13 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_usable_workstation_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_list_usable_workstation_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2826,6 +3352,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_usable_workstations(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_usable_workstations_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2974,6 +3504,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_workstation_clusters(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_workstation_clusters_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3121,6 +3655,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_workstation_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_workstation_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3267,6 +3805,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_workstations(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_workstations_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3418,6 +3960,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_start_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_start_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3567,6 +4113,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_stop_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_stop_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3717,6 +4267,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3871,6 +4425,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_workstation_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_workstation_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4022,6 +4580,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_workstation_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_workstation_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-workstations/google/cloud/workstations_v1beta/gapic_version.py b/packages/google-cloud-workstations/google/cloud/workstations_v1beta/gapic_version.py index 0d21cc226e8f..558c8aab67c5 100644 --- a/packages/google-cloud-workstations/google/cloud/workstations_v1beta/gapic_version.py +++ b/packages/google-cloud-workstations/google/cloud/workstations_v1beta/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.5.11" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-cloud-workstations/google/cloud/workstations_v1beta/services/workstations/client.py b/packages/google-cloud-workstations/google/cloud/workstations_v1beta/services/workstations/client.py index 88bbd9e36357..ce2c3e1d3ef1 100644 --- a/packages/google-cloud-workstations/google/cloud/workstations_v1beta/services/workstations/client.py +++ b/packages/google-cloud-workstations/google/cloud/workstations_v1beta/services/workstations/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -543,6 +545,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. @@ -3325,16 +3354,20 @@ def list_operations( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_operation( self, @@ -3380,16 +3413,20 @@ def get_operation( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def delete_operation( self, @@ -3612,16 +3649,20 @@ def set_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def get_iam_policy( self, @@ -3734,16 +3775,20 @@ def get_iam_policy( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e def test_iam_permissions( self, @@ -3794,16 +3839,20 @@ def test_iam_permissions( # Validate the universe domain. self._validate_universe_domain() - # Send the request. - response = rpc( - request, - retry=retry, - timeout=timeout, - metadata=metadata, - ) + try: + # Send the request. + response = rpc( + request, + retry=retry, + timeout=timeout, + metadata=metadata, + ) - # Done; return the response. - return response + # Done; return the response. + return response + except core_exceptions.GoogleAPICallError as e: + self._add_cred_info_for_auth_errors(e) + raise e DEFAULT_CLIENT_INFO = gapic_v1.client_info.ClientInfo( diff --git a/packages/google-cloud-workstations/google/cloud/workstations_v1beta/services/workstations/transports/rest.py b/packages/google-cloud-workstations/google/cloud/workstations_v1beta/services/workstations/transports/rest.py index 51f0bc944028..e02558e7a0a2 100644 --- a/packages/google-cloud-workstations/google/cloud/workstations_v1beta/services/workstations/transports/rest.py +++ b/packages/google-cloud-workstations/google/cloud/workstations_v1beta/services/workstations/transports/rest.py @@ -257,12 +257,35 @@ def post_create_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_create_workstation` interceptor runs + before the `post_create_workstation_with_metadata` interceptor. """ return response + def post_create_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_create_workstation_with_metadata` + interceptor in new development instead of the `post_create_workstation` interceptor. + When both interceptors are used, this `post_create_workstation_with_metadata` interceptor runs after the + `post_create_workstation` interceptor. The (possibly modified) response returned by + `post_create_workstation` will be passed to + `post_create_workstation_with_metadata`. + """ + return response, metadata + def pre_create_workstation_cluster( self, request: workstations.CreateWorkstationClusterRequest, @@ -283,12 +306,35 @@ def post_create_workstation_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_workstation_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_workstation_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_create_workstation_cluster` interceptor runs + before the `post_create_workstation_cluster_with_metadata` interceptor. """ return response + def post_create_workstation_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_workstation_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_create_workstation_cluster_with_metadata` + interceptor in new development instead of the `post_create_workstation_cluster` interceptor. + When both interceptors are used, this `post_create_workstation_cluster_with_metadata` interceptor runs after the + `post_create_workstation_cluster` interceptor. The (possibly modified) response returned by + `post_create_workstation_cluster` will be passed to + `post_create_workstation_cluster_with_metadata`. + """ + return response, metadata + def pre_create_workstation_config( self, request: workstations.CreateWorkstationConfigRequest, @@ -309,12 +355,35 @@ def post_create_workstation_config( ) -> operations_pb2.Operation: """Post-rpc interceptor for create_workstation_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_workstation_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_create_workstation_config` interceptor runs + before the `post_create_workstation_config_with_metadata` interceptor. """ return response + def post_create_workstation_config_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_workstation_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_create_workstation_config_with_metadata` + interceptor in new development instead of the `post_create_workstation_config` interceptor. + When both interceptors are used, this `post_create_workstation_config_with_metadata` interceptor runs after the + `post_create_workstation_config` interceptor. The (possibly modified) response returned by + `post_create_workstation_config` will be passed to + `post_create_workstation_config_with_metadata`. + """ + return response, metadata + def pre_delete_workstation( self, request: workstations.DeleteWorkstationRequest, @@ -334,12 +403,35 @@ def post_delete_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_delete_workstation` interceptor runs + before the `post_delete_workstation_with_metadata` interceptor. """ return response + def post_delete_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_delete_workstation_with_metadata` + interceptor in new development instead of the `post_delete_workstation` interceptor. + When both interceptors are used, this `post_delete_workstation_with_metadata` interceptor runs after the + `post_delete_workstation` interceptor. The (possibly modified) response returned by + `post_delete_workstation` will be passed to + `post_delete_workstation_with_metadata`. + """ + return response, metadata + def pre_delete_workstation_cluster( self, request: workstations.DeleteWorkstationClusterRequest, @@ -360,12 +452,35 @@ def post_delete_workstation_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_workstation_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_workstation_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_delete_workstation_cluster` interceptor runs + before the `post_delete_workstation_cluster_with_metadata` interceptor. """ return response + def post_delete_workstation_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_workstation_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_delete_workstation_cluster_with_metadata` + interceptor in new development instead of the `post_delete_workstation_cluster` interceptor. + When both interceptors are used, this `post_delete_workstation_cluster_with_metadata` interceptor runs after the + `post_delete_workstation_cluster` interceptor. The (possibly modified) response returned by + `post_delete_workstation_cluster` will be passed to + `post_delete_workstation_cluster_with_metadata`. + """ + return response, metadata + def pre_delete_workstation_config( self, request: workstations.DeleteWorkstationConfigRequest, @@ -386,12 +501,35 @@ def post_delete_workstation_config( ) -> operations_pb2.Operation: """Post-rpc interceptor for delete_workstation_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_delete_workstation_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_delete_workstation_config` interceptor runs + before the `post_delete_workstation_config_with_metadata` interceptor. """ return response + def post_delete_workstation_config_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for delete_workstation_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_delete_workstation_config_with_metadata` + interceptor in new development instead of the `post_delete_workstation_config` interceptor. + When both interceptors are used, this `post_delete_workstation_config_with_metadata` interceptor runs after the + `post_delete_workstation_config` interceptor. The (possibly modified) response returned by + `post_delete_workstation_config` will be passed to + `post_delete_workstation_config_with_metadata`. + """ + return response, metadata + def pre_generate_access_token( self, request: workstations.GenerateAccessTokenRequest, @@ -411,12 +549,38 @@ def post_generate_access_token( ) -> workstations.GenerateAccessTokenResponse: """Post-rpc interceptor for generate_access_token - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_generate_access_token_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_generate_access_token` interceptor runs + before the `post_generate_access_token_with_metadata` interceptor. """ return response + def post_generate_access_token_with_metadata( + self, + response: workstations.GenerateAccessTokenResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.GenerateAccessTokenResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for generate_access_token + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_generate_access_token_with_metadata` + interceptor in new development instead of the `post_generate_access_token` interceptor. + When both interceptors are used, this `post_generate_access_token_with_metadata` interceptor runs after the + `post_generate_access_token` interceptor. The (possibly modified) response returned by + `post_generate_access_token` will be passed to + `post_generate_access_token_with_metadata`. + """ + return response, metadata + def pre_get_workstation( self, request: workstations.GetWorkstationRequest, @@ -436,12 +600,35 @@ def post_get_workstation( ) -> workstations.Workstation: """Post-rpc interceptor for get_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_get_workstation` interceptor runs + before the `post_get_workstation_with_metadata` interceptor. """ return response + def post_get_workstation_with_metadata( + self, + response: workstations.Workstation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[workstations.Workstation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_get_workstation_with_metadata` + interceptor in new development instead of the `post_get_workstation` interceptor. + When both interceptors are used, this `post_get_workstation_with_metadata` interceptor runs after the + `post_get_workstation` interceptor. The (possibly modified) response returned by + `post_get_workstation` will be passed to + `post_get_workstation_with_metadata`. + """ + return response, metadata + def pre_get_workstation_cluster( self, request: workstations.GetWorkstationClusterRequest, @@ -462,12 +649,37 @@ def post_get_workstation_cluster( ) -> workstations.WorkstationCluster: """Post-rpc interceptor for get_workstation_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_workstation_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_get_workstation_cluster` interceptor runs + before the `post_get_workstation_cluster_with_metadata` interceptor. """ return response + def post_get_workstation_cluster_with_metadata( + self, + response: workstations.WorkstationCluster, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.WorkstationCluster, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_workstation_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_get_workstation_cluster_with_metadata` + interceptor in new development instead of the `post_get_workstation_cluster` interceptor. + When both interceptors are used, this `post_get_workstation_cluster_with_metadata` interceptor runs after the + `post_get_workstation_cluster` interceptor. The (possibly modified) response returned by + `post_get_workstation_cluster` will be passed to + `post_get_workstation_cluster_with_metadata`. + """ + return response, metadata + def pre_get_workstation_config( self, request: workstations.GetWorkstationConfigRequest, @@ -488,12 +700,35 @@ def post_get_workstation_config( ) -> workstations.WorkstationConfig: """Post-rpc interceptor for get_workstation_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_workstation_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_get_workstation_config` interceptor runs + before the `post_get_workstation_config_with_metadata` interceptor. """ return response + def post_get_workstation_config_with_metadata( + self, + response: workstations.WorkstationConfig, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[workstations.WorkstationConfig, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_workstation_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_get_workstation_config_with_metadata` + interceptor in new development instead of the `post_get_workstation_config` interceptor. + When both interceptors are used, this `post_get_workstation_config_with_metadata` interceptor runs after the + `post_get_workstation_config` interceptor. The (possibly modified) response returned by + `post_get_workstation_config` will be passed to + `post_get_workstation_config_with_metadata`. + """ + return response, metadata + def pre_list_usable_workstation_configs( self, request: workstations.ListUsableWorkstationConfigsRequest, @@ -514,12 +749,38 @@ def post_list_usable_workstation_configs( ) -> workstations.ListUsableWorkstationConfigsResponse: """Post-rpc interceptor for list_usable_workstation_configs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_usable_workstation_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_usable_workstation_configs` interceptor runs + before the `post_list_usable_workstation_configs_with_metadata` interceptor. """ return response + def post_list_usable_workstation_configs_with_metadata( + self, + response: workstations.ListUsableWorkstationConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListUsableWorkstationConfigsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_usable_workstation_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_usable_workstation_configs_with_metadata` + interceptor in new development instead of the `post_list_usable_workstation_configs` interceptor. + When both interceptors are used, this `post_list_usable_workstation_configs_with_metadata` interceptor runs after the + `post_list_usable_workstation_configs` interceptor. The (possibly modified) response returned by + `post_list_usable_workstation_configs` will be passed to + `post_list_usable_workstation_configs_with_metadata`. + """ + return response, metadata + def pre_list_usable_workstations( self, request: workstations.ListUsableWorkstationsRequest, @@ -540,12 +801,38 @@ def post_list_usable_workstations( ) -> workstations.ListUsableWorkstationsResponse: """Post-rpc interceptor for list_usable_workstations - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_usable_workstations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_usable_workstations` interceptor runs + before the `post_list_usable_workstations_with_metadata` interceptor. """ return response + def post_list_usable_workstations_with_metadata( + self, + response: workstations.ListUsableWorkstationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListUsableWorkstationsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_usable_workstations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_usable_workstations_with_metadata` + interceptor in new development instead of the `post_list_usable_workstations` interceptor. + When both interceptors are used, this `post_list_usable_workstations_with_metadata` interceptor runs after the + `post_list_usable_workstations` interceptor. The (possibly modified) response returned by + `post_list_usable_workstations` will be passed to + `post_list_usable_workstations_with_metadata`. + """ + return response, metadata + def pre_list_workstation_clusters( self, request: workstations.ListWorkstationClustersRequest, @@ -566,12 +853,38 @@ def post_list_workstation_clusters( ) -> workstations.ListWorkstationClustersResponse: """Post-rpc interceptor for list_workstation_clusters - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_workstation_clusters_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_workstation_clusters` interceptor runs + before the `post_list_workstation_clusters_with_metadata` interceptor. """ return response + def post_list_workstation_clusters_with_metadata( + self, + response: workstations.ListWorkstationClustersResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListWorkstationClustersResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_workstation_clusters + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_workstation_clusters_with_metadata` + interceptor in new development instead of the `post_list_workstation_clusters` interceptor. + When both interceptors are used, this `post_list_workstation_clusters_with_metadata` interceptor runs after the + `post_list_workstation_clusters` interceptor. The (possibly modified) response returned by + `post_list_workstation_clusters` will be passed to + `post_list_workstation_clusters_with_metadata`. + """ + return response, metadata + def pre_list_workstation_configs( self, request: workstations.ListWorkstationConfigsRequest, @@ -592,12 +905,38 @@ def post_list_workstation_configs( ) -> workstations.ListWorkstationConfigsResponse: """Post-rpc interceptor for list_workstation_configs - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_workstation_configs_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_workstation_configs` interceptor runs + before the `post_list_workstation_configs_with_metadata` interceptor. """ return response + def post_list_workstation_configs_with_metadata( + self, + response: workstations.ListWorkstationConfigsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListWorkstationConfigsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_workstation_configs + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_workstation_configs_with_metadata` + interceptor in new development instead of the `post_list_workstation_configs` interceptor. + When both interceptors are used, this `post_list_workstation_configs_with_metadata` interceptor runs after the + `post_list_workstation_configs` interceptor. The (possibly modified) response returned by + `post_list_workstation_configs` will be passed to + `post_list_workstation_configs_with_metadata`. + """ + return response, metadata + def pre_list_workstations( self, request: workstations.ListWorkstationsRequest, @@ -617,12 +956,37 @@ def post_list_workstations( ) -> workstations.ListWorkstationsResponse: """Post-rpc interceptor for list_workstations - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_workstations_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_list_workstations` interceptor runs + before the `post_list_workstations_with_metadata` interceptor. """ return response + def post_list_workstations_with_metadata( + self, + response: workstations.ListWorkstationsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + workstations.ListWorkstationsResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for list_workstations + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_list_workstations_with_metadata` + interceptor in new development instead of the `post_list_workstations` interceptor. + When both interceptors are used, this `post_list_workstations_with_metadata` interceptor runs after the + `post_list_workstations` interceptor. The (possibly modified) response returned by + `post_list_workstations` will be passed to + `post_list_workstations_with_metadata`. + """ + return response, metadata + def pre_start_workstation( self, request: workstations.StartWorkstationRequest, @@ -642,12 +1006,35 @@ def post_start_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for start_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_start_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_start_workstation` interceptor runs + before the `post_start_workstation_with_metadata` interceptor. """ return response + def post_start_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for start_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_start_workstation_with_metadata` + interceptor in new development instead of the `post_start_workstation` interceptor. + When both interceptors are used, this `post_start_workstation_with_metadata` interceptor runs after the + `post_start_workstation` interceptor. The (possibly modified) response returned by + `post_start_workstation` will be passed to + `post_start_workstation_with_metadata`. + """ + return response, metadata + def pre_stop_workstation( self, request: workstations.StopWorkstationRequest, @@ -667,12 +1054,35 @@ def post_stop_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for stop_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_stop_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_stop_workstation` interceptor runs + before the `post_stop_workstation_with_metadata` interceptor. """ return response + def post_stop_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for stop_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_stop_workstation_with_metadata` + interceptor in new development instead of the `post_stop_workstation` interceptor. + When both interceptors are used, this `post_stop_workstation_with_metadata` interceptor runs after the + `post_stop_workstation` interceptor. The (possibly modified) response returned by + `post_stop_workstation` will be passed to + `post_stop_workstation_with_metadata`. + """ + return response, metadata + def pre_update_workstation( self, request: workstations.UpdateWorkstationRequest, @@ -692,12 +1102,35 @@ def post_update_workstation( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_workstation - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_workstation_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_update_workstation` interceptor runs + before the `post_update_workstation_with_metadata` interceptor. """ return response + def post_update_workstation_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_workstation + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_update_workstation_with_metadata` + interceptor in new development instead of the `post_update_workstation` interceptor. + When both interceptors are used, this `post_update_workstation_with_metadata` interceptor runs after the + `post_update_workstation` interceptor. The (possibly modified) response returned by + `post_update_workstation` will be passed to + `post_update_workstation_with_metadata`. + """ + return response, metadata + def pre_update_workstation_cluster( self, request: workstations.UpdateWorkstationClusterRequest, @@ -718,12 +1151,35 @@ def post_update_workstation_cluster( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_workstation_cluster - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_workstation_cluster_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_update_workstation_cluster` interceptor runs + before the `post_update_workstation_cluster_with_metadata` interceptor. """ return response + def post_update_workstation_cluster_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_workstation_cluster + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_update_workstation_cluster_with_metadata` + interceptor in new development instead of the `post_update_workstation_cluster` interceptor. + When both interceptors are used, this `post_update_workstation_cluster_with_metadata` interceptor runs after the + `post_update_workstation_cluster` interceptor. The (possibly modified) response returned by + `post_update_workstation_cluster` will be passed to + `post_update_workstation_cluster_with_metadata`. + """ + return response, metadata + def pre_update_workstation_config( self, request: workstations.UpdateWorkstationConfigRequest, @@ -744,12 +1200,35 @@ def post_update_workstation_config( ) -> operations_pb2.Operation: """Post-rpc interceptor for update_workstation_config - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_workstation_config_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the Workstations server but before - it is returned to user code. + it is returned to user code. This `post_update_workstation_config` interceptor runs + before the `post_update_workstation_config_with_metadata` interceptor. """ return response + def post_update_workstation_config_with_metadata( + self, + response: operations_pb2.Operation, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[operations_pb2.Operation, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_workstation_config + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the Workstations server but before it is returned to user code. + + We recommend only using this `post_update_workstation_config_with_metadata` + interceptor in new development instead of the `post_update_workstation_config` interceptor. + When both interceptors are used, this `post_update_workstation_config_with_metadata` interceptor runs after the + `post_update_workstation_config` interceptor. The (possibly modified) response returned by + `post_update_workstation_config` will be passed to + `post_update_workstation_config_with_metadata`. + """ + return response, metadata + def pre_get_iam_policy( self, request: iam_policy_pb2.GetIamPolicyRequest, @@ -1186,6 +1665,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1340,6 +1823,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_workstation_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_workstation_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1491,6 +1978,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_workstation_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_workstation_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1635,6 +2126,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1783,6 +2278,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_workstation_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_workstation_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1928,6 +2427,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_delete_workstation_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_delete_workstation_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2079,6 +2582,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_generate_access_token(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_generate_access_token_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2224,6 +2731,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2372,6 +2883,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_workstation_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_workstation_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2528,6 +3043,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_workstation_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_workstation_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2677,6 +3196,13 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_usable_workstation_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + ( + resp, + _, + ) = self._interceptor.post_list_usable_workstation_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2826,6 +3352,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_usable_workstations(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_usable_workstations_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2974,6 +3504,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_workstation_clusters(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_workstation_clusters_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3121,6 +3655,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_workstation_configs(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_workstation_configs_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3267,6 +3805,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_workstations(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_workstations_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3418,6 +3960,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_start_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_start_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3567,6 +4113,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_stop_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_stop_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3717,6 +4267,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_workstation(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_workstation_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -3871,6 +4425,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_workstation_cluster(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_workstation_cluster_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -4022,6 +4580,10 @@ def __call__( json_format.Parse(response.content, resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_workstation_config(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_workstation_config_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-cloud-workstations/samples/generated_samples/snippet_metadata_google.cloud.workstations.v1.json b/packages/google-cloud-workstations/samples/generated_samples/snippet_metadata_google.cloud.workstations.v1.json index 05cf7598660e..c9f644c1d20c 100644 --- a/packages/google-cloud-workstations/samples/generated_samples/snippet_metadata_google.cloud.workstations.v1.json +++ b/packages/google-cloud-workstations/samples/generated_samples/snippet_metadata_google.cloud.workstations.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-workstations", - "version": "0.5.11" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-workstations/samples/generated_samples/snippet_metadata_google.cloud.workstations.v1beta.json b/packages/google-cloud-workstations/samples/generated_samples/snippet_metadata_google.cloud.workstations.v1beta.json index 232f689b4b6f..2a6523f2cb2d 100644 --- a/packages/google-cloud-workstations/samples/generated_samples/snippet_metadata_google.cloud.workstations.v1beta.json +++ b/packages/google-cloud-workstations/samples/generated_samples/snippet_metadata_google.cloud.workstations.v1beta.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-cloud-workstations", - "version": "0.5.11" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-cloud-workstations/tests/unit/gapic/workstations_v1/test_workstations.py b/packages/google-cloud-workstations/tests/unit/gapic/workstations_v1/test_workstations.py index 2b5a25716e75..f102a7a5d374 100644 --- a/packages/google-cloud-workstations/tests/unit/gapic/workstations_v1/test_workstations.py +++ b/packages/google-cloud-workstations/tests/unit/gapic/workstations_v1/test_workstations.py @@ -79,6 +79,13 @@ ) from google.cloud.workstations_v1.types import workstations +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -322,6 +329,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WorkstationsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WorkstationsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -14710,10 +14760,14 @@ def test_get_workstation_cluster_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_get_workstation_cluster" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_get_workstation_cluster_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_get_workstation_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.GetWorkstationClusterRequest.pb( workstations.GetWorkstationClusterRequest() ) @@ -14739,6 +14793,7 @@ def test_get_workstation_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.WorkstationCluster() + post_with_metadata.return_value = workstations.WorkstationCluster(), metadata client.get_workstation_cluster( request, @@ -14750,6 +14805,7 @@ def test_get_workstation_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_workstation_clusters_rest_bad_request( @@ -14836,10 +14892,14 @@ def test_list_workstation_clusters_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_workstation_clusters" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_list_workstation_clusters_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_workstation_clusters" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListWorkstationClustersRequest.pb( workstations.ListWorkstationClustersRequest() ) @@ -14865,6 +14925,10 @@ def test_list_workstation_clusters_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListWorkstationClustersResponse() + post_with_metadata.return_value = ( + workstations.ListWorkstationClustersResponse(), + metadata, + ) client.list_workstation_clusters( request, @@ -14876,6 +14940,7 @@ def test_list_workstation_clusters_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_workstation_cluster_rest_bad_request( @@ -15059,10 +15124,14 @@ def test_create_workstation_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_create_workstation_cluster" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_create_workstation_cluster_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_create_workstation_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.CreateWorkstationClusterRequest.pb( workstations.CreateWorkstationClusterRequest() ) @@ -15086,6 +15155,7 @@ def test_create_workstation_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_workstation_cluster( request, @@ -15097,6 +15167,7 @@ def test_create_workstation_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_workstation_cluster_rest_bad_request( @@ -15288,10 +15359,14 @@ def test_update_workstation_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_update_workstation_cluster" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_update_workstation_cluster_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_update_workstation_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.UpdateWorkstationClusterRequest.pb( workstations.UpdateWorkstationClusterRequest() ) @@ -15315,6 +15390,7 @@ def test_update_workstation_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_workstation_cluster( request, @@ -15326,6 +15402,7 @@ def test_update_workstation_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_workstation_cluster_rest_bad_request( @@ -15410,10 +15487,14 @@ def test_delete_workstation_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_delete_workstation_cluster" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_delete_workstation_cluster_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_delete_workstation_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.DeleteWorkstationClusterRequest.pb( workstations.DeleteWorkstationClusterRequest() ) @@ -15437,6 +15518,7 @@ def test_delete_workstation_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_workstation_cluster( request, @@ -15448,6 +15530,7 @@ def test_delete_workstation_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_workstation_config_rest_bad_request( @@ -15548,10 +15631,14 @@ def test_get_workstation_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_get_workstation_config" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_get_workstation_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_get_workstation_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.GetWorkstationConfigRequest.pb( workstations.GetWorkstationConfigRequest() ) @@ -15577,6 +15664,7 @@ def test_get_workstation_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.WorkstationConfig() + post_with_metadata.return_value = workstations.WorkstationConfig(), metadata client.get_workstation_config( request, @@ -15588,6 +15676,7 @@ def test_get_workstation_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_workstation_configs_rest_bad_request( @@ -15678,10 +15767,14 @@ def test_list_workstation_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_workstation_configs" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_list_workstation_configs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_workstation_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListWorkstationConfigsRequest.pb( workstations.ListWorkstationConfigsRequest() ) @@ -15707,6 +15800,10 @@ def test_list_workstation_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListWorkstationConfigsResponse() + post_with_metadata.return_value = ( + workstations.ListWorkstationConfigsResponse(), + metadata, + ) client.list_workstation_configs( request, @@ -15718,6 +15815,7 @@ def test_list_workstation_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_usable_workstation_configs_rest_bad_request( @@ -15810,10 +15908,14 @@ def test_list_usable_workstation_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_usable_workstation_configs" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_list_usable_workstation_configs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_usable_workstation_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListUsableWorkstationConfigsRequest.pb( workstations.ListUsableWorkstationConfigsRequest() ) @@ -15839,6 +15941,10 @@ def test_list_usable_workstation_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListUsableWorkstationConfigsResponse() + post_with_metadata.return_value = ( + workstations.ListUsableWorkstationConfigsResponse(), + metadata, + ) client.list_usable_workstation_configs( request, @@ -15850,6 +15956,7 @@ def test_list_usable_workstation_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_workstation_config_rest_bad_request( @@ -16078,10 +16185,14 @@ def test_create_workstation_config_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_create_workstation_config" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_create_workstation_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_create_workstation_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.CreateWorkstationConfigRequest.pb( workstations.CreateWorkstationConfigRequest() ) @@ -16105,6 +16216,7 @@ def test_create_workstation_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_workstation_config( request, @@ -16116,6 +16228,7 @@ def test_create_workstation_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_workstation_config_rest_bad_request( @@ -16348,10 +16461,14 @@ def test_update_workstation_config_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_update_workstation_config" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_update_workstation_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_update_workstation_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.UpdateWorkstationConfigRequest.pb( workstations.UpdateWorkstationConfigRequest() ) @@ -16375,6 +16492,7 @@ def test_update_workstation_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_workstation_config( request, @@ -16386,6 +16504,7 @@ def test_update_workstation_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_workstation_config_rest_bad_request( @@ -16470,10 +16589,14 @@ def test_delete_workstation_config_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_delete_workstation_config" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_delete_workstation_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_delete_workstation_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.DeleteWorkstationConfigRequest.pb( workstations.DeleteWorkstationConfigRequest() ) @@ -16497,6 +16620,7 @@ def test_delete_workstation_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_workstation_config( request, @@ -16508,6 +16632,7 @@ def test_delete_workstation_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_workstation_rest_bad_request( @@ -16608,10 +16733,13 @@ def test_get_workstation_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_get_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_get_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_get_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.GetWorkstationRequest.pb( workstations.GetWorkstationRequest() ) @@ -16635,6 +16763,7 @@ def test_get_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.Workstation() + post_with_metadata.return_value = workstations.Workstation(), metadata client.get_workstation( request, @@ -16646,6 +16775,7 @@ def test_get_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_workstations_rest_bad_request( @@ -16736,10 +16866,13 @@ def test_list_workstations_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_workstations" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_list_workstations_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_workstations" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListWorkstationsRequest.pb( workstations.ListWorkstationsRequest() ) @@ -16765,6 +16898,10 @@ def test_list_workstations_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListWorkstationsResponse() + post_with_metadata.return_value = ( + workstations.ListWorkstationsResponse(), + metadata, + ) client.list_workstations( request, @@ -16776,6 +16913,7 @@ def test_list_workstations_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_usable_workstations_rest_bad_request( @@ -16866,10 +17004,14 @@ def test_list_usable_workstations_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_usable_workstations" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_list_usable_workstations_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_usable_workstations" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListUsableWorkstationsRequest.pb( workstations.ListUsableWorkstationsRequest() ) @@ -16895,6 +17037,10 @@ def test_list_usable_workstations_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListUsableWorkstationsResponse() + post_with_metadata.return_value = ( + workstations.ListUsableWorkstationsResponse(), + metadata, + ) client.list_usable_workstations( request, @@ -16906,6 +17052,7 @@ def test_list_usable_workstations_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_workstation_rest_bad_request( @@ -17072,10 +17219,13 @@ def test_create_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_create_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_create_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_create_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.CreateWorkstationRequest.pb( workstations.CreateWorkstationRequest() ) @@ -17099,6 +17249,7 @@ def test_create_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_workstation( request, @@ -17110,6 +17261,7 @@ def test_create_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_workstation_rest_bad_request( @@ -17280,10 +17432,13 @@ def test_update_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_update_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_update_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_update_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.UpdateWorkstationRequest.pb( workstations.UpdateWorkstationRequest() ) @@ -17307,6 +17462,7 @@ def test_update_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_workstation( request, @@ -17318,6 +17474,7 @@ def test_update_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_workstation_rest_bad_request( @@ -17402,10 +17559,13 @@ def test_delete_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_delete_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_delete_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_delete_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.DeleteWorkstationRequest.pb( workstations.DeleteWorkstationRequest() ) @@ -17429,6 +17589,7 @@ def test_delete_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_workstation( request, @@ -17440,6 +17601,7 @@ def test_delete_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_start_workstation_rest_bad_request( @@ -17524,10 +17686,13 @@ def test_start_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_start_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_start_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_start_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.StartWorkstationRequest.pb( workstations.StartWorkstationRequest() ) @@ -17551,6 +17716,7 @@ def test_start_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.start_workstation( request, @@ -17562,6 +17728,7 @@ def test_start_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_stop_workstation_rest_bad_request( @@ -17646,10 +17813,13 @@ def test_stop_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_stop_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_stop_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_stop_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.StopWorkstationRequest.pb( workstations.StopWorkstationRequest() ) @@ -17673,6 +17843,7 @@ def test_stop_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.stop_workstation( request, @@ -17684,6 +17855,7 @@ def test_stop_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_generate_access_token_rest_bad_request( @@ -17772,10 +17944,14 @@ def test_generate_access_token_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_generate_access_token" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_generate_access_token_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_generate_access_token" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.GenerateAccessTokenRequest.pb( workstations.GenerateAccessTokenRequest() ) @@ -17801,6 +17977,10 @@ def test_generate_access_token_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.GenerateAccessTokenResponse() + post_with_metadata.return_value = ( + workstations.GenerateAccessTokenResponse(), + metadata, + ) client.generate_access_token( request, @@ -17812,6 +17992,7 @@ def test_generate_access_token_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_iam_policy_rest_bad_request( diff --git a/packages/google-cloud-workstations/tests/unit/gapic/workstations_v1beta/test_workstations.py b/packages/google-cloud-workstations/tests/unit/gapic/workstations_v1beta/test_workstations.py index 645615e933de..b886fdc6ce9e 100644 --- a/packages/google-cloud-workstations/tests/unit/gapic/workstations_v1beta/test_workstations.py +++ b/packages/google-cloud-workstations/tests/unit/gapic/workstations_v1beta/test_workstations.py @@ -79,6 +79,13 @@ ) from google.cloud.workstations_v1beta.types import workstations +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -322,6 +329,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = WorkstationsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = WorkstationsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -14715,10 +14765,14 @@ def test_get_workstation_cluster_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_get_workstation_cluster" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_get_workstation_cluster_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_get_workstation_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.GetWorkstationClusterRequest.pb( workstations.GetWorkstationClusterRequest() ) @@ -14744,6 +14798,7 @@ def test_get_workstation_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.WorkstationCluster() + post_with_metadata.return_value = workstations.WorkstationCluster(), metadata client.get_workstation_cluster( request, @@ -14755,6 +14810,7 @@ def test_get_workstation_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_workstation_clusters_rest_bad_request( @@ -14841,10 +14897,14 @@ def test_list_workstation_clusters_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_workstation_clusters" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_list_workstation_clusters_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_workstation_clusters" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListWorkstationClustersRequest.pb( workstations.ListWorkstationClustersRequest() ) @@ -14870,6 +14930,10 @@ def test_list_workstation_clusters_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListWorkstationClustersResponse() + post_with_metadata.return_value = ( + workstations.ListWorkstationClustersResponse(), + metadata, + ) client.list_workstation_clusters( request, @@ -14881,6 +14945,7 @@ def test_list_workstation_clusters_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_workstation_cluster_rest_bad_request( @@ -15064,10 +15129,14 @@ def test_create_workstation_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_create_workstation_cluster" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_create_workstation_cluster_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_create_workstation_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.CreateWorkstationClusterRequest.pb( workstations.CreateWorkstationClusterRequest() ) @@ -15091,6 +15160,7 @@ def test_create_workstation_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_workstation_cluster( request, @@ -15102,6 +15172,7 @@ def test_create_workstation_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_workstation_cluster_rest_bad_request( @@ -15293,10 +15364,14 @@ def test_update_workstation_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_update_workstation_cluster" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_update_workstation_cluster_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_update_workstation_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.UpdateWorkstationClusterRequest.pb( workstations.UpdateWorkstationClusterRequest() ) @@ -15320,6 +15395,7 @@ def test_update_workstation_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_workstation_cluster( request, @@ -15331,6 +15407,7 @@ def test_update_workstation_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_workstation_cluster_rest_bad_request( @@ -15415,10 +15492,14 @@ def test_delete_workstation_cluster_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_delete_workstation_cluster" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_delete_workstation_cluster_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_delete_workstation_cluster" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.DeleteWorkstationClusterRequest.pb( workstations.DeleteWorkstationClusterRequest() ) @@ -15442,6 +15523,7 @@ def test_delete_workstation_cluster_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_workstation_cluster( request, @@ -15453,6 +15535,7 @@ def test_delete_workstation_cluster_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_workstation_config_rest_bad_request( @@ -15555,10 +15638,14 @@ def test_get_workstation_config_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_get_workstation_config" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_get_workstation_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_get_workstation_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.GetWorkstationConfigRequest.pb( workstations.GetWorkstationConfigRequest() ) @@ -15584,6 +15671,7 @@ def test_get_workstation_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.WorkstationConfig() + post_with_metadata.return_value = workstations.WorkstationConfig(), metadata client.get_workstation_config( request, @@ -15595,6 +15683,7 @@ def test_get_workstation_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_workstation_configs_rest_bad_request( @@ -15685,10 +15774,14 @@ def test_list_workstation_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_workstation_configs" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_list_workstation_configs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_workstation_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListWorkstationConfigsRequest.pb( workstations.ListWorkstationConfigsRequest() ) @@ -15714,6 +15807,10 @@ def test_list_workstation_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListWorkstationConfigsResponse() + post_with_metadata.return_value = ( + workstations.ListWorkstationConfigsResponse(), + metadata, + ) client.list_workstation_configs( request, @@ -15725,6 +15822,7 @@ def test_list_workstation_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_usable_workstation_configs_rest_bad_request( @@ -15817,10 +15915,14 @@ def test_list_usable_workstation_configs_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_usable_workstation_configs" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_list_usable_workstation_configs_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_usable_workstation_configs" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListUsableWorkstationConfigsRequest.pb( workstations.ListUsableWorkstationConfigsRequest() ) @@ -15846,6 +15948,10 @@ def test_list_usable_workstation_configs_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListUsableWorkstationConfigsResponse() + post_with_metadata.return_value = ( + workstations.ListUsableWorkstationConfigsResponse(), + metadata, + ) client.list_usable_workstation_configs( request, @@ -15857,6 +15963,7 @@ def test_list_usable_workstation_configs_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_workstation_config_rest_bad_request( @@ -16098,10 +16205,14 @@ def test_create_workstation_config_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_create_workstation_config" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_create_workstation_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_create_workstation_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.CreateWorkstationConfigRequest.pb( workstations.CreateWorkstationConfigRequest() ) @@ -16125,6 +16236,7 @@ def test_create_workstation_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_workstation_config( request, @@ -16136,6 +16248,7 @@ def test_create_workstation_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_workstation_config_rest_bad_request( @@ -16381,10 +16494,14 @@ def test_update_workstation_config_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_update_workstation_config" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_update_workstation_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_update_workstation_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.UpdateWorkstationConfigRequest.pb( workstations.UpdateWorkstationConfigRequest() ) @@ -16408,6 +16525,7 @@ def test_update_workstation_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_workstation_config( request, @@ -16419,6 +16537,7 @@ def test_update_workstation_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_workstation_config_rest_bad_request( @@ -16503,10 +16622,14 @@ def test_delete_workstation_config_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_delete_workstation_config" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_delete_workstation_config_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_delete_workstation_config" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.DeleteWorkstationConfigRequest.pb( workstations.DeleteWorkstationConfigRequest() ) @@ -16530,6 +16653,7 @@ def test_delete_workstation_config_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_workstation_config( request, @@ -16541,6 +16665,7 @@ def test_delete_workstation_config_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_workstation_rest_bad_request( @@ -16641,10 +16766,13 @@ def test_get_workstation_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_get_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_get_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_get_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.GetWorkstationRequest.pb( workstations.GetWorkstationRequest() ) @@ -16668,6 +16796,7 @@ def test_get_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.Workstation() + post_with_metadata.return_value = workstations.Workstation(), metadata client.get_workstation( request, @@ -16679,6 +16808,7 @@ def test_get_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_workstations_rest_bad_request( @@ -16769,10 +16899,13 @@ def test_list_workstations_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_workstations" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_list_workstations_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_workstations" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListWorkstationsRequest.pb( workstations.ListWorkstationsRequest() ) @@ -16798,6 +16931,10 @@ def test_list_workstations_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListWorkstationsResponse() + post_with_metadata.return_value = ( + workstations.ListWorkstationsResponse(), + metadata, + ) client.list_workstations( request, @@ -16809,6 +16946,7 @@ def test_list_workstations_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_usable_workstations_rest_bad_request( @@ -16899,10 +17037,14 @@ def test_list_usable_workstations_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_list_usable_workstations" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_list_usable_workstations_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_list_usable_workstations" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.ListUsableWorkstationsRequest.pb( workstations.ListUsableWorkstationsRequest() ) @@ -16928,6 +17070,10 @@ def test_list_usable_workstations_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.ListUsableWorkstationsResponse() + post_with_metadata.return_value = ( + workstations.ListUsableWorkstationsResponse(), + metadata, + ) client.list_usable_workstations( request, @@ -16939,6 +17085,7 @@ def test_list_usable_workstations_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_workstation_rest_bad_request( @@ -17106,10 +17253,13 @@ def test_create_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_create_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_create_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_create_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.CreateWorkstationRequest.pb( workstations.CreateWorkstationRequest() ) @@ -17133,6 +17283,7 @@ def test_create_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.create_workstation( request, @@ -17144,6 +17295,7 @@ def test_create_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_workstation_rest_bad_request( @@ -17315,10 +17467,13 @@ def test_update_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_update_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_update_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_update_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.UpdateWorkstationRequest.pb( workstations.UpdateWorkstationRequest() ) @@ -17342,6 +17497,7 @@ def test_update_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.update_workstation( request, @@ -17353,6 +17509,7 @@ def test_update_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_delete_workstation_rest_bad_request( @@ -17437,10 +17594,13 @@ def test_delete_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_delete_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_delete_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_delete_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.DeleteWorkstationRequest.pb( workstations.DeleteWorkstationRequest() ) @@ -17464,6 +17624,7 @@ def test_delete_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.delete_workstation( request, @@ -17475,6 +17636,7 @@ def test_delete_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_start_workstation_rest_bad_request( @@ -17559,10 +17721,13 @@ def test_start_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_start_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_start_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_start_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.StartWorkstationRequest.pb( workstations.StartWorkstationRequest() ) @@ -17586,6 +17751,7 @@ def test_start_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.start_workstation( request, @@ -17597,6 +17763,7 @@ def test_start_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_stop_workstation_rest_bad_request( @@ -17681,10 +17848,13 @@ def test_stop_workstation_rest_interceptors(null_interceptor): ), mock.patch.object( transports.WorkstationsRestInterceptor, "post_stop_workstation" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, "post_stop_workstation_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_stop_workstation" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.StopWorkstationRequest.pb( workstations.StopWorkstationRequest() ) @@ -17708,6 +17878,7 @@ def test_stop_workstation_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = operations_pb2.Operation() + post_with_metadata.return_value = operations_pb2.Operation(), metadata client.stop_workstation( request, @@ -17719,6 +17890,7 @@ def test_stop_workstation_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_generate_access_token_rest_bad_request( @@ -17807,10 +17979,14 @@ def test_generate_access_token_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.WorkstationsRestInterceptor, "post_generate_access_token" ) as post, mock.patch.object( + transports.WorkstationsRestInterceptor, + "post_generate_access_token_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.WorkstationsRestInterceptor, "pre_generate_access_token" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = workstations.GenerateAccessTokenRequest.pb( workstations.GenerateAccessTokenRequest() ) @@ -17836,6 +18012,10 @@ def test_generate_access_token_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = workstations.GenerateAccessTokenResponse() + post_with_metadata.return_value = ( + workstations.GenerateAccessTokenResponse(), + metadata, + ) client.generate_access_token( request, @@ -17847,6 +18027,7 @@ def test_generate_access_token_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_iam_policy_rest_bad_request( diff --git a/packages/google-geo-type/google/geo/type/gapic_version.py b/packages/google-geo-type/google/geo/type/gapic_version.py index 3425e3287cda..558c8aab67c5 100644 --- a/packages/google-geo-type/google/geo/type/gapic_version.py +++ b/packages/google-geo-type/google/geo/type/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.10" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-addressvalidation/google/maps/addressvalidation/gapic_version.py b/packages/google-maps-addressvalidation/google/maps/addressvalidation/gapic_version.py index f197f80165e7..558c8aab67c5 100644 --- a/packages/google-maps-addressvalidation/google/maps/addressvalidation/gapic_version.py +++ b/packages/google-maps-addressvalidation/google/maps/addressvalidation/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.16" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/gapic_version.py b/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/gapic_version.py index f197f80165e7..558c8aab67c5 100644 --- a/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/gapic_version.py +++ b/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.3.16" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/services/address_validation/client.py b/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/services/address_validation/client.py index 6c41992d85fe..65ebb3335791 100644 --- a/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/services/address_validation/client.py +++ b/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/services/address_validation/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -461,6 +463,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/services/address_validation/transports/rest.py b/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/services/address_validation/transports/rest.py index beeb4f7e6cd7..c0f6dfd2e01a 100644 --- a/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/services/address_validation/transports/rest.py +++ b/packages/google-maps-addressvalidation/google/maps/addressvalidation_v1/services/address_validation/transports/rest.py @@ -110,12 +110,38 @@ def post_provide_validation_feedback( ) -> address_validation_service.ProvideValidationFeedbackResponse: """Post-rpc interceptor for provide_validation_feedback - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_provide_validation_feedback_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AddressValidation server but before - it is returned to user code. + it is returned to user code. This `post_provide_validation_feedback` interceptor runs + before the `post_provide_validation_feedback_with_metadata` interceptor. """ return response + def post_provide_validation_feedback_with_metadata( + self, + response: address_validation_service.ProvideValidationFeedbackResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + address_validation_service.ProvideValidationFeedbackResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for provide_validation_feedback + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AddressValidation server but before it is returned to user code. + + We recommend only using this `post_provide_validation_feedback_with_metadata` + interceptor in new development instead of the `post_provide_validation_feedback` interceptor. + When both interceptors are used, this `post_provide_validation_feedback_with_metadata` interceptor runs after the + `post_provide_validation_feedback` interceptor. The (possibly modified) response returned by + `post_provide_validation_feedback` will be passed to + `post_provide_validation_feedback_with_metadata`. + """ + return response, metadata + def pre_validate_address( self, request: address_validation_service.ValidateAddressRequest, @@ -136,12 +162,38 @@ def post_validate_address( ) -> address_validation_service.ValidateAddressResponse: """Post-rpc interceptor for validate_address - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_validate_address_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AddressValidation server but before - it is returned to user code. + it is returned to user code. This `post_validate_address` interceptor runs + before the `post_validate_address_with_metadata` interceptor. """ return response + def post_validate_address_with_metadata( + self, + response: address_validation_service.ValidateAddressResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + address_validation_service.ValidateAddressResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for validate_address + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AddressValidation server but before it is returned to user code. + + We recommend only using this `post_validate_address_with_metadata` + interceptor in new development instead of the `post_validate_address` interceptor. + When both interceptors are used, this `post_validate_address_with_metadata` interceptor runs after the + `post_validate_address` interceptor. The (possibly modified) response returned by + `post_validate_address` will be passed to + `post_validate_address_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class AddressValidationRestStub: @@ -365,6 +417,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_provide_validation_feedback(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_provide_validation_feedback_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -519,6 +575,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_validate_address(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_validate_address_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-maps-addressvalidation/samples/generated_samples/snippet_metadata_google.maps.addressvalidation.v1.json b/packages/google-maps-addressvalidation/samples/generated_samples/snippet_metadata_google.maps.addressvalidation.v1.json index d87d642f8c8f..f06f24bcc68e 100644 --- a/packages/google-maps-addressvalidation/samples/generated_samples/snippet_metadata_google.maps.addressvalidation.v1.json +++ b/packages/google-maps-addressvalidation/samples/generated_samples/snippet_metadata_google.maps.addressvalidation.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-maps-addressvalidation", - "version": "0.3.16" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-maps-addressvalidation/tests/unit/gapic/addressvalidation_v1/test_address_validation.py b/packages/google-maps-addressvalidation/tests/unit/gapic/addressvalidation_v1/test_address_validation.py index 9b9e29a02da4..d049059c1d38 100644 --- a/packages/google-maps-addressvalidation/tests/unit/gapic/addressvalidation_v1/test_address_validation.py +++ b/packages/google-maps-addressvalidation/tests/unit/gapic/addressvalidation_v1/test_address_validation.py @@ -60,6 +60,13 @@ ) from google.maps.addressvalidation_v1.types import address_validation_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -327,6 +334,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = AddressValidationClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = AddressValidationClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -2044,10 +2094,14 @@ def test_validate_address_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AddressValidationRestInterceptor, "post_validate_address" ) as post, mock.patch.object( + transports.AddressValidationRestInterceptor, + "post_validate_address_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AddressValidationRestInterceptor, "pre_validate_address" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = address_validation_service.ValidateAddressRequest.pb( address_validation_service.ValidateAddressRequest() ) @@ -2073,6 +2127,10 @@ def test_validate_address_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = address_validation_service.ValidateAddressResponse() + post_with_metadata.return_value = ( + address_validation_service.ValidateAddressResponse(), + metadata, + ) client.validate_address( request, @@ -2084,6 +2142,7 @@ def test_validate_address_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_provide_validation_feedback_rest_bad_request( @@ -2169,10 +2228,14 @@ def test_provide_validation_feedback_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AddressValidationRestInterceptor, "post_provide_validation_feedback" ) as post, mock.patch.object( + transports.AddressValidationRestInterceptor, + "post_provide_validation_feedback_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.AddressValidationRestInterceptor, "pre_provide_validation_feedback" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = address_validation_service.ProvideValidationFeedbackRequest.pb( address_validation_service.ProvideValidationFeedbackRequest() ) @@ -2202,6 +2265,10 @@ def test_provide_validation_feedback_rest_interceptors(null_interceptor): post.return_value = ( address_validation_service.ProvideValidationFeedbackResponse() ) + post_with_metadata.return_value = ( + address_validation_service.ProvideValidationFeedbackResponse(), + metadata, + ) client.provide_validation_feedback( request, @@ -2213,6 +2280,7 @@ def test_provide_validation_feedback_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-maps-areainsights/google/maps/areainsights/gapic_version.py b/packages/google-maps-areainsights/google/maps/areainsights/gapic_version.py index 114e40645800..558c8aab67c5 100644 --- a/packages/google-maps-areainsights/google/maps/areainsights/gapic_version.py +++ b/packages/google-maps-areainsights/google/maps/areainsights/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.1.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-areainsights/google/maps/areainsights_v1/gapic_version.py b/packages/google-maps-areainsights/google/maps/areainsights_v1/gapic_version.py index 114e40645800..558c8aab67c5 100644 --- a/packages/google-maps-areainsights/google/maps/areainsights_v1/gapic_version.py +++ b/packages/google-maps-areainsights/google/maps/areainsights_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.1.3" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-areainsights/google/maps/areainsights_v1/services/area_insights/client.py b/packages/google-maps-areainsights/google/maps/areainsights_v1/services/area_insights/client.py index cc74d9930ca8..df28100fd54e 100644 --- a/packages/google-maps-areainsights/google/maps/areainsights_v1/services/area_insights/client.py +++ b/packages/google-maps-areainsights/google/maps/areainsights_v1/services/area_insights/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -474,6 +476,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-maps-areainsights/google/maps/areainsights_v1/services/area_insights/transports/rest.py b/packages/google-maps-areainsights/google/maps/areainsights_v1/services/area_insights/transports/rest.py index 7ada4148c778..73dca56058fa 100644 --- a/packages/google-maps-areainsights/google/maps/areainsights_v1/services/area_insights/transports/rest.py +++ b/packages/google-maps-areainsights/google/maps/areainsights_v1/services/area_insights/transports/rest.py @@ -102,12 +102,38 @@ def post_compute_insights( ) -> area_insights_service.ComputeInsightsResponse: """Post-rpc interceptor for compute_insights - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_compute_insights_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the AreaInsights server but before - it is returned to user code. + it is returned to user code. This `post_compute_insights` interceptor runs + before the `post_compute_insights_with_metadata` interceptor. """ return response + def post_compute_insights_with_metadata( + self, + response: area_insights_service.ComputeInsightsResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + area_insights_service.ComputeInsightsResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for compute_insights + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the AreaInsights server but before it is returned to user code. + + We recommend only using this `post_compute_insights_with_metadata` + interceptor in new development instead of the `post_compute_insights` interceptor. + When both interceptors are used, this `post_compute_insights_with_metadata` interceptor runs after the + `post_compute_insights` interceptor. The (possibly modified) response returned by + `post_compute_insights` will be passed to + `post_compute_insights_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class AreaInsightsRestStub: @@ -320,6 +346,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_compute_insights(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_compute_insights_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-maps-areainsights/samples/generated_samples/snippet_metadata_google.maps.areainsights.v1.json b/packages/google-maps-areainsights/samples/generated_samples/snippet_metadata_google.maps.areainsights.v1.json index 535fc14a3e8e..3e131934c793 100644 --- a/packages/google-maps-areainsights/samples/generated_samples/snippet_metadata_google.maps.areainsights.v1.json +++ b/packages/google-maps-areainsights/samples/generated_samples/snippet_metadata_google.maps.areainsights.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-maps-areainsights", - "version": "0.1.3" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-maps-areainsights/tests/unit/gapic/areainsights_v1/test_area_insights.py b/packages/google-maps-areainsights/tests/unit/gapic/areainsights_v1/test_area_insights.py index 9fc86c87b8ea..583743ac426d 100644 --- a/packages/google-maps-areainsights/tests/unit/gapic/areainsights_v1/test_area_insights.py +++ b/packages/google-maps-areainsights/tests/unit/gapic/areainsights_v1/test_area_insights.py @@ -60,6 +60,13 @@ ) from google.maps.areainsights_v1.types import area_insights_service +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -303,6 +310,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = AreaInsightsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = AreaInsightsClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -1601,10 +1651,13 @@ def test_compute_insights_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.AreaInsightsRestInterceptor, "post_compute_insights" ) as post, mock.patch.object( + transports.AreaInsightsRestInterceptor, "post_compute_insights_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.AreaInsightsRestInterceptor, "pre_compute_insights" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = area_insights_service.ComputeInsightsRequest.pb( area_insights_service.ComputeInsightsRequest() ) @@ -1630,6 +1683,10 @@ def test_compute_insights_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = area_insights_service.ComputeInsightsResponse() + post_with_metadata.return_value = ( + area_insights_service.ComputeInsightsResponse(), + metadata, + ) client.compute_insights( request, @@ -1641,6 +1698,7 @@ def test_compute_insights_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery/gapic_version.py b/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery/gapic_version.py index aa1763b52a3a..558c8aab67c5 100644 --- a/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery/gapic_version.py +++ b/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.2.7" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/gapic_version.py b/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/gapic_version.py index aa1763b52a3a..558c8aab67c5 100644 --- a/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/gapic_version.py +++ b/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.2.7" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/client.py b/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/client.py index 0c0ba1dce657..eadff8525caf 100644 --- a/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/client.py +++ b/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -529,6 +531,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/transports/rest.py b/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/transports/rest.py index faf87ef68d72..8bdc7a757cf8 100644 --- a/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/transports/rest.py +++ b/packages/google-maps-fleetengine-delivery/google/maps/fleetengine_delivery_v1/services/delivery_service/transports/rest.py @@ -178,12 +178,37 @@ def post_batch_create_tasks( ) -> delivery_api.BatchCreateTasksResponse: """Post-rpc interceptor for batch_create_tasks - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_batch_create_tasks_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_batch_create_tasks` interceptor runs + before the `post_batch_create_tasks_with_metadata` interceptor. """ return response + def post_batch_create_tasks_with_metadata( + self, + response: delivery_api.BatchCreateTasksResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + delivery_api.BatchCreateTasksResponse, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for batch_create_tasks + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_batch_create_tasks_with_metadata` + interceptor in new development instead of the `post_batch_create_tasks` interceptor. + When both interceptors are used, this `post_batch_create_tasks_with_metadata` interceptor runs after the + `post_batch_create_tasks` interceptor. The (possibly modified) response returned by + `post_batch_create_tasks` will be passed to + `post_batch_create_tasks_with_metadata`. + """ + return response, metadata + def pre_create_delivery_vehicle( self, request: delivery_api.CreateDeliveryVehicleRequest, @@ -204,12 +229,37 @@ def post_create_delivery_vehicle( ) -> delivery_vehicles.DeliveryVehicle: """Post-rpc interceptor for create_delivery_vehicle - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_delivery_vehicle_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_create_delivery_vehicle` interceptor runs + before the `post_create_delivery_vehicle_with_metadata` interceptor. """ return response + def post_create_delivery_vehicle_with_metadata( + self, + response: delivery_vehicles.DeliveryVehicle, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + delivery_vehicles.DeliveryVehicle, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for create_delivery_vehicle + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_create_delivery_vehicle_with_metadata` + interceptor in new development instead of the `post_create_delivery_vehicle` interceptor. + When both interceptors are used, this `post_create_delivery_vehicle_with_metadata` interceptor runs after the + `post_create_delivery_vehicle` interceptor. The (possibly modified) response returned by + `post_create_delivery_vehicle` will be passed to + `post_create_delivery_vehicle_with_metadata`. + """ + return response, metadata + def pre_create_task( self, request: delivery_api.CreateTaskRequest, @@ -225,12 +275,33 @@ def pre_create_task( def post_create_task(self, response: tasks.Task) -> tasks.Task: """Post-rpc interceptor for create_task - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_create_task_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_create_task` interceptor runs + before the `post_create_task_with_metadata` interceptor. """ return response + def post_create_task_with_metadata( + self, response: tasks.Task, metadata: Sequence[Tuple[str, Union[str, bytes]]] + ) -> Tuple[tasks.Task, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for create_task + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_create_task_with_metadata` + interceptor in new development instead of the `post_create_task` interceptor. + When both interceptors are used, this `post_create_task_with_metadata` interceptor runs after the + `post_create_task` interceptor. The (possibly modified) response returned by + `post_create_task` will be passed to + `post_create_task_with_metadata`. + """ + return response, metadata + def pre_get_delivery_vehicle( self, request: delivery_api.GetDeliveryVehicleRequest, @@ -250,12 +321,37 @@ def post_get_delivery_vehicle( ) -> delivery_vehicles.DeliveryVehicle: """Post-rpc interceptor for get_delivery_vehicle - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_delivery_vehicle_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_get_delivery_vehicle` interceptor runs + before the `post_get_delivery_vehicle_with_metadata` interceptor. """ return response + def post_get_delivery_vehicle_with_metadata( + self, + response: delivery_vehicles.DeliveryVehicle, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + delivery_vehicles.DeliveryVehicle, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_delivery_vehicle + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_get_delivery_vehicle_with_metadata` + interceptor in new development instead of the `post_get_delivery_vehicle` interceptor. + When both interceptors are used, this `post_get_delivery_vehicle_with_metadata` interceptor runs after the + `post_get_delivery_vehicle` interceptor. The (possibly modified) response returned by + `post_get_delivery_vehicle` will be passed to + `post_get_delivery_vehicle_with_metadata`. + """ + return response, metadata + def pre_get_task( self, request: delivery_api.GetTaskRequest, @@ -271,12 +367,33 @@ def pre_get_task( def post_get_task(self, response: tasks.Task) -> tasks.Task: """Post-rpc interceptor for get_task - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_task_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_get_task` interceptor runs + before the `post_get_task_with_metadata` interceptor. """ return response + def post_get_task_with_metadata( + self, response: tasks.Task, metadata: Sequence[Tuple[str, Union[str, bytes]]] + ) -> Tuple[tasks.Task, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for get_task + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_get_task_with_metadata` + interceptor in new development instead of the `post_get_task` interceptor. + When both interceptors are used, this `post_get_task_with_metadata` interceptor runs after the + `post_get_task` interceptor. The (possibly modified) response returned by + `post_get_task` will be passed to + `post_get_task_with_metadata`. + """ + return response, metadata + def pre_get_task_tracking_info( self, request: delivery_api.GetTaskTrackingInfoRequest, @@ -296,12 +413,37 @@ def post_get_task_tracking_info( ) -> task_tracking_info.TaskTrackingInfo: """Post-rpc interceptor for get_task_tracking_info - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_get_task_tracking_info_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_get_task_tracking_info` interceptor runs + before the `post_get_task_tracking_info_with_metadata` interceptor. """ return response + def post_get_task_tracking_info_with_metadata( + self, + response: task_tracking_info.TaskTrackingInfo, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + task_tracking_info.TaskTrackingInfo, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for get_task_tracking_info + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_get_task_tracking_info_with_metadata` + interceptor in new development instead of the `post_get_task_tracking_info` interceptor. + When both interceptors are used, this `post_get_task_tracking_info_with_metadata` interceptor runs after the + `post_get_task_tracking_info` interceptor. The (possibly modified) response returned by + `post_get_task_tracking_info` will be passed to + `post_get_task_tracking_info_with_metadata`. + """ + return response, metadata + def pre_list_delivery_vehicles( self, request: delivery_api.ListDeliveryVehiclesRequest, @@ -322,12 +464,38 @@ def post_list_delivery_vehicles( ) -> delivery_api.ListDeliveryVehiclesResponse: """Post-rpc interceptor for list_delivery_vehicles - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_delivery_vehicles_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_list_delivery_vehicles` interceptor runs + before the `post_list_delivery_vehicles_with_metadata` interceptor. """ return response + def post_list_delivery_vehicles_with_metadata( + self, + response: delivery_api.ListDeliveryVehiclesResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + delivery_api.ListDeliveryVehiclesResponse, + Sequence[Tuple[str, Union[str, bytes]]], + ]: + """Post-rpc interceptor for list_delivery_vehicles + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_list_delivery_vehicles_with_metadata` + interceptor in new development instead of the `post_list_delivery_vehicles` interceptor. + When both interceptors are used, this `post_list_delivery_vehicles_with_metadata` interceptor runs after the + `post_list_delivery_vehicles` interceptor. The (possibly modified) response returned by + `post_list_delivery_vehicles` will be passed to + `post_list_delivery_vehicles_with_metadata`. + """ + return response, metadata + def pre_list_tasks( self, request: delivery_api.ListTasksRequest, @@ -345,12 +513,35 @@ def post_list_tasks( ) -> delivery_api.ListTasksResponse: """Post-rpc interceptor for list_tasks - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_list_tasks_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_list_tasks` interceptor runs + before the `post_list_tasks_with_metadata` interceptor. """ return response + def post_list_tasks_with_metadata( + self, + response: delivery_api.ListTasksResponse, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[delivery_api.ListTasksResponse, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for list_tasks + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_list_tasks_with_metadata` + interceptor in new development instead of the `post_list_tasks` interceptor. + When both interceptors are used, this `post_list_tasks_with_metadata` interceptor runs after the + `post_list_tasks` interceptor. The (possibly modified) response returned by + `post_list_tasks` will be passed to + `post_list_tasks_with_metadata`. + """ + return response, metadata + def pre_update_delivery_vehicle( self, request: delivery_api.UpdateDeliveryVehicleRequest, @@ -371,12 +562,37 @@ def post_update_delivery_vehicle( ) -> delivery_vehicles.DeliveryVehicle: """Post-rpc interceptor for update_delivery_vehicle - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_delivery_vehicle_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_update_delivery_vehicle` interceptor runs + before the `post_update_delivery_vehicle_with_metadata` interceptor. """ return response + def post_update_delivery_vehicle_with_metadata( + self, + response: delivery_vehicles.DeliveryVehicle, + metadata: Sequence[Tuple[str, Union[str, bytes]]], + ) -> Tuple[ + delivery_vehicles.DeliveryVehicle, Sequence[Tuple[str, Union[str, bytes]]] + ]: + """Post-rpc interceptor for update_delivery_vehicle + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_update_delivery_vehicle_with_metadata` + interceptor in new development instead of the `post_update_delivery_vehicle` interceptor. + When both interceptors are used, this `post_update_delivery_vehicle_with_metadata` interceptor runs after the + `post_update_delivery_vehicle` interceptor. The (possibly modified) response returned by + `post_update_delivery_vehicle` will be passed to + `post_update_delivery_vehicle_with_metadata`. + """ + return response, metadata + def pre_update_task( self, request: delivery_api.UpdateTaskRequest, @@ -392,12 +608,33 @@ def pre_update_task( def post_update_task(self, response: tasks.Task) -> tasks.Task: """Post-rpc interceptor for update_task - Override in a subclass to manipulate the response + DEPRECATED. Please use the `post_update_task_with_metadata` + interceptor instead. + + Override in a subclass to read or manipulate the response after it is returned by the DeliveryService server but before - it is returned to user code. + it is returned to user code. This `post_update_task` interceptor runs + before the `post_update_task_with_metadata` interceptor. """ return response + def post_update_task_with_metadata( + self, response: tasks.Task, metadata: Sequence[Tuple[str, Union[str, bytes]]] + ) -> Tuple[tasks.Task, Sequence[Tuple[str, Union[str, bytes]]]]: + """Post-rpc interceptor for update_task + + Override in a subclass to read or manipulate the response or metadata after it + is returned by the DeliveryService server but before it is returned to user code. + + We recommend only using this `post_update_task_with_metadata` + interceptor in new development instead of the `post_update_task` interceptor. + When both interceptors are used, this `post_update_task_with_metadata` interceptor runs after the + `post_update_task` interceptor. The (possibly modified) response returned by + `post_update_task` will be passed to + `post_update_task_with_metadata`. + """ + return response, metadata + @dataclasses.dataclass class DeliveryServiceRestStub: @@ -610,6 +847,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_batch_create_tasks(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_batch_create_tasks_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -775,6 +1016,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_delivery_vehicle(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_delivery_vehicle_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -939,6 +1184,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_create_task(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_create_task_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1094,6 +1343,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_delivery_vehicle(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_delivery_vehicle_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1256,6 +1509,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_task(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_task_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1404,6 +1661,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_get_task_tracking_info(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_get_task_tracking_info_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1549,6 +1810,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_delivery_vehicles(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_delivery_vehicles_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1696,6 +1961,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_list_tasks(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_list_tasks_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -1859,6 +2128,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_delivery_vehicle(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_delivery_vehicle_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER @@ -2023,6 +2296,10 @@ def __call__( json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True) resp = self._interceptor.post_update_task(resp) + response_metadata = [(k, str(v)) for k, v in response.headers.items()] + resp, _ = self._interceptor.post_update_task_with_metadata( + resp, response_metadata + ) if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor( logging.DEBUG ): # pragma: NO COVER diff --git a/packages/google-maps-fleetengine-delivery/samples/generated_samples/snippet_metadata_maps.fleetengine.delivery.v1.json b/packages/google-maps-fleetengine-delivery/samples/generated_samples/snippet_metadata_maps.fleetengine.delivery.v1.json index 709d930ae412..b1bb486cd03d 100644 --- a/packages/google-maps-fleetengine-delivery/samples/generated_samples/snippet_metadata_maps.fleetengine.delivery.v1.json +++ b/packages/google-maps-fleetengine-delivery/samples/generated_samples/snippet_metadata_maps.fleetengine.delivery.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-maps-fleetengine-delivery", - "version": "0.2.7" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-maps-fleetengine-delivery/tests/unit/gapic/fleetengine_delivery_v1/test_delivery_service.py b/packages/google-maps-fleetengine-delivery/tests/unit/gapic/fleetengine_delivery_v1/test_delivery_service.py index fbd1f540bdbf..3025d78cc457 100644 --- a/packages/google-maps-fleetengine-delivery/tests/unit/gapic/fleetengine_delivery_v1/test_delivery_service.py +++ b/packages/google-maps-fleetengine-delivery/tests/unit/gapic/fleetengine_delivery_v1/test_delivery_service.py @@ -73,6 +73,13 @@ tasks, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -331,6 +338,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = DeliveryServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = DeliveryServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ @@ -7856,10 +7906,14 @@ def test_create_delivery_vehicle_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_create_delivery_vehicle" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, + "post_create_delivery_vehicle_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_create_delivery_vehicle" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.CreateDeliveryVehicleRequest.pb( delivery_api.CreateDeliveryVehicleRequest() ) @@ -7885,6 +7939,7 @@ def test_create_delivery_vehicle_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = delivery_vehicles.DeliveryVehicle() + post_with_metadata.return_value = delivery_vehicles.DeliveryVehicle(), metadata client.create_delivery_vehicle( request, @@ -7896,6 +7951,7 @@ def test_create_delivery_vehicle_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_delivery_vehicle_rest_bad_request( @@ -7988,10 +8044,14 @@ def test_get_delivery_vehicle_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_get_delivery_vehicle" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, + "post_get_delivery_vehicle_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_get_delivery_vehicle" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.GetDeliveryVehicleRequest.pb( delivery_api.GetDeliveryVehicleRequest() ) @@ -8017,6 +8077,7 @@ def test_get_delivery_vehicle_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = delivery_vehicles.DeliveryVehicle() + post_with_metadata.return_value = delivery_vehicles.DeliveryVehicle(), metadata client.get_delivery_vehicle( request, @@ -8028,6 +8089,7 @@ def test_get_delivery_vehicle_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_delivery_vehicle_rest_bad_request( @@ -8259,10 +8321,14 @@ def test_update_delivery_vehicle_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_update_delivery_vehicle" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, + "post_update_delivery_vehicle_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_update_delivery_vehicle" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.UpdateDeliveryVehicleRequest.pb( delivery_api.UpdateDeliveryVehicleRequest() ) @@ -8288,6 +8354,7 @@ def test_update_delivery_vehicle_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = delivery_vehicles.DeliveryVehicle() + post_with_metadata.return_value = delivery_vehicles.DeliveryVehicle(), metadata client.update_delivery_vehicle( request, @@ -8299,6 +8366,7 @@ def test_update_delivery_vehicle_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_batch_create_tasks_rest_bad_request( @@ -8380,10 +8448,14 @@ def test_batch_create_tasks_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_batch_create_tasks" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, + "post_batch_create_tasks_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_batch_create_tasks" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.BatchCreateTasksRequest.pb( delivery_api.BatchCreateTasksRequest() ) @@ -8409,6 +8481,10 @@ def test_batch_create_tasks_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = delivery_api.BatchCreateTasksResponse() + post_with_metadata.return_value = ( + delivery_api.BatchCreateTasksResponse(), + metadata, + ) client.batch_create_tasks( request, @@ -8420,6 +8496,7 @@ def test_batch_create_tasks_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_create_task_rest_bad_request(request_type=delivery_api.CreateTaskRequest): @@ -8671,10 +8748,13 @@ def test_create_task_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_create_task" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, "post_create_task_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_create_task" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.CreateTaskRequest.pb(delivery_api.CreateTaskRequest()) transcode.return_value = { "method": "post", @@ -8696,6 +8776,7 @@ def test_create_task_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = tasks.Task() + post_with_metadata.return_value = tasks.Task(), metadata client.create_task( request, @@ -8707,6 +8788,7 @@ def test_create_task_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_task_rest_bad_request(request_type=delivery_api.GetTaskRequest): @@ -8804,10 +8886,13 @@ def test_get_task_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_get_task" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, "post_get_task_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_get_task" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.GetTaskRequest.pb(delivery_api.GetTaskRequest()) transcode.return_value = { "method": "post", @@ -8829,6 +8914,7 @@ def test_get_task_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = tasks.Task() + post_with_metadata.return_value = tasks.Task(), metadata client.get_task( request, @@ -8840,6 +8926,7 @@ def test_get_task_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_update_task_rest_bad_request(request_type=delivery_api.UpdateTaskRequest): @@ -9091,10 +9178,13 @@ def test_update_task_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_update_task" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, "post_update_task_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_update_task" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.UpdateTaskRequest.pb(delivery_api.UpdateTaskRequest()) transcode.return_value = { "method": "post", @@ -9116,6 +9206,7 @@ def test_update_task_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = tasks.Task() + post_with_metadata.return_value = tasks.Task(), metadata client.update_task( request, @@ -9127,6 +9218,7 @@ def test_update_task_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_tasks_rest_bad_request(request_type=delivery_api.ListTasksRequest): @@ -9211,10 +9303,13 @@ def test_list_tasks_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_list_tasks" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, "post_list_tasks_with_metadata" + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_list_tasks" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.ListTasksRequest.pb(delivery_api.ListTasksRequest()) transcode.return_value = { "method": "post", @@ -9238,6 +9333,7 @@ def test_list_tasks_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = delivery_api.ListTasksResponse() + post_with_metadata.return_value = delivery_api.ListTasksResponse(), metadata client.list_tasks( request, @@ -9249,6 +9345,7 @@ def test_list_tasks_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_get_task_tracking_info_rest_bad_request( @@ -9339,10 +9436,14 @@ def test_get_task_tracking_info_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_get_task_tracking_info" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, + "post_get_task_tracking_info_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_get_task_tracking_info" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.GetTaskTrackingInfoRequest.pb( delivery_api.GetTaskTrackingInfoRequest() ) @@ -9368,6 +9469,10 @@ def test_get_task_tracking_info_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = task_tracking_info.TaskTrackingInfo() + post_with_metadata.return_value = ( + task_tracking_info.TaskTrackingInfo(), + metadata, + ) client.get_task_tracking_info( request, @@ -9379,6 +9484,7 @@ def test_get_task_tracking_info_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_list_delivery_vehicles_rest_bad_request( @@ -9465,10 +9571,14 @@ def test_list_delivery_vehicles_rest_interceptors(null_interceptor): ) as transcode, mock.patch.object( transports.DeliveryServiceRestInterceptor, "post_list_delivery_vehicles" ) as post, mock.patch.object( + transports.DeliveryServiceRestInterceptor, + "post_list_delivery_vehicles_with_metadata", + ) as post_with_metadata, mock.patch.object( transports.DeliveryServiceRestInterceptor, "pre_list_delivery_vehicles" ) as pre: pre.assert_not_called() post.assert_not_called() + post_with_metadata.assert_not_called() pb_message = delivery_api.ListDeliveryVehiclesRequest.pb( delivery_api.ListDeliveryVehiclesRequest() ) @@ -9494,6 +9604,10 @@ def test_list_delivery_vehicles_rest_interceptors(null_interceptor): ] pre.return_value = request, metadata post.return_value = delivery_api.ListDeliveryVehiclesResponse() + post_with_metadata.return_value = ( + delivery_api.ListDeliveryVehiclesResponse(), + metadata, + ) client.list_delivery_vehicles( request, @@ -9505,6 +9619,7 @@ def test_list_delivery_vehicles_rest_interceptors(null_interceptor): pre.assert_called_once() post.assert_called_once() + post_with_metadata.assert_called_once() def test_initialize_client_w_rest(): diff --git a/packages/google-maps-fleetengine/google/maps/fleetengine/gapic_version.py b/packages/google-maps-fleetengine/google/maps/fleetengine/gapic_version.py index c1954d3635eb..558c8aab67c5 100644 --- a/packages/google-maps-fleetengine/google/maps/fleetengine/gapic_version.py +++ b/packages/google-maps-fleetengine/google/maps/fleetengine/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.2.5" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-fleetengine/google/maps/fleetengine_v1/gapic_version.py b/packages/google-maps-fleetengine/google/maps/fleetengine_v1/gapic_version.py index c1954d3635eb..558c8aab67c5 100644 --- a/packages/google-maps-fleetengine/google/maps/fleetengine_v1/gapic_version.py +++ b/packages/google-maps-fleetengine/google/maps/fleetengine_v1/gapic_version.py @@ -13,4 +13,4 @@ # See the License for the specific language governing permissions and # limitations under the License. # -__version__ = "0.2.5" # {x-release-please-version} +__version__ = "0.0.0" # {x-release-please-version} diff --git a/packages/google-maps-fleetengine/google/maps/fleetengine_v1/services/trip_service/client.py b/packages/google-maps-fleetengine/google/maps/fleetengine_v1/services/trip_service/client.py index dc6dd2dca463..218819ff6622 100644 --- a/packages/google-maps-fleetengine/google/maps/fleetengine_v1/services/trip_service/client.py +++ b/packages/google-maps-fleetengine/google/maps/fleetengine_v1/services/trip_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -480,6 +482,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-maps-fleetengine/google/maps/fleetengine_v1/services/vehicle_service/client.py b/packages/google-maps-fleetengine/google/maps/fleetengine_v1/services/vehicle_service/client.py index dafbdcee4a2f..7e28c124e19d 100644 --- a/packages/google-maps-fleetengine/google/maps/fleetengine_v1/services/vehicle_service/client.py +++ b/packages/google-maps-fleetengine/google/maps/fleetengine_v1/services/vehicle_service/client.py @@ -14,6 +14,8 @@ # limitations under the License. # from collections import OrderedDict +from http import HTTPStatus +import json import logging as std_logging import os import re @@ -480,6 +482,33 @@ def _validate_universe_domain(self): # NOTE (b/349488459): universe validation is disabled until further notice. return True + def _add_cred_info_for_auth_errors( + self, error: core_exceptions.GoogleAPICallError + ) -> None: + """Adds credential info string to error details for 401/403/404 errors. + + Args: + error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info. + """ + if error.code not in [ + HTTPStatus.UNAUTHORIZED, + HTTPStatus.FORBIDDEN, + HTTPStatus.NOT_FOUND, + ]: + return + + cred = self._transport._credentials + + # get_cred_info is only available in google-auth>=2.35.0 + if not hasattr(cred, "get_cred_info"): + return + + # ignore the type check since pypy test fails when get_cred_info + # is not available + cred_info = cred.get_cred_info() # type: ignore + if cred_info and hasattr(error._details, "append"): + error._details.append(json.dumps(cred_info)) + @property def api_endpoint(self): """Return the API endpoint used by the client instance. diff --git a/packages/google-maps-fleetengine/samples/generated_samples/snippet_metadata_maps.fleetengine.v1.json b/packages/google-maps-fleetengine/samples/generated_samples/snippet_metadata_maps.fleetengine.v1.json index fb3416b5cd41..6ab744378c79 100644 --- a/packages/google-maps-fleetengine/samples/generated_samples/snippet_metadata_maps.fleetengine.v1.json +++ b/packages/google-maps-fleetengine/samples/generated_samples/snippet_metadata_maps.fleetengine.v1.json @@ -8,7 +8,7 @@ ], "language": "PYTHON", "name": "google-maps-fleetengine", - "version": "0.2.5" + "version": "0.1.0" }, "snippets": [ { diff --git a/packages/google-maps-fleetengine/tests/unit/gapic/fleetengine_v1/test_trip_service.py b/packages/google-maps-fleetengine/tests/unit/gapic/fleetengine_v1/test_trip_service.py index 161baffcf2bf..29f387f620cd 100644 --- a/packages/google-maps-fleetengine/tests/unit/gapic/fleetengine_v1/test_trip_service.py +++ b/packages/google-maps-fleetengine/tests/unit/gapic/fleetengine_v1/test_trip_service.py @@ -22,6 +22,7 @@ except ImportError: # pragma: NO COVER import mock +import json import math from google.api_core import api_core_version @@ -66,6 +67,13 @@ trips, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -305,6 +313,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = TripServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = TripServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [ diff --git a/packages/google-maps-fleetengine/tests/unit/gapic/fleetengine_v1/test_vehicle_service.py b/packages/google-maps-fleetengine/tests/unit/gapic/fleetengine_v1/test_vehicle_service.py index ba88853fe265..0c502e9c5b1f 100644 --- a/packages/google-maps-fleetengine/tests/unit/gapic/fleetengine_v1/test_vehicle_service.py +++ b/packages/google-maps-fleetengine/tests/unit/gapic/fleetengine_v1/test_vehicle_service.py @@ -22,6 +22,7 @@ except ImportError: # pragma: NO COVER import mock +import json import math from google.api_core import api_core_version @@ -67,6 +68,13 @@ vehicles, ) +CRED_INFO_JSON = { + "credential_source": "/path/to/file", + "credential_type": "service account credentials", + "principal": "service-account@example.com", +} +CRED_INFO_STRING = json.dumps(CRED_INFO_JSON) + async def mock_async_gen(data, chunk_size=1): for i in range(0, len(data)): # pragma: NO COVER @@ -325,6 +333,49 @@ def test__get_universe_domain(): assert str(excinfo.value) == "Universe Domain cannot be an empty string." +@pytest.mark.parametrize( + "error_code,cred_info_json,show_cred_info", + [ + (401, CRED_INFO_JSON, True), + (403, CRED_INFO_JSON, True), + (404, CRED_INFO_JSON, True), + (500, CRED_INFO_JSON, False), + (401, None, False), + (403, None, False), + (404, None, False), + (500, None, False), + ], +) +def test__add_cred_info_for_auth_errors(error_code, cred_info_json, show_cred_info): + cred = mock.Mock(["get_cred_info"]) + cred.get_cred_info = mock.Mock(return_value=cred_info_json) + client = VehicleServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=["foo"]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + if show_cred_info: + assert error.details == ["foo", CRED_INFO_STRING] + else: + assert error.details == ["foo"] + + +@pytest.mark.parametrize("error_code", [401, 403, 404, 500]) +def test__add_cred_info_for_auth_errors_no_get_cred_info(error_code): + cred = mock.Mock([]) + assert not hasattr(cred, "get_cred_info") + client = VehicleServiceClient(credentials=cred) + client._transport._credentials = cred + + error = core_exceptions.GoogleAPICallError("message", details=[]) + error.code = error_code + + client._add_cred_info_for_auth_errors(error) + assert error.details == [] + + @pytest.mark.parametrize( "client_class,transport_name", [