""" Methodology to craete Events, that can be uniquely identified. @Author: Georg Hopp """ 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: