summaryrefslogtreecommitdiff
path: root/blinker/_async.py
blob: 3bf87d30d996eab97b264974b73ddcc550d32f3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import asyncio

from blinker.base import Signal


try:
    schedule = asyncio.ensure_future
except AttributeError:
    schedule = asyncio.async


@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(scheduler=schedule):
    def adapter(receiver, sender, kwargs):
        result = receiver(sender, **kwargs)
        return scheduler(_wrap_plain_value(result))
    return adapter