| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| class FakeUnaryUnaryCall(_WrappedUnaryUnaryCall): | ||
| """Fake implementation for unary-unary RPCs. | ||
|
|
||
| It is a dummy object for response message. Supply the intended response | ||
| upon the initialization, and the coroutine will return the exact response | ||
| message. | ||
| """ | ||
|
|
||
| def __init__(self, response=object()): | ||
| self.response = response | ||
| self._future = asyncio.get_event_loop().create_future() | ||
| self._future.set_result(self.response) | ||
|
|
||
| def __await__(self): | ||
| response = yield from self._future.__await__() | ||
| return response | ||
|
|
||
|
|
||
| class FakeStreamUnaryCall(_WrappedStreamUnaryCall): | ||
| """Fake implementation for stream-unary RPCs. | ||
|
|
||
| It is a dummy object for response message. Supply the intended response | ||
| upon the initialization, and the coroutine will return the exact response | ||
| message. | ||
| """ | ||
|
|
||
| def __init__(self, response=object()): | ||
| self.response = response | ||
| self._future = asyncio.get_event_loop().create_future() | ||
| self._future.set_result(self.response) | ||
|
|
||
| def __await__(self): | ||
| response = yield from self._future.__await__() | ||
| return response | ||
|
|
||
| async def wait_for_connection(self): | ||
| pass |
There was a problem hiding this comment.
Are these intended for use by tests only? I'd prefer they be named Mock... instead of Fake... but don't feel too strongly about it.
Sorry, something went wrong.
There was a problem hiding this comment.
I considered Mock... naming, but they are not magic mock objects. It might misdirect users' expectation of its behavior. I'm happy to change if you have better naming.
Sorry, something went wrong.
There was a problem hiding this comment.
Let's leave it as is then. @software-dov do you have any thoughts here?
Sorry, something went wrong.
There was a problem hiding this comment.
+1 to not mock naming, although I'm a little confused as to why they don't live in the unit test file.
Sorry, something went wrong.
There was a problem hiding this comment.
I think leaving them here makes it easier for dependent libraries to use it in their own tests.
(HttpMock in the apiary library for instance)
Sorry, something went wrong.
There was a problem hiding this comment.
I think the 'correct' think to do then would be to have a testlib. I am in general not a fan of mixing test code and production code, but it's not a hill I'm willing to die on.
Sorry, something went wrong.
There was a problem hiding this comment.
@busunkim96 Thank you for the suggestions. PTALA.
Sorry, something went wrong.
| class FakeUnaryUnaryCall(_WrappedUnaryUnaryCall): | ||
| """Fake implementation for unary-unary RPCs. | ||
|
|
||
| It is a dummy object for response message. Supply the intended response | ||
| upon the initialization, and the coroutine will return the exact response | ||
| message. | ||
| """ | ||
|
|
||
| def __init__(self, response=object()): | ||
| self.response = response | ||
| self._future = asyncio.get_event_loop().create_future() | ||
| self._future.set_result(self.response) | ||
|
|
||
| def __await__(self): | ||
| response = yield from self._future.__await__() | ||
| return response | ||
|
|
||
|
|
||
| class FakeStreamUnaryCall(_WrappedStreamUnaryCall): | ||
| """Fake implementation for stream-unary RPCs. | ||
|
|
||
| It is a dummy object for response message. Supply the intended response | ||
| upon the initialization, and the coroutine will return the exact response | ||
| message. | ||
| """ | ||
|
|
||
| def __init__(self, response=object()): | ||
| self.response = response | ||
| self._future = asyncio.get_event_loop().create_future() | ||
| self._future.set_result(self.response) | ||
|
|
||
| def __await__(self): | ||
| response = yield from self._future.__await__() | ||
| return response | ||
|
|
||
| async def wait_for_connection(self): | ||
| pass |
There was a problem hiding this comment.
I considered Mock... naming, but they are not magic mock objects. It might misdirect users' expectation of its behavior. I'm happy to change if you have better naming.
Sorry, something went wrong.
| if client_info is not None: | ||
| user_agent_metadata = [client_info.to_grpc_metadata()] | ||
| else: | ||
| user_agent_metadata = None |
There was a problem hiding this comment.
Style nit: what about
metadata = [client_info.to_grpc_metadata()] if client_info is not None else None?
Sorry, something went wrong.
There was a problem hiding this comment.
Good idea. Updated to the suggested style.
Sorry, something went wrong.
| class FakeUnaryUnaryCall(_WrappedUnaryUnaryCall): | ||
| """Fake implementation for unary-unary RPCs. | ||
|
|
||
| It is a dummy object for response message. Supply the intended response | ||
| upon the initialization, and the coroutine will return the exact response | ||
| message. | ||
| """ | ||
|
|
||
| def __init__(self, response=object()): | ||
| self.response = response | ||
| self._future = asyncio.get_event_loop().create_future() | ||
| self._future.set_result(self.response) | ||
|
|
||
| def __await__(self): | ||
| response = yield from self._future.__await__() | ||
| return response | ||
|
|
||
|
|
||
| class FakeStreamUnaryCall(_WrappedStreamUnaryCall): | ||
| """Fake implementation for stream-unary RPCs. | ||
|
|
||
| It is a dummy object for response message. Supply the intended response | ||
| upon the initialization, and the coroutine will return the exact response | ||
| message. | ||
| """ | ||
|
|
||
| def __init__(self, response=object()): | ||
| self.response = response | ||
| self._future = asyncio.get_event_loop().create_future() | ||
| self._future.set_result(self.response) | ||
|
|
||
| def __await__(self): | ||
| response = yield from self._future.__await__() | ||
| return response | ||
|
|
||
| async def wait_for_connection(self): | ||
| pass |
There was a problem hiding this comment.
+1 to not mock naming, although I'm a little confused as to why they don't live in the unit test file.
Sorry, something went wrong.
|
@lidizheng It looks like the unit tests need to be tweaked: func = <function _wrap_unary_errors.<locals>.error_remapped_callable at 0x7fb165893790>
default_retry = <google.api_core.retry_async.AsyncRetry object at 0x7fb166304160>
default_timeout = <google.api_core.timeout.ExponentialTimeout object at 0x7fb1663046d0>
client_info = <google.api_core.gapic_v1.client_info.ClientInfo object at 0x7fb1664eeeb0>
def wrap_method(
func,
default_retry=None,
default_timeout=None,
client_info=client_info.DEFAULT_CLIENT_INFO,
):
"""Wrap an async RPC method with common behavior.
Returns:
Callable: A new callable that takes optional ``retry`` and ``timeout``
arguments and applies the common error mapping, retry, timeout,
and metadata behavior to the low-level RPC method.
"""
func = grpc_helpers_async.wrap_errors(func)
metadata = [client_info.to_grpc_metadata()] if client_info is not None else None
return general_helpers.wraps(func)(_GapicCallable(
> func, default_retry, default_timeout, metadata=user_agent_metadata))
E NameError: name 'user_agent_metadata' is not defined
|
Sorry, something went wrong.
There was a problem hiding this comment.
LGTM. Just one minor optional tweak and a vote from my end that the test classes be moved into a standalone test library.
Sorry, something went wrong.
* LRO client * gRPC wrappers & helpers * With unit tests & docs
🤖 I have created a release \*beep\* \*boop\* --- ## [1.18.0](https://www.github.com/googleapis/python-api-core/compare/v1.17.0...v1.18.0) (2020-06-04) ### Features * [CBT-6 helper] Exposing Retry._deadline as a property ([#20](https://www.github.com/googleapis/python-api-core/issues/20)) ([7be1e59](https://www.github.com/googleapis/python-api-core/commit/7be1e59e9d75c112f346d2b76dce3dd60e3584a1)) * add client_encryped_cert_source to ClientOptions ([#31](https://www.github.com/googleapis/python-api-core/issues/31)) ([e4eaec0](https://www.github.com/googleapis/python-api-core/commit/e4eaec0ff255114138d3715280f86d34d861a6fa)) * AsyncIO Integration [Part 2] ([#28](https://www.github.com/googleapis/python-api-core/issues/28)) ([dd9b2f3](https://www.github.com/googleapis/python-api-core/commit/dd9b2f38a70e85952cc05552ec8070cdf29ddbb4)), closes [#23](https://www.github.com/googleapis/python-api-core/issues/23) * First batch of AIO integration ([#26](https://www.github.com/googleapis/python-api-core/issues/26)) ([a82f289](https://www.github.com/googleapis/python-api-core/commit/a82f2892b8f219b82e120e6ed9f4070869c28be7)) * third batch of AsyncIO integration ([#29](https://www.github.com/googleapis/python-api-core/issues/29)) ([7d8d580](https://www.github.com/googleapis/python-api-core/commit/7d8d58075a92e93662747d36a2d55b5e9f0943e1)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please).
| Back | FazBrowse Home | New Git URL |
Children PR of #26 and #28.
This PR includes AsyncIO version of:
Related #23