summaryrefslogtreecommitdiff
path: root/blinker/playground.py
blob: 8ed30fb658ed57c07e3bebd6fd9f575207fea312 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import blinker


def quash_exceptions(fn, sender, kwargs):
    """Always call all receivers, collecting values or exceptions."""
    try:
        return fn(sender, **kwargs), None
    except Exception as exc:
        return None, exc


def _adapt_xyz(fn, sender, kwargs):
    return fn(sender, kwargs['x'], kwargs['y'], kwargs['z'])

class PositionalSignal(blinker.Signal):
    """Positional send and receive (x, y, z)"""
    receiver_adapter = staticmethod(_adapt_xyz)

    def send(self, sender, x, y, z):
        return blinker.Signal.send(self, sender, x=x, y=y, z=z)