diff options
author | Youri Ackx <youri@sugoi.be> | 2021-01-29 14:36:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-29 14:36:38 +0100 |
commit | b5e9f0629200d2b2f62e13e595b802948bb4fefb (patch) | |
tree | 4741857fe53c5500487894c2e3c9ff9c4ee2ce3b /blinker/_async.py | |
parent | 904d8d3803e84257c08526e9047474215aa1c976 (diff) | |
parent | c7b83a18a54efa9e08a9446e2d16956ee5fe353b (diff) | |
download | blinker-master.tar.gz |
Merge pull request #18 from jek/feature/send-asyncmaster
Adds Signal.send_async for asyncio
Author: @jek
Diffstat (limited to 'blinker/_async.py')
-rw-r--r-- | blinker/_async.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/blinker/_async.py b/blinker/_async.py new file mode 100644 index 0000000..2b530e4 --- /dev/null +++ b/blinker/_async.py @@ -0,0 +1,28 @@ +import asyncio + +from blinker.base import Signal + + +try: + schedule = asyncio.create_task +except AttributeError: + schedule = asyncio.ensure_future + + +@asyncio.coroutine +def _wrap_plain_value(value): + """Pass through a coroutine *value* or wrap a plain value.""" + if asyncio.iscoroutine(value): + value = yield from value + return value + + +def send_async(self, *sender, **kwargs): + return [(receiver, schedule(_wrap_plain_value(value))) + for receiver, value + in self.send(*sender, **kwargs)] + + +send_async.__doc__ = Signal.send_async.__doc__ +Signal.send_async = send_async + |