Pyjo.EventEmitter - Event emitter base class

import Pyjo.EventEmitter

class Cat(Pyjo.EventEmitter.object):
    # Emit events
    def poke(self, times):
        self.emit('roar', 3)

# Subscribe to events
tiger = Cat.new()

@tiger.on
def road(cat, times):
    for _ in range(0, times):
        print('RAWR!')

tiger.poke()

Pyjo.EventEmitter is a simple base class for event emitting objects.

Events

Pyjo.EventEmitter can emit the following events.

error

@e.on
def error(e, err):
    ...

This is a special event for errors, it will not be emitted directly by this class but is fatal if unhandled.

@e.on
def error(e, err):
    print("This looks bad: {0}".format(err))

Debugging

You can set the PYJO_EVENTEMITTER_DEBUG environment variable to get some advanced diagnostics information printed to stderr.

PYJO_EVENTEMITTER_DEBUG=1

Classes

exception Pyjo.EventEmitter.Error

Exception raised on unhandled error event.

class Pyjo.EventEmitter.Pyjo_EventEmitter(**kwargs)

Pyjo.EventEmitter inherits all attributes and methods from Pyjo.Base and implements the following new ones.

catch(cb)
e = e.catch(lambda e, err: ...)

@e.catch
def cb(e, err):
    ...

Subscribe to error event.

# Longer version
@e.on
def error(e, err):
    ...
emit(name, *args, **kwargs)
e = e.emit('foo')
e = e.emit('foo', 123)

Emit event.

has_subscribers(name)
boolean = e.has_subscribers('foo')

Check if event has subscribers.

on(cb, name=None)
cb = e.on(cb, 'foo')

Subscribe to event. Can be used as decorator.

@e.on
def foo(e, *args, **kwargs):
    ...
once(cb, name=None)
cb = e.once(cb, 'foo')

Subscribe to event and unsubscribe again after it has been emitted once. Can be used as decorator.

@e.once
def foo(e, *args, **kwargs):
    ...
subscribers(name)
subscribers = e.subscribers('foo')

All subscribers for event.

# Unsubscribe last subscriber
e.unsubscribe('foo', e.subscribers('foo')[-1])
unsubscribe(name, cb=None)
e = e.unsubscribe('foo')
e = e.unsubscribe('foo', cb)

Unsubscribe from event.

unsubscribe_all()
e = e.unsubscribe_all()

Unsubscribe from all events.

Pyjo.EventEmitter.object

alias of Pyjo_EventEmitter