google-cloud-cloudcontrolspartner 0.2.4__tar.gz → 0.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. {google_cloud_cloudcontrolspartner-0.2.4/google_cloud_cloudcontrolspartner.egg-info → google_cloud_cloudcontrolspartner-0.2.5}/PKG-INFO +1 -1
  2. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner/gapic_version.py +1 -1
  3. {google_cloud_cloudcontrolspartner-0.2.4/google/cloud/cloudcontrolspartner_v1beta → google_cloud_cloudcontrolspartner-0.2.5/google/cloud/cloudcontrolspartner_v1}/gapic_version.py +1 -1
  4. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/client.py +29 -0
  5. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/transports/rest.py +245 -16
  6. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/client.py +29 -0
  7. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/transports/rest.py +60 -4
  8. {google_cloud_cloudcontrolspartner-0.2.4/google/cloud/cloudcontrolspartner_v1 → google_cloud_cloudcontrolspartner-0.2.5/google/cloud/cloudcontrolspartner_v1beta}/gapic_version.py +1 -1
  9. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/client.py +29 -0
  10. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/transports/rest.py +303 -20
  11. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/client.py +29 -0
  12. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/transports/rest.py +60 -4
  13. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5/google_cloud_cloudcontrolspartner.egg-info}/PKG-INFO +1 -1
  14. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/unit/gapic/cloudcontrolspartner_v1/test_cloud_controls_partner_core.py +107 -0
  15. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/unit/gapic/cloudcontrolspartner_v1/test_cloud_controls_partner_monitoring.py +62 -0
  16. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/unit/gapic/cloudcontrolspartner_v1beta/test_cloud_controls_partner_core.py +119 -0
  17. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/unit/gapic/cloudcontrolspartner_v1beta/test_cloud_controls_partner_monitoring.py +62 -0
  18. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/LICENSE +0 -0
  19. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/MANIFEST.in +0 -0
  20. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/README.rst +0 -0
  21. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner/__init__.py +0 -0
  22. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner/py.typed +0 -0
  23. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/__init__.py +0 -0
  24. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/gapic_metadata.json +0 -0
  25. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/py.typed +0 -0
  26. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/__init__.py +0 -0
  27. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/__init__.py +0 -0
  28. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/async_client.py +0 -0
  29. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/pagers.py +0 -0
  30. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/transports/__init__.py +0 -0
  31. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/transports/base.py +0 -0
  32. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/transports/grpc.py +0 -0
  33. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/transports/grpc_asyncio.py +0 -0
  34. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_core/transports/rest_base.py +0 -0
  35. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/__init__.py +0 -0
  36. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/async_client.py +0 -0
  37. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/pagers.py +0 -0
  38. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/transports/__init__.py +0 -0
  39. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/transports/base.py +0 -0
  40. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/transports/grpc.py +0 -0
  41. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/transports/grpc_asyncio.py +0 -0
  42. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/services/cloud_controls_partner_monitoring/transports/rest_base.py +0 -0
  43. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/__init__.py +0 -0
  44. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/access_approval_requests.py +0 -0
  45. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/completion_state.py +0 -0
  46. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/core.py +0 -0
  47. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/customer_workloads.py +0 -0
  48. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/customers.py +0 -0
  49. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/ekm_connections.py +0 -0
  50. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/monitoring.py +0 -0
  51. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/partner_permissions.py +0 -0
  52. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/partners.py +0 -0
  53. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1/types/violations.py +0 -0
  54. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/__init__.py +0 -0
  55. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/gapic_metadata.json +0 -0
  56. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/py.typed +0 -0
  57. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/__init__.py +0 -0
  58. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/__init__.py +0 -0
  59. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/async_client.py +0 -0
  60. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/pagers.py +0 -0
  61. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/transports/__init__.py +0 -0
  62. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/transports/base.py +0 -0
  63. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/transports/grpc.py +0 -0
  64. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/transports/grpc_asyncio.py +0 -0
  65. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_core/transports/rest_base.py +0 -0
  66. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/__init__.py +0 -0
  67. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/async_client.py +0 -0
  68. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/pagers.py +0 -0
  69. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/transports/__init__.py +0 -0
  70. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/transports/base.py +0 -0
  71. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/transports/grpc.py +0 -0
  72. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/transports/grpc_asyncio.py +0 -0
  73. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/services/cloud_controls_partner_monitoring/transports/rest_base.py +0 -0
  74. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/__init__.py +0 -0
  75. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/access_approval_requests.py +0 -0
  76. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/completion_state.py +0 -0
  77. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/core.py +0 -0
  78. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/customer_workloads.py +0 -0
  79. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/customers.py +0 -0
  80. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/ekm_connections.py +0 -0
  81. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/monitoring.py +0 -0
  82. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/partner_permissions.py +0 -0
  83. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/partners.py +0 -0
  84. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google/cloud/cloudcontrolspartner_v1beta/types/violations.py +0 -0
  85. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google_cloud_cloudcontrolspartner.egg-info/SOURCES.txt +0 -0
  86. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google_cloud_cloudcontrolspartner.egg-info/dependency_links.txt +0 -0
  87. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google_cloud_cloudcontrolspartner.egg-info/not-zip-safe +0 -0
  88. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google_cloud_cloudcontrolspartner.egg-info/requires.txt +0 -0
  89. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/google_cloud_cloudcontrolspartner.egg-info/top_level.txt +0 -0
  90. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/setup.cfg +0 -0
  91. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/setup.py +0 -0
  92. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/__init__.py +0 -0
  93. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/unit/__init__.py +0 -0
  94. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/unit/gapic/__init__.py +0 -0
  95. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/unit/gapic/cloudcontrolspartner_v1/__init__.py +0 -0
  96. {google_cloud_cloudcontrolspartner-0.2.4 → google_cloud_cloudcontrolspartner-0.2.5}/tests/unit/gapic/cloudcontrolspartner_v1beta/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: google-cloud-cloudcontrolspartner
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: Google Cloud Cloudcontrolspartner API client library
5
5
  Home-page: https://github.com/googleapis/google-cloud-python/tree/main/packages/google-cloud-cloudcontrolspartner
6
6
  Author: Google LLC
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "0.2.4" # {x-release-please-version}
16
+ __version__ = "0.2.5" # {x-release-please-version}
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "0.2.4" # {x-release-please-version}
16
+ __version__ = "0.2.5" # {x-release-please-version}
@@ -14,6 +14,8 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  from collections import OrderedDict
17
+ from http import HTTPStatus
18
+ import json
17
19
  import logging as std_logging
18
20
  import os
19
21
  import re
@@ -615,6 +617,33 @@ class CloudControlsPartnerCoreClient(metaclass=CloudControlsPartnerCoreClientMet
615
617
  # NOTE (b/349488459): universe validation is disabled until further notice.
616
618
  return True
617
619
 
620
+ def _add_cred_info_for_auth_errors(
621
+ self, error: core_exceptions.GoogleAPICallError
622
+ ) -> None:
623
+ """Adds credential info string to error details for 401/403/404 errors.
624
+
625
+ Args:
626
+ error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info.
627
+ """
628
+ if error.code not in [
629
+ HTTPStatus.UNAUTHORIZED,
630
+ HTTPStatus.FORBIDDEN,
631
+ HTTPStatus.NOT_FOUND,
632
+ ]:
633
+ return
634
+
635
+ cred = self._transport._credentials
636
+
637
+ # get_cred_info is only available in google-auth>=2.35.0
638
+ if not hasattr(cred, "get_cred_info"):
639
+ return
640
+
641
+ # ignore the type check since pypy test fails when get_cred_info
642
+ # is not available
643
+ cred_info = cred.get_cred_info() # type: ignore
644
+ if cred_info and hasattr(error._details, "append"):
645
+ error._details.append(json.dumps(cred_info))
646
+
618
647
  @property
619
648
  def api_endpoint(self):
620
649
  """Return the API endpoint used by the client instance.
@@ -160,12 +160,35 @@ class CloudControlsPartnerCoreRestInterceptor:
160
160
  def post_get_customer(self, response: customers.Customer) -> customers.Customer:
161
161
  """Post-rpc interceptor for get_customer
162
162
 
163
- Override in a subclass to manipulate the response
163
+ DEPRECATED. Please use the `post_get_customer_with_metadata`
164
+ interceptor instead.
165
+
166
+ Override in a subclass to read or manipulate the response
164
167
  after it is returned by the CloudControlsPartnerCore server but before
165
- it is returned to user code.
168
+ it is returned to user code. This `post_get_customer` interceptor runs
169
+ before the `post_get_customer_with_metadata` interceptor.
166
170
  """
167
171
  return response
168
172
 
173
+ def post_get_customer_with_metadata(
174
+ self,
175
+ response: customers.Customer,
176
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
177
+ ) -> Tuple[customers.Customer, Sequence[Tuple[str, Union[str, bytes]]]]:
178
+ """Post-rpc interceptor for get_customer
179
+
180
+ Override in a subclass to read or manipulate the response or metadata after it
181
+ is returned by the CloudControlsPartnerCore server but before it is returned to user code.
182
+
183
+ We recommend only using this `post_get_customer_with_metadata`
184
+ interceptor in new development instead of the `post_get_customer` interceptor.
185
+ When both interceptors are used, this `post_get_customer_with_metadata` interceptor runs after the
186
+ `post_get_customer` interceptor. The (possibly modified) response returned by
187
+ `post_get_customer` will be passed to
188
+ `post_get_customer_with_metadata`.
189
+ """
190
+ return response, metadata
191
+
169
192
  def pre_get_ekm_connections(
170
193
  self,
171
194
  request: ekm_connections.GetEkmConnectionsRequest,
@@ -186,12 +209,35 @@ class CloudControlsPartnerCoreRestInterceptor:
186
209
  ) -> ekm_connections.EkmConnections:
187
210
  """Post-rpc interceptor for get_ekm_connections
188
211
 
189
- Override in a subclass to manipulate the response
212
+ DEPRECATED. Please use the `post_get_ekm_connections_with_metadata`
213
+ interceptor instead.
214
+
215
+ Override in a subclass to read or manipulate the response
190
216
  after it is returned by the CloudControlsPartnerCore server but before
191
- it is returned to user code.
217
+ it is returned to user code. This `post_get_ekm_connections` interceptor runs
218
+ before the `post_get_ekm_connections_with_metadata` interceptor.
192
219
  """
193
220
  return response
194
221
 
222
+ def post_get_ekm_connections_with_metadata(
223
+ self,
224
+ response: ekm_connections.EkmConnections,
225
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
226
+ ) -> Tuple[ekm_connections.EkmConnections, Sequence[Tuple[str, Union[str, bytes]]]]:
227
+ """Post-rpc interceptor for get_ekm_connections
228
+
229
+ Override in a subclass to read or manipulate the response or metadata after it
230
+ is returned by the CloudControlsPartnerCore server but before it is returned to user code.
231
+
232
+ We recommend only using this `post_get_ekm_connections_with_metadata`
233
+ interceptor in new development instead of the `post_get_ekm_connections` interceptor.
234
+ When both interceptors are used, this `post_get_ekm_connections_with_metadata` interceptor runs after the
235
+ `post_get_ekm_connections` interceptor. The (possibly modified) response returned by
236
+ `post_get_ekm_connections` will be passed to
237
+ `post_get_ekm_connections_with_metadata`.
238
+ """
239
+ return response, metadata
240
+
195
241
  def pre_get_partner(
196
242
  self,
197
243
  request: partners.GetPartnerRequest,
@@ -207,12 +253,35 @@ class CloudControlsPartnerCoreRestInterceptor:
207
253
  def post_get_partner(self, response: partners.Partner) -> partners.Partner:
208
254
  """Post-rpc interceptor for get_partner
209
255
 
210
- Override in a subclass to manipulate the response
256
+ DEPRECATED. Please use the `post_get_partner_with_metadata`
257
+ interceptor instead.
258
+
259
+ Override in a subclass to read or manipulate the response
211
260
  after it is returned by the CloudControlsPartnerCore server but before
212
- it is returned to user code.
261
+ it is returned to user code. This `post_get_partner` interceptor runs
262
+ before the `post_get_partner_with_metadata` interceptor.
213
263
  """
214
264
  return response
215
265
 
266
+ def post_get_partner_with_metadata(
267
+ self,
268
+ response: partners.Partner,
269
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
270
+ ) -> Tuple[partners.Partner, Sequence[Tuple[str, Union[str, bytes]]]]:
271
+ """Post-rpc interceptor for get_partner
272
+
273
+ Override in a subclass to read or manipulate the response or metadata after it
274
+ is returned by the CloudControlsPartnerCore server but before it is returned to user code.
275
+
276
+ We recommend only using this `post_get_partner_with_metadata`
277
+ interceptor in new development instead of the `post_get_partner` interceptor.
278
+ When both interceptors are used, this `post_get_partner_with_metadata` interceptor runs after the
279
+ `post_get_partner` interceptor. The (possibly modified) response returned by
280
+ `post_get_partner` will be passed to
281
+ `post_get_partner_with_metadata`.
282
+ """
283
+ return response, metadata
284
+
216
285
  def pre_get_partner_permissions(
217
286
  self,
218
287
  request: partner_permissions.GetPartnerPermissionsRequest,
@@ -233,12 +302,37 @@ class CloudControlsPartnerCoreRestInterceptor:
233
302
  ) -> partner_permissions.PartnerPermissions:
234
303
  """Post-rpc interceptor for get_partner_permissions
235
304
 
236
- Override in a subclass to manipulate the response
305
+ DEPRECATED. Please use the `post_get_partner_permissions_with_metadata`
306
+ interceptor instead.
307
+
308
+ Override in a subclass to read or manipulate the response
237
309
  after it is returned by the CloudControlsPartnerCore server but before
238
- it is returned to user code.
310
+ it is returned to user code. This `post_get_partner_permissions` interceptor runs
311
+ before the `post_get_partner_permissions_with_metadata` interceptor.
239
312
  """
240
313
  return response
241
314
 
315
+ def post_get_partner_permissions_with_metadata(
316
+ self,
317
+ response: partner_permissions.PartnerPermissions,
318
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
319
+ ) -> Tuple[
320
+ partner_permissions.PartnerPermissions, Sequence[Tuple[str, Union[str, bytes]]]
321
+ ]:
322
+ """Post-rpc interceptor for get_partner_permissions
323
+
324
+ Override in a subclass to read or manipulate the response or metadata after it
325
+ is returned by the CloudControlsPartnerCore server but before it is returned to user code.
326
+
327
+ We recommend only using this `post_get_partner_permissions_with_metadata`
328
+ interceptor in new development instead of the `post_get_partner_permissions` interceptor.
329
+ When both interceptors are used, this `post_get_partner_permissions_with_metadata` interceptor runs after the
330
+ `post_get_partner_permissions` interceptor. The (possibly modified) response returned by
331
+ `post_get_partner_permissions` will be passed to
332
+ `post_get_partner_permissions_with_metadata`.
333
+ """
334
+ return response, metadata
335
+
242
336
  def pre_get_workload(
243
337
  self,
244
338
  request: customer_workloads.GetWorkloadRequest,
@@ -258,12 +352,35 @@ class CloudControlsPartnerCoreRestInterceptor:
258
352
  ) -> customer_workloads.Workload:
259
353
  """Post-rpc interceptor for get_workload
260
354
 
261
- Override in a subclass to manipulate the response
355
+ DEPRECATED. Please use the `post_get_workload_with_metadata`
356
+ interceptor instead.
357
+
358
+ Override in a subclass to read or manipulate the response
262
359
  after it is returned by the CloudControlsPartnerCore server but before
263
- it is returned to user code.
360
+ it is returned to user code. This `post_get_workload` interceptor runs
361
+ before the `post_get_workload_with_metadata` interceptor.
264
362
  """
265
363
  return response
266
364
 
365
+ def post_get_workload_with_metadata(
366
+ self,
367
+ response: customer_workloads.Workload,
368
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
369
+ ) -> Tuple[customer_workloads.Workload, Sequence[Tuple[str, Union[str, bytes]]]]:
370
+ """Post-rpc interceptor for get_workload
371
+
372
+ Override in a subclass to read or manipulate the response or metadata after it
373
+ is returned by the CloudControlsPartnerCore server but before it is returned to user code.
374
+
375
+ We recommend only using this `post_get_workload_with_metadata`
376
+ interceptor in new development instead of the `post_get_workload` interceptor.
377
+ When both interceptors are used, this `post_get_workload_with_metadata` interceptor runs after the
378
+ `post_get_workload` interceptor. The (possibly modified) response returned by
379
+ `post_get_workload` will be passed to
380
+ `post_get_workload_with_metadata`.
381
+ """
382
+ return response, metadata
383
+
267
384
  def pre_list_access_approval_requests(
268
385
  self,
269
386
  request: access_approval_requests.ListAccessApprovalRequestsRequest,
@@ -284,12 +401,38 @@ class CloudControlsPartnerCoreRestInterceptor:
284
401
  ) -> access_approval_requests.ListAccessApprovalRequestsResponse:
285
402
  """Post-rpc interceptor for list_access_approval_requests
286
403
 
287
- Override in a subclass to manipulate the response
404
+ DEPRECATED. Please use the `post_list_access_approval_requests_with_metadata`
405
+ interceptor instead.
406
+
407
+ Override in a subclass to read or manipulate the response
288
408
  after it is returned by the CloudControlsPartnerCore server but before
289
- it is returned to user code.
409
+ it is returned to user code. This `post_list_access_approval_requests` interceptor runs
410
+ before the `post_list_access_approval_requests_with_metadata` interceptor.
290
411
  """
291
412
  return response
292
413
 
414
+ def post_list_access_approval_requests_with_metadata(
415
+ self,
416
+ response: access_approval_requests.ListAccessApprovalRequestsResponse,
417
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
418
+ ) -> Tuple[
419
+ access_approval_requests.ListAccessApprovalRequestsResponse,
420
+ Sequence[Tuple[str, Union[str, bytes]]],
421
+ ]:
422
+ """Post-rpc interceptor for list_access_approval_requests
423
+
424
+ Override in a subclass to read or manipulate the response or metadata after it
425
+ is returned by the CloudControlsPartnerCore server but before it is returned to user code.
426
+
427
+ We recommend only using this `post_list_access_approval_requests_with_metadata`
428
+ interceptor in new development instead of the `post_list_access_approval_requests` interceptor.
429
+ When both interceptors are used, this `post_list_access_approval_requests_with_metadata` interceptor runs after the
430
+ `post_list_access_approval_requests` interceptor. The (possibly modified) response returned by
431
+ `post_list_access_approval_requests` will be passed to
432
+ `post_list_access_approval_requests_with_metadata`.
433
+ """
434
+ return response, metadata
435
+
293
436
  def pre_list_customers(
294
437
  self,
295
438
  request: customers.ListCustomersRequest,
@@ -307,12 +450,37 @@ class CloudControlsPartnerCoreRestInterceptor:
307
450
  ) -> customers.ListCustomersResponse:
308
451
  """Post-rpc interceptor for list_customers
309
452
 
310
- Override in a subclass to manipulate the response
453
+ DEPRECATED. Please use the `post_list_customers_with_metadata`
454
+ interceptor instead.
455
+
456
+ Override in a subclass to read or manipulate the response
311
457
  after it is returned by the CloudControlsPartnerCore server but before
312
- it is returned to user code.
458
+ it is returned to user code. This `post_list_customers` interceptor runs
459
+ before the `post_list_customers_with_metadata` interceptor.
313
460
  """
314
461
  return response
315
462
 
463
+ def post_list_customers_with_metadata(
464
+ self,
465
+ response: customers.ListCustomersResponse,
466
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
467
+ ) -> Tuple[
468
+ customers.ListCustomersResponse, Sequence[Tuple[str, Union[str, bytes]]]
469
+ ]:
470
+ """Post-rpc interceptor for list_customers
471
+
472
+ Override in a subclass to read or manipulate the response or metadata after it
473
+ is returned by the CloudControlsPartnerCore server but before it is returned to user code.
474
+
475
+ We recommend only using this `post_list_customers_with_metadata`
476
+ interceptor in new development instead of the `post_list_customers` interceptor.
477
+ When both interceptors are used, this `post_list_customers_with_metadata` interceptor runs after the
478
+ `post_list_customers` interceptor. The (possibly modified) response returned by
479
+ `post_list_customers` will be passed to
480
+ `post_list_customers_with_metadata`.
481
+ """
482
+ return response, metadata
483
+
316
484
  def pre_list_workloads(
317
485
  self,
318
486
  request: customer_workloads.ListWorkloadsRequest,
@@ -332,12 +500,38 @@ class CloudControlsPartnerCoreRestInterceptor:
332
500
  ) -> customer_workloads.ListWorkloadsResponse:
333
501
  """Post-rpc interceptor for list_workloads
334
502
 
335
- Override in a subclass to manipulate the response
503
+ DEPRECATED. Please use the `post_list_workloads_with_metadata`
504
+ interceptor instead.
505
+
506
+ Override in a subclass to read or manipulate the response
336
507
  after it is returned by the CloudControlsPartnerCore server but before
337
- it is returned to user code.
508
+ it is returned to user code. This `post_list_workloads` interceptor runs
509
+ before the `post_list_workloads_with_metadata` interceptor.
338
510
  """
339
511
  return response
340
512
 
513
+ def post_list_workloads_with_metadata(
514
+ self,
515
+ response: customer_workloads.ListWorkloadsResponse,
516
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
517
+ ) -> Tuple[
518
+ customer_workloads.ListWorkloadsResponse,
519
+ Sequence[Tuple[str, Union[str, bytes]]],
520
+ ]:
521
+ """Post-rpc interceptor for list_workloads
522
+
523
+ Override in a subclass to read or manipulate the response or metadata after it
524
+ is returned by the CloudControlsPartnerCore server but before it is returned to user code.
525
+
526
+ We recommend only using this `post_list_workloads_with_metadata`
527
+ interceptor in new development instead of the `post_list_workloads` interceptor.
528
+ When both interceptors are used, this `post_list_workloads_with_metadata` interceptor runs after the
529
+ `post_list_workloads` interceptor. The (possibly modified) response returned by
530
+ `post_list_workloads` will be passed to
531
+ `post_list_workloads_with_metadata`.
532
+ """
533
+ return response, metadata
534
+
341
535
 
342
536
  @dataclasses.dataclass
343
537
  class CloudControlsPartnerCoreRestStub:
@@ -545,6 +739,10 @@ class CloudControlsPartnerCoreRestTransport(_BaseCloudControlsPartnerCoreRestTra
545
739
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
546
740
 
547
741
  resp = self._interceptor.post_get_customer(resp)
742
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
743
+ resp, _ = self._interceptor.post_get_customer_with_metadata(
744
+ resp, response_metadata
745
+ )
548
746
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
549
747
  logging.DEBUG
550
748
  ): # pragma: NO COVER
@@ -693,6 +891,10 @@ class CloudControlsPartnerCoreRestTransport(_BaseCloudControlsPartnerCoreRestTra
693
891
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
694
892
 
695
893
  resp = self._interceptor.post_get_ekm_connections(resp)
894
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
895
+ resp, _ = self._interceptor.post_get_ekm_connections_with_metadata(
896
+ resp, response_metadata
897
+ )
696
898
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
697
899
  logging.DEBUG
698
900
  ): # pragma: NO COVER
@@ -834,6 +1036,10 @@ class CloudControlsPartnerCoreRestTransport(_BaseCloudControlsPartnerCoreRestTra
834
1036
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
835
1037
 
836
1038
  resp = self._interceptor.post_get_partner(resp)
1039
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
1040
+ resp, _ = self._interceptor.post_get_partner_with_metadata(
1041
+ resp, response_metadata
1042
+ )
837
1043
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
838
1044
  logging.DEBUG
839
1045
  ): # pragma: NO COVER
@@ -980,6 +1186,10 @@ class CloudControlsPartnerCoreRestTransport(_BaseCloudControlsPartnerCoreRestTra
980
1186
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
981
1187
 
982
1188
  resp = self._interceptor.post_get_partner_permissions(resp)
1189
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
1190
+ resp, _ = self._interceptor.post_get_partner_permissions_with_metadata(
1191
+ resp, response_metadata
1192
+ )
983
1193
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
984
1194
  logging.DEBUG
985
1195
  ): # pragma: NO COVER
@@ -1127,6 +1337,10 @@ class CloudControlsPartnerCoreRestTransport(_BaseCloudControlsPartnerCoreRestTra
1127
1337
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
1128
1338
 
1129
1339
  resp = self._interceptor.post_get_workload(resp)
1340
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
1341
+ resp, _ = self._interceptor.post_get_workload_with_metadata(
1342
+ resp, response_metadata
1343
+ )
1130
1344
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
1131
1345
  logging.DEBUG
1132
1346
  ): # pragma: NO COVER
@@ -1278,6 +1492,13 @@ class CloudControlsPartnerCoreRestTransport(_BaseCloudControlsPartnerCoreRestTra
1278
1492
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
1279
1493
 
1280
1494
  resp = self._interceptor.post_list_access_approval_requests(resp)
1495
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
1496
+ (
1497
+ resp,
1498
+ _,
1499
+ ) = self._interceptor.post_list_access_approval_requests_with_metadata(
1500
+ resp, response_metadata
1501
+ )
1281
1502
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
1282
1503
  logging.DEBUG
1283
1504
  ): # pragma: NO COVER
@@ -1425,6 +1646,10 @@ class CloudControlsPartnerCoreRestTransport(_BaseCloudControlsPartnerCoreRestTra
1425
1646
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
1426
1647
 
1427
1648
  resp = self._interceptor.post_list_customers(resp)
1649
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
1650
+ resp, _ = self._interceptor.post_list_customers_with_metadata(
1651
+ resp, response_metadata
1652
+ )
1428
1653
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
1429
1654
  logging.DEBUG
1430
1655
  ): # pragma: NO COVER
@@ -1570,6 +1795,10 @@ class CloudControlsPartnerCoreRestTransport(_BaseCloudControlsPartnerCoreRestTra
1570
1795
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
1571
1796
 
1572
1797
  resp = self._interceptor.post_list_workloads(resp)
1798
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
1799
+ resp, _ = self._interceptor.post_list_workloads_with_metadata(
1800
+ resp, response_metadata
1801
+ )
1573
1802
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
1574
1803
  logging.DEBUG
1575
1804
  ): # pragma: NO COVER
@@ -14,6 +14,8 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  from collections import OrderedDict
17
+ from http import HTTPStatus
18
+ import json
17
19
  import logging as std_logging
18
20
  import os
19
21
  import re
@@ -501,6 +503,33 @@ class CloudControlsPartnerMonitoringClient(
501
503
  # NOTE (b/349488459): universe validation is disabled until further notice.
502
504
  return True
503
505
 
506
+ def _add_cred_info_for_auth_errors(
507
+ self, error: core_exceptions.GoogleAPICallError
508
+ ) -> None:
509
+ """Adds credential info string to error details for 401/403/404 errors.
510
+
511
+ Args:
512
+ error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info.
513
+ """
514
+ if error.code not in [
515
+ HTTPStatus.UNAUTHORIZED,
516
+ HTTPStatus.FORBIDDEN,
517
+ HTTPStatus.NOT_FOUND,
518
+ ]:
519
+ return
520
+
521
+ cred = self._transport._credentials
522
+
523
+ # get_cred_info is only available in google-auth>=2.35.0
524
+ if not hasattr(cred, "get_cred_info"):
525
+ return
526
+
527
+ # ignore the type check since pypy test fails when get_cred_info
528
+ # is not available
529
+ cred_info = cred.get_cred_info() # type: ignore
530
+ if cred_info and hasattr(error._details, "append"):
531
+ error._details.append(json.dumps(cred_info))
532
+
504
533
  @property
505
534
  def api_endpoint(self):
506
535
  """Return the API endpoint used by the client instance.
@@ -107,12 +107,35 @@ class CloudControlsPartnerMonitoringRestInterceptor:
107
107
  ) -> violations.Violation:
108
108
  """Post-rpc interceptor for get_violation
109
109
 
110
- Override in a subclass to manipulate the response
110
+ DEPRECATED. Please use the `post_get_violation_with_metadata`
111
+ interceptor instead.
112
+
113
+ Override in a subclass to read or manipulate the response
111
114
  after it is returned by the CloudControlsPartnerMonitoring server but before
112
- it is returned to user code.
115
+ it is returned to user code. This `post_get_violation` interceptor runs
116
+ before the `post_get_violation_with_metadata` interceptor.
113
117
  """
114
118
  return response
115
119
 
120
+ def post_get_violation_with_metadata(
121
+ self,
122
+ response: violations.Violation,
123
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
124
+ ) -> Tuple[violations.Violation, Sequence[Tuple[str, Union[str, bytes]]]]:
125
+ """Post-rpc interceptor for get_violation
126
+
127
+ Override in a subclass to read or manipulate the response or metadata after it
128
+ is returned by the CloudControlsPartnerMonitoring server but before it is returned to user code.
129
+
130
+ We recommend only using this `post_get_violation_with_metadata`
131
+ interceptor in new development instead of the `post_get_violation` interceptor.
132
+ When both interceptors are used, this `post_get_violation_with_metadata` interceptor runs after the
133
+ `post_get_violation` interceptor. The (possibly modified) response returned by
134
+ `post_get_violation` will be passed to
135
+ `post_get_violation_with_metadata`.
136
+ """
137
+ return response, metadata
138
+
116
139
  def pre_list_violations(
117
140
  self,
118
141
  request: violations.ListViolationsRequest,
@@ -132,12 +155,37 @@ class CloudControlsPartnerMonitoringRestInterceptor:
132
155
  ) -> violations.ListViolationsResponse:
133
156
  """Post-rpc interceptor for list_violations
134
157
 
135
- Override in a subclass to manipulate the response
158
+ DEPRECATED. Please use the `post_list_violations_with_metadata`
159
+ interceptor instead.
160
+
161
+ Override in a subclass to read or manipulate the response
136
162
  after it is returned by the CloudControlsPartnerMonitoring server but before
137
- it is returned to user code.
163
+ it is returned to user code. This `post_list_violations` interceptor runs
164
+ before the `post_list_violations_with_metadata` interceptor.
138
165
  """
139
166
  return response
140
167
 
168
+ def post_list_violations_with_metadata(
169
+ self,
170
+ response: violations.ListViolationsResponse,
171
+ metadata: Sequence[Tuple[str, Union[str, bytes]]],
172
+ ) -> Tuple[
173
+ violations.ListViolationsResponse, Sequence[Tuple[str, Union[str, bytes]]]
174
+ ]:
175
+ """Post-rpc interceptor for list_violations
176
+
177
+ Override in a subclass to read or manipulate the response or metadata after it
178
+ is returned by the CloudControlsPartnerMonitoring server but before it is returned to user code.
179
+
180
+ We recommend only using this `post_list_violations_with_metadata`
181
+ interceptor in new development instead of the `post_list_violations` interceptor.
182
+ When both interceptors are used, this `post_list_violations_with_metadata` interceptor runs after the
183
+ `post_list_violations` interceptor. The (possibly modified) response returned by
184
+ `post_list_violations` will be passed to
185
+ `post_list_violations_with_metadata`.
186
+ """
187
+ return response, metadata
188
+
141
189
 
142
190
  @dataclasses.dataclass
143
191
  class CloudControlsPartnerMonitoringRestStub:
@@ -349,6 +397,10 @@ class CloudControlsPartnerMonitoringRestTransport(
349
397
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
350
398
 
351
399
  resp = self._interceptor.post_get_violation(resp)
400
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
401
+ resp, _ = self._interceptor.post_get_violation_with_metadata(
402
+ resp, response_metadata
403
+ )
352
404
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
353
405
  logging.DEBUG
354
406
  ): # pragma: NO COVER
@@ -493,6 +545,10 @@ class CloudControlsPartnerMonitoringRestTransport(
493
545
  json_format.Parse(response.content, pb_resp, ignore_unknown_fields=True)
494
546
 
495
547
  resp = self._interceptor.post_list_violations(resp)
548
+ response_metadata = [(k, str(v)) for k, v in response.headers.items()]
549
+ resp, _ = self._interceptor.post_list_violations_with_metadata(
550
+ resp, response_metadata
551
+ )
496
552
  if CLIENT_LOGGING_SUPPORTED and _LOGGER.isEnabledFor(
497
553
  logging.DEBUG
498
554
  ): # pragma: NO COVER
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
  #
16
- __version__ = "0.2.4" # {x-release-please-version}
16
+ __version__ = "0.2.5" # {x-release-please-version}
@@ -14,6 +14,8 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  from collections import OrderedDict
17
+ from http import HTTPStatus
18
+ import json
17
19
  import logging as std_logging
18
20
  import os
19
21
  import re
@@ -616,6 +618,33 @@ class CloudControlsPartnerCoreClient(metaclass=CloudControlsPartnerCoreClientMet
616
618
  # NOTE (b/349488459): universe validation is disabled until further notice.
617
619
  return True
618
620
 
621
+ def _add_cred_info_for_auth_errors(
622
+ self, error: core_exceptions.GoogleAPICallError
623
+ ) -> None:
624
+ """Adds credential info string to error details for 401/403/404 errors.
625
+
626
+ Args:
627
+ error (google.api_core.exceptions.GoogleAPICallError): The error to add the cred info.
628
+ """
629
+ if error.code not in [
630
+ HTTPStatus.UNAUTHORIZED,
631
+ HTTPStatus.FORBIDDEN,
632
+ HTTPStatus.NOT_FOUND,
633
+ ]:
634
+ return
635
+
636
+ cred = self._transport._credentials
637
+
638
+ # get_cred_info is only available in google-auth>=2.35.0
639
+ if not hasattr(cred, "get_cred_info"):
640
+ return
641
+
642
+ # ignore the type check since pypy test fails when get_cred_info
643
+ # is not available
644
+ cred_info = cred.get_cred_info() # type: ignore
645
+ if cred_info and hasattr(error._details, "append"):
646
+ error._details.append(json.dumps(cred_info))
647
+
619
648
  @property
620
649
  def api_endpoint(self):
621
650
  """Return the API endpoint used by the client instance.