Exemplo n.º 1
0
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()))
Exemplo n.º 2
0
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()))