class ArsdkEventContext(object): def __init__(self, event_list=None, policy=None, marker=None): if event_list is None: event_list = [] if policy is not None: for event in event_list: event._policy = policy self._marker = marker self._by_uuid = OrderedDict( zip(map(lambda e: e.uuid, event_list), event_list)) self._by_message_id = OrderedMultiDict( zip(map(lambda e: e.message.id, self._by_uuid.values()), self._by_uuid.values())) def events(self): return list(self._by_uuid.values()) def __iter__(self): return iter(self._by_uuid.values()) def _set_marker(self, marker): self._marker = marker return self def filter(self, message): if message.id in self._by_message_id: events = self._by_message_id.getlist(message.id)[:] return ArsdkEventContext(events, marker=self._marker) else: return ArsdkEventContext() def last(self, message=None): if message is None: return next(reversed(self._by_uuid.values()), None) else: return self._by_message_id.get(message.id) def __bool__(self): return len(self._by_uuid) > 0 __nonzero__ = __bool__ def _marker_prefix_str(self): return self._marker.begin() if self._marker is not None else "" def _marker_suffix_str(self): return self._marker.end() if self._marker is not None else "" def _to_str(self): ret = "" if len(self._by_uuid.values()) > 1: ret += "[" for i, message_event in enumerate(self._by_uuid.values()): ret += self._marker_prefix_str() ret += str(message_event) ret += self._marker_suffix_str() if i != (len(self._by_uuid.values()) - 1): ret += "," if len(self._by_uuid.values()) > 1: ret += "]" return ret def __str__(self): return EventMarker.color_string(_format_olympe_dsl(self._to_str()))
class EventContext(object): def __init__(self, event_list=None, policy=None, marker=None): if event_list is None: event_list = [] if policy is not None: for event in event_list: event._policy = policy self._marker = marker self._by_uuid = OrderedDict( zip(map(lambda e: e.uuid, event_list), event_list)) self._by_id = OrderedMultiDict( zip(map(lambda e: e.id, self._by_uuid.values()), self._by_uuid.values())) def events(self): return list(self._by_uuid.values()) def __iter__(self): return iter(self._by_uuid.values()) def _set_marker(self, marker): self._marker = marker return self def filter(self, payload): if hasattr(payload, "id") and payload.id in self._by_id: events = self._by_id.getlist(payload.id)[:] return EventContext(events, marker=self._marker) else: return EventContext() def last(self, payload=None): if payload is None: return next(reversed(self._by_uuid.values()), None) elif hasattr(payload, "id"): return self._by_id.get(payload.id) else: raise RuntimeError( "EventContext.last() payload argument doesn't have an 'id' attribute" ) def __bool__(self): return len(self._by_uuid) > 0 __nonzero__ = __bool__ def _marker_prefix_str(self): return self._marker.begin() if self._marker is not None else "" def _marker_suffix_str(self): return self._marker.end() if self._marker is not None else "" def _to_str(self): ret = "" if len(self._by_uuid.values()) > 1: ret += "[" for i, event in enumerate(self._by_uuid.values()): ret += self._marker_prefix_str() ret += str(event) ret += self._marker_suffix_str() if i != (len(self._by_uuid.values()) - 1): ret += "," if len(self._by_uuid.values()) > 1: ret += "]" return ret def __str__(self): return EventMarker.color_string(_format_olympe_dsl(self._to_str()))