-
Notifications
You must be signed in to change notification settings - Fork 61
feat: add basic interceptor to client #1206
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 11 commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
07b3295
feat: added metrics interceptor
daniel-sanche e3ac131
pulled out operation logic
daniel-sanche 557b54a
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] 3306ad7
fixed missing convert
daniel-sanche 65f15de
updated system test
daniel-sanche 16c5b6a
fixed lint
daniel-sanche 00cc52f
fixed annotation
daniel-sanche bb00b8b
re-generated sync classes; removed test
daniel-sanche c89f6d4
loosen test
daniel-sanche 144d75e
broke out streaming wrapper into static function
daniel-sanche c433f3c
fixed lint
daniel-sanche 6788df3
address PR comments
daniel-sanche 8391bf8
Merge branch 'main' into csm_interceptor
daniel-sanche File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| # Copyright 2025 Google LLC | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License | ||
| from __future__ import annotations | ||
|
|
||
| from google.cloud.bigtable.data._cross_sync import CrossSync | ||
|
|
||
| if CrossSync.is_async: | ||
| from grpc.aio import UnaryUnaryClientInterceptor | ||
| from grpc.aio import UnaryStreamClientInterceptor | ||
| else: | ||
| from grpc import UnaryUnaryClientInterceptor | ||
| from grpc import UnaryStreamClientInterceptor | ||
|
|
||
|
|
||
| __CROSS_SYNC_OUTPUT__ = "google.cloud.bigtable.data._sync_autogen.metrics_interceptor" | ||
|
|
||
|
|
||
| @CrossSync.convert_class(sync_name="BigtableMetricsInterceptor") | ||
| class AsyncBigtableMetricsInterceptor( | ||
| UnaryUnaryClientInterceptor, UnaryStreamClientInterceptor | ||
| ): | ||
| """ | ||
| An async gRPC interceptor to add client metadata and print server metadata. | ||
| """ | ||
|
|
||
| @CrossSync.convert | ||
| async def intercept_unary_unary(self, continuation, client_call_details, request): | ||
| """ | ||
| Interceptor for unary rpcs: | ||
| - MutateRow | ||
| - CheckAndMutateRow | ||
| - ReadModifyWriteRow | ||
| """ | ||
| try: | ||
| call = await continuation(client_call_details, request) | ||
| return call | ||
| except Exception as rpc_error: | ||
| raise rpc_error | ||
|
|
||
| @CrossSync.convert | ||
| async def intercept_unary_stream(self, continuation, client_call_details, request): | ||
| """ | ||
| Interceptor for streaming rpcs: | ||
| - ReadRows | ||
| - MutateRows | ||
| - SampleRowKeys | ||
| """ | ||
| try: | ||
| return self._streaming_generator_wrapper( | ||
| await continuation(client_call_details, request) | ||
| ) | ||
| except Exception as rpc_error: | ||
| # handle errors while intializing stream | ||
| raise rpc_error | ||
|
|
||
| @staticmethod | ||
| @CrossSync.convert | ||
| async def _streaming_generator_wrapper(call): | ||
| """ | ||
| Wrapped generator to be returned by intercept_unary_stream | ||
chalmerlowe marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| """ | ||
| try: | ||
| async for response in call: | ||
| yield response | ||
| except Exception as e: | ||
| # handle errors while processing stream | ||
| raise e | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
google/cloud/bigtable/data/_sync_autogen/metrics_interceptor.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,59 @@ | ||
| # Copyright 2025 Google LLC | ||
| # | ||
| # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| # you may not use this file except in compliance with the License. | ||
| # You may obtain a copy of the License at | ||
| # | ||
| # http://www.apache.org/licenses/LICENSE-2.0 | ||
| # | ||
| # Unless required by applicable law or agreed to in writing, software | ||
| # distributed under the License is distributed on an "AS IS" BASIS, | ||
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| # See the License for the specific language governing permissions and | ||
| # limitations under the License | ||
|
|
||
| # This file is automatically generated by CrossSync. Do not edit manually. | ||
|
|
||
| from __future__ import annotations | ||
| from grpc import UnaryUnaryClientInterceptor | ||
| from grpc import UnaryStreamClientInterceptor | ||
|
|
||
|
|
||
| class BigtableMetricsInterceptor( | ||
| UnaryUnaryClientInterceptor, UnaryStreamClientInterceptor | ||
| ): | ||
| """ | ||
| An async gRPC interceptor to add client metadata and print server metadata. | ||
| """ | ||
|
|
||
| def intercept_unary_unary(self, continuation, client_call_details, request): | ||
| """Interceptor for unary rpcs: | ||
| - MutateRow | ||
| - CheckAndMutateRow | ||
| - ReadModifyWriteRow""" | ||
| try: | ||
| call = continuation(client_call_details, request) | ||
| return call | ||
| except Exception as rpc_error: | ||
| raise rpc_error | ||
|
|
||
| def intercept_unary_stream(self, continuation, client_call_details, request): | ||
| """Interceptor for streaming rpcs: | ||
| - ReadRows | ||
| - MutateRows | ||
| - SampleRowKeys""" | ||
| try: | ||
| return self._streaming_generator_wrapper( | ||
| continuation(client_call_details, request) | ||
| ) | ||
| except Exception as rpc_error: | ||
| raise rpc_error | ||
|
|
||
| @staticmethod | ||
| def _streaming_generator_wrapper(call): | ||
| """Wrapped generator to be returned by intercept_unary_stream""" | ||
| try: | ||
| for response in call: | ||
| yield response | ||
| except Exception as e: | ||
| raise e |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.