comparison env/lib/python3.9/site-packages/rdflib/events.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 from __future__ import absolute_import
2 from __future__ import division
3 from __future__ import print_function
4
5 __doc__ = """
6 Dirt Simple Events
7
8 A Dispatcher (or a subclass of Dispatcher) stores event handlers that
9 are 'fired' simple event objects when interesting things happen.
10
11 Create a dispatcher:
12
13 >>> d = Dispatcher()
14
15 Now create a handler for the event and subscribe it to the dispatcher
16 to handle Event events. A handler is a simple function or method that
17 accepts the event as an argument:
18
19 >>> def handler1(event): print(repr(event))
20 >>> d.subscribe(Event, handler1)
21
22 Now dispatch a new event into the dispatcher, and see handler1 get
23 fired:
24
25 >>> d.dispatch(Event(foo='bar', data='yours', used_by='the event handlers'))
26 <rdflib.events.Event ['data', 'foo', 'used_by']>
27 """
28
29 __all__ = ['Event', 'Dispatcher']
30
31
32 class Event(object):
33 """
34 An event is a container for attributes. The source of an event
35 creates this object, or a subclass, gives it any kind of data that
36 the events handlers need to handle the event, and then calls
37 notify(event).
38
39 The target of an event registers a function to handle the event it
40 is interested with subscribe(). When a sources calls
41 notify(event), each subscriber to that event will be called in no
42 particular order.
43 """
44
45 def __init__(self, **kw):
46 self.__dict__.update(kw)
47
48 def __repr__(self):
49 attrs = sorted(self.__dict__.keys())
50 return '<rdflib.events.Event %s>' % ([a for a in attrs],)
51
52
53 class Dispatcher(object):
54 """
55 An object that can dispatch events to a privately managed group of
56 subscribers.
57 """
58
59 _dispatch_map = None
60
61 def set_map(self, amap):
62 self._dispatch_map = amap
63
64 def get_map(self):
65 return self._dispatch_map
66
67 def subscribe(self, event_type, handler):
68 """ Subscribe the given handler to an event_type. Handlers
69 are called in the order they are subscribed.
70 """
71 if self._dispatch_map is None:
72 self.set_map({})
73 lst = self._dispatch_map.get(event_type, None)
74 if lst is None:
75 lst = [handler]
76 else:
77 lst.append(handler)
78 self._dispatch_map[event_type] = lst
79
80 def dispatch(self, event):
81 """ Dispatch the given event to the subscribed handlers for
82 the event's type"""
83 if self._dispatch_map is not None:
84 lst = self._dispatch_map.get(type(event), None)
85 if lst is None:
86 raise ValueError("unknown event type: %s" % type(event))
87 for l in lst:
88 l(event)
89
90
91 def test():
92 import doctest
93 doctest.testmod()
94
95
96 if __name__ == '__main__':
97 test()