You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.3 KiB
35 lines
1.3 KiB
"""
|
|
Methodology to craete Events, that can be uniquely identified.
|
|
|
|
@Author: Georg Hopp <ghopp@spamtitan.com>
|
|
"""
|
|
from Event import Event
|
|
|
|
class EventSubject(object):
|
|
_EVENTS = {}
|
|
|
|
@classmethod
|
|
def eventId(cls, ident):
|
|
"""
|
|
Get a unique event identifier based on the class of the event source
|
|
and the found map value of ident. If there is no mapping in the
|
|
current class its EventSource bases super classes are queried until
|
|
an event id can be found... if you derive one event source from
|
|
multiple others that provide the same event identifier this means that
|
|
you can't predict which one will be created.
|
|
I guess that there might be a more pythonic way to do this with
|
|
something like a generator expression.
|
|
"""
|
|
if ident in cls._EVENTS:
|
|
return (id(cls) << 8) | cls._EVENTS[ident]
|
|
else:
|
|
for base in [b for b in cls.__bases__ if issubclass(b, EventSubject)]:
|
|
event_id = base.eventId(ident)
|
|
if event_id: return event_id
|
|
|
|
def emit(self, ident, data = None):
|
|
event = Event(ident, type(self).eventId(ident), self)
|
|
if data: event.setData(data)
|
|
return event
|
|
|
|
# vim: set ft=python et ts=8 sw=4 sts=4:
|