Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 1.8k
feat(api_core): add retry param into PollingFuture() and it's inheritors#9923
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
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -145,21 +145,28 @@ def _set_result_from_operation(self): | ||
| ) | ||
| self.set_exception(exception) | ||
| def _refresh_and_update(self): | ||
| """Refresh the operation and update the result if needed.""" | ||
| def _refresh_and_update(self, retry=polling.DEFAULT_RETRY): | ||
| """Refresh the operation and update the result if needed. | ||
| Args: | ||
| retry (google.api_core.retry.Retry): (Optional) How to retry the RPC. | ||
| """ | ||
| # If the currently cached operation is done, no need to make another | ||
| # RPC as it will not change once done. | ||
| if not self._operation.done: | ||
| self._operation = self._refresh() | ||
| self._operation = self._refresh(retry=retry) | ||
Author There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Adding | ||
| self._set_result_from_operation() | ||
| def done(self): | ||
| def done(self, retry=polling.DEFAULT_RETRY): | ||
| """Checks to see if the operation is complete. | ||
| Args: | ||
| retry (google.api_core.retry.Retry): (Optional) How to retry the RPC. | ||
| Returns: | ||
| bool: True if the operation is complete, False otherwise. | ||
| """ | ||
| self._refresh_and_update() | ||
| self._refresh_and_update(retry) | ||
| return self._operation.done | ||
| def cancel(self): | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -15,8 +15,10 @@ | ||
| import mock | ||
| from google.api_core import exceptions | ||
| from google.api_core import operation | ||
| from google.api_core import operations_v1 | ||
| from google.api_core import retry | ||
| from google.longrunning import operations_pb2 | ||
| from google.protobuf import struct_pb2 | ||
| from google.rpc import code_pb2 | ||
| @@ -113,6 +115,23 @@ def test_result(): | ||
| assert future.done() | ||
| def test_done_w_retry(): | ||
| RETRY_PREDICATE = retry.if_exception_type(exceptions.TooManyRequests) | ||
| test_retry = retry.Retry(predicate=RETRY_PREDICATE) | ||
IlyaFaer marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| expected_result = struct_pb2.Struct() | ||
| responses = [ | ||
| make_operation_proto(), | ||
| # Second operation response includes the result. | ||
| make_operation_proto(done=True, response=expected_result), | ||
| ] | ||
| future, _, _ = make_operation_future(responses) | ||
| future._refresh = mock.Mock() | ||
| future.done(retry=test_retry) | ||
| future._refresh.assert_called_once_with(retry=test_retry) | ||
| def test_exception(): | ||
| expected_exception = status_pb2.Status(message="meep") | ||
| responses = [ | ||
Uh oh!
There was an error while loading. Please reload this page.