summaryrefslogtreecommitdiff
path: root/blinker/_async.py
diff options
context:
space:
mode:
authorYouri Ackx <youri@sugoi.be>2021-01-29 14:36:38 +0100
committerGitHub <noreply@github.com>2021-01-29 14:36:38 +0100
commitb5e9f0629200d2b2f62e13e595b802948bb4fefb (patch)
tree4741857fe53c5500487894c2e3c9ff9c4ee2ce3b /blinker/_async.py
parent904d8d3803e84257c08526e9047474215aa1c976 (diff)
parentc7b83a18a54efa9e08a9446e2d16956ee5fe353b (diff)
downloadblinker-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.py28
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
+