- action_status = asyncio.Queue(loop=self.model.loop)
- tag = None
-
- async def wait_for_tag():
- while tag is None:
- asyncio.sleep(0.1)
- return tag
-
- async def callback(delta, old, new, model):
- # Wait until we have something to report
- if not new:
- return
-
- # Verify that we have the the right action.
- tag = await wait_for_tag()
- if not new.id in tag:
- return
-
- # Wait until the action has completed, or errored out.
- if new.status not in ['completed', 'error']:
- return
-
- # Put the action in our queue, so that we can fetch it
- # with the await below.
- await action_status.put(new)
-
- self.model.add_observer(callback, 'action', None)
-