"""Utility functions for handling async events. """ from mobly import asserts from mobly.controllers.android_device_lib import callback_handler def AssertAsyncSuccess(callback): """Wrapping the result of an asynchronous Rpc for convenience. This wrapper handles the event posted by the corresponding `FutureCallback` object signalling whether the async operation was successful or not with `onSuccess` and `onFailure` callbacks. Args: callback: CallbackHandler, the handler that's used to poll events triggered by the async Rpc call. Returns: dictionary, the event that carries the onSuccess signal. """ try: status_event = callback.waitAndGet('onSuccess', 30) except callback_handler.TimeoutError: try: failure_event = callback.waitAndGet('onFailure', 30) asserts.fail('Operation failed: %s' % failure_event.data) except callback_handler.TimeoutError: asserts.fail('Timed out waiting for status event.') return status_event