События для Python

Наткнулся сегодня на довольно интересную библиотеку для python, которая добавляет возможность работать с событиями.

Эта библиотека позволит вам:

  • создать один или несколько обработчиков для события;
  • в любой момент исключить определенный обработчик из события;
  • очистить список обработчиков для события;
  • добавить в событие обработчик, который будет удален после первого вызова.

К сожалению, одноразовое добавление обработчика сейчас вызывает ошибку, но я надеюсь, что это скоро исправят. Я уже запостил баг.

И вот как это все работает:

#!/usr/bin/python
from pyee import Event_emitter


ee = Event_emitter()

@ee.on('event1')
def e1_handler():
    print 'Event 1'

@ee.on('event1')
def e11_handler():
    print 'Event 11'

def e12_handler():
    print 'Event 12'

@ee.on('event2')
def e1_handler(prm):
    print 'Event 2 (%s)' % prm

print '~~~ Call Event 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
ee.emit('event1')
print '\n~~~ Call Event 2 with parameter ~~~~~~~~~~~~~~~~'
ee.emit('event2', 'Test Parameter')

print '\n~~~ Call Event 1 with new handler ~~~~~~~~~~~~~~'
ee.on('event1', e12_handler)
ee.emit('event1')

print '\n~~~ Call Event 1 with removed last handler ~~~~~'
ee.remove_listener('event1', e12_handler)
ee.emit('event1')

Вывод , который мы увидим:

~~~ Call Event 1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Event 1
Event 11

~~~ Call Event 2 with parameter ~~~~~~~~~~~~~~~~
Event 2 (Test Parameter)

~~~ Call Event 1 with new handler ~~~~~~~~~~~~~~
Event 1
Event 11
Event 12

~~~ Call Event 1 with removed last handler ~~~~~
Event 1
Event 11