X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bindings%2Fpython%2Fbt2%2Fbt2%2Fmessage_iterator.py;h=26ec40916c0727666f38f56b1d206b89660b89a0;hb=3fadfbc0c91f82c46bd36e6e0657ea93570c9db1;hp=4cf362ad490d9b4fe002214b329a1fbfcb3dc0c8;hpb=9ec609eca33472c516129ba3b1257fbfc1978e77;p=babeltrace.git diff --git a/bindings/python/bt2/bt2/message_iterator.py b/bindings/python/bt2/bt2/message_iterator.py index 4cf362ad..26ec4091 100644 --- a/bindings/python/bt2/bt2/message_iterator.py +++ b/bindings/python/bt2/bt2/message_iterator.py @@ -60,22 +60,28 @@ class _GenericMessageIterator(object._SharedObject, _MessageIterator): return bt2.message._create_from_ptr(msg_ptr) +# This is created when a component wants to iterate on one of its input ports. class _UserComponentInputPortMessageIterator(_GenericMessageIterator): _get_msg_range = staticmethod(native_bt.py3_self_component_port_input_get_msg_range) - - @property - def component(self): - comp_ptr = native_bt.private_connection_message_iterator_get_component(self._ptr) - assert(comp_ptr) - return bt2.component._create_generic_component_from_ptr(comp_ptr) + _get_ref = staticmethod(native_bt.self_component_port_input_message_iterator_get_ref) + _put_ref = staticmethod(native_bt.self_component_port_input_message_iterator_put_ref) +# This is created when the user wants to iterate on a component's output port, +# from outside the graph. class _OutputPortMessageIterator(_GenericMessageIterator): _get_msg_range = staticmethod(native_bt.py3_port_output_get_msg_range) _get_ref = staticmethod(native_bt.port_output_message_iterator_get_ref) _put_ref = staticmethod(native_bt.port_output_message_iterator_put_ref) +# This is extended by the user to implement component classes in Python. It +# is created for a given output port when an input port message iterator is +# created on the input port on the other side of the connection. It is also +# created when an output port message iterator is created on this output port. +# +# Its purpose is to feed the messages that should go out through this output +# port. class _UserMessageIterator(_MessageIterator): def __new__(cls, ptr): # User iterator objects are always created by the native side, @@ -92,7 +98,12 @@ class _UserMessageIterator(_MessageIterator): self._ptr = ptr return self - def __init__(self): + def _init_from_native(self, self_output_port_ptr): + self_output_port = bt2.port._create_self_from_ptr_and_get_ref( + self_output_port_ptr, native_bt.PORT_TYPE_OUTPUT) + self.__init__(self_output_port) + + def __init__(self, output_port): pass @property @@ -221,7 +232,7 @@ class _UserMessageIterator(_MessageIterator): def _create_packet_beginning_message(self, packet, default_clock_snapshot=None): utils._check_type(packet, bt2.packet._Packet) - if packet.stream.stream_class.packets_have_default_beginning_clock_snapshot: + if packet.stream.stream_class.packets_have_beginning_default_clock_snapshot: if default_clock_snapshot is None: raise ValueError("packet beginning messages in this stream must have a default clock snapshots") @@ -242,7 +253,7 @@ class _UserMessageIterator(_MessageIterator): def _create_packet_end_message(self, packet, default_clock_snapshot=None): utils._check_type(packet, bt2.packet._Packet) - if packet.stream.stream_class.packets_have_default_end_clock_snapshot: + if packet.stream.stream_class.packets_have_end_default_clock_snapshot: if default_clock_snapshot is None: raise ValueError("packet end messages in this stream must have a default clock snapshots") @@ -265,15 +276,23 @@ class _UserMessageIterator(_MessageIterator): end_clock_snapshot=None): utils._check_type(stream, bt2.stream._Stream) - if beg_clock_snapshot is None and end_clock_snapshot is None: - ptr = native_bt.message_discarded_events_create(self._ptr, stream._ptr) - elif beg_clock_snapshot is not None and end_clock_snapshot is not None: + if not stream.stream_class.supports_discarded_events: + raise ValueError('stream class does not support discarded events') + + if stream.stream_class.discarded_events_have_default_clock_snapshots: + if beg_clock_snapshot is None or end_clock_snapshot is None: + raise ValueError('discarded events have default clock snapshots for this stream class') + utils._check_uint64(beg_clock_snapshot) utils._check_uint64(end_clock_snapshot) ptr = native_bt.message_discarded_events_create_with_default_clock_snapshots( self._ptr, stream._ptr, beg_clock_snapshot, end_clock_snapshot) else: - raise ValueError('begin and end clock snapshots must be both provided or both omitted') + if beg_clock_snapshot is not None or end_clock_snapshot is not None: + raise ValueError('discarded events have no default clock snapshots for this stream class') + + ptr = native_bt.message_discarded_events_create( + self._ptr, stream._ptr) if ptr is None: raise bt2.CreationError('cannot discarded events message object') @@ -288,15 +307,23 @@ class _UserMessageIterator(_MessageIterator): def _create_discarded_packets_message(self, stream, count=None, beg_clock_snapshot=None, end_clock_snapshot=None): utils._check_type(stream, bt2.stream._Stream) - if beg_clock_snapshot is None and end_clock_snapshot is None: - ptr = native_bt.message_discarded_packets_create(self._ptr, stream._ptr) - elif beg_clock_snapshot is not None and end_clock_snapshot is not None: + if not stream.stream_class.supports_discarded_packets: + raise ValueError('stream class does not support discarded packets') + + if stream.stream_class.discarded_packets_have_default_clock_snapshots: + if beg_clock_snapshot is None or end_clock_snapshot is None: + raise ValueError('discarded packets have default clock snapshots for this stream class') + utils._check_uint64(beg_clock_snapshot) utils._check_uint64(end_clock_snapshot) ptr = native_bt.message_discarded_packets_create_with_default_clock_snapshots( self._ptr, stream._ptr, beg_clock_snapshot, end_clock_snapshot) else: - raise ValueError('begin and end clock snapshots must be both provided or both omitted') + if beg_clock_snapshot is not None or end_clock_snapshot is not None: + raise ValueError('discarded packets have no default clock snapshots for this stream class') + + ptr = native_bt.message_discarded_packets_create( + self._ptr, stream._ptr) if ptr is None: raise bt2.CreationError('cannot discarded packets message object')