File: event_system.rst

package info (click to toggle)
python-generic 1.1.6-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 360 kB
  • sloc: python: 879; makefile: 126; sh: 2
file content (49 lines) | stat: -rw-r--r-- 1,358 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Event system
============

Generic library provides ``generic.event`` module which helps you implement
event systems in your application. By event system I mean an API for
*subscribing* for some types of events and to *handle* those events so previously
subscribed *handlers* are being executed.

Basic usage
-----------

First you need to describe event types you want to use in your application,
``generic.event`` dispatches events to corresponding handlers by inspecting
events' types, so it's natural to model those as classes::

    >>> class CommentAdded(object):
    ...   def __init__(self, post_id, comment):
    ...     self.post_id = post_id
    ...     self.comment = comment

Now you want to register handler for your event type::

  >>> from generic.event import Manager

  >>> manager = Manager()

  >>> @manager.subscriber(CommentAdded)
  ... def print_comment(ev):
  ...   print(f"Got new comment: {ev.comment}")

Then you just call ``generic.event.handle`` function with ``CommentAdded``
instance as its argument::

  >>> manager.handle(CommentAdded(167, "Hello!"))
  Got new comment: Hello!

This is how it works.

Event inheritance
-----------------

Using per-application event API
-------------------------------

API reference
-------------

.. autoclass:: generic.event.Manager
   :members: subscribe, subscriber, handle, unsubscribe