X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=bindings%2Fpython%2Fbt2%2Fbt2%2Fport.py;h=f7c236692e23d35951c00b85375ef58a887d9831;hb=3fadfbc0c91f82c46bd36e6e0657ea93570c9db1;hp=c91d9889b4ced413856d225b53058f68ca958027;hpb=894a8df566ca63e6b53c831d245569d8598c5889;p=babeltrace.git diff --git a/bindings/python/bt2/bt2/port.py b/bindings/python/bt2/bt2/port.py index c91d9889..f7c23669 100644 --- a/bindings/python/bt2/bt2/port.py +++ b/bindings/python/bt2/bt2/port.py @@ -28,6 +28,24 @@ import bt2.message import bt2 +def _create_from_ptr_and_get_ref(ptr, port_type): + cls = _PORT_TYPE_TO_PYCLS.get(port_type, None) + + if cls is None: + raise bt2.Error('unknown port type: {}'.format(port_type)) + + return cls._create_from_ptr_and_get_ref(ptr) + + +def _create_self_from_ptr_and_get_ref(ptr, port_type): + cls = _PORT_TYPE_TO_USER_PYCLS.get(port_type, None) + + if cls is None: + raise bt2.Error('unknown port type: {}'.format(port_type)) + + return cls._create_from_ptr_and_get_ref(ptr) + + class _Port(object._SharedObject): @classmethod def _get_ref(cls, ptr): @@ -85,10 +103,34 @@ class _UserComponentPort(_Port): return bt2.connection._Connection._create_from_ptr_and_get_ref(conn_ptr) + @property + def user_data(self): + ptr = self._as_self_port_ptr(self._ptr) + return native_bt.self_component_port_get_data(ptr) + class _UserComponentInputPort(_UserComponentPort, _InputPort): _as_self_port_ptr = staticmethod(native_bt.self_component_port_input_as_self_component_port) + def create_message_iterator(self): + msg_iter_ptr = native_bt.self_component_port_input_message_iterator_create(self._ptr) + if msg_iter_ptr is None: + raise bt2.CreationError('cannot create message iterator object') + + return bt2.message_iterator._UserComponentInputPortMessageIterator(msg_iter_ptr) + class _UserComponentOutputPort(_UserComponentPort, _OutputPort): _as_self_port_ptr = staticmethod(native_bt.self_component_port_output_as_self_component_port) + + +_PORT_TYPE_TO_PYCLS = { + native_bt.PORT_TYPE_INPUT: _InputPort, + native_bt.PORT_TYPE_OUTPUT: _OutputPort, +} + + +_PORT_TYPE_TO_USER_PYCLS = { + native_bt.PORT_TYPE_INPUT: _UserComponentInputPort, + native_bt.PORT_TYPE_OUTPUT: _UserComponentOutputPort, +}