Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
60 lines (42 sloc) 1.65 KB

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

Functions below are just aliases for methods of globally instantiated manager:

.. autofunction:: generic.event.subscribe(handler, event_type)
.. autofunction:: generic.event.subscriber(event_type)
.. autofunction:: generic.event.handle(event)
.. autofunction:: generic.event.unsubscribe(handler, event_type)
You can’t perform that action at this time.