X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbindings%2Fpython%2Fbt2%2Fbt2%2Fnative_bt_component_class.i;h=8219040dbc054009a64f99edd287975a9d9874c6;hb=f00b8d402364ed0b77c45a61467c1d27690222f7;hp=18078eead697748619da42c0756ffb0cd4d1d95c;hpb=f137d351487bd035362dd50c8006af107db0e750;p=babeltrace.git diff --git a/src/bindings/python/bt2/bt2/native_bt_component_class.i b/src/bindings/python/bt2/bt2/native_bt_component_class.i index 18078eea..8219040d 100644 --- a/src/bindings/python/bt2/bt2/native_bt_component_class.i +++ b/src/bindings/python/bt2/bt2/native_bt_component_class.i @@ -452,6 +452,58 @@ void bt_py3_component_class_sink_finalize(bt_self_component_sink *self_component bt_py3_component_class_finalize(self_component); } +static +bt_bool bt_py3_component_class_can_seek_beginning( + bt_self_message_iterator *self_message_iterator) +{ + PyObject *py_iter; + PyObject *py_result = NULL; + bt_bool can_seek_beginning = false; + + py_iter = bt_self_message_iterator_get_data(self_message_iterator); + BT_ASSERT(py_iter); + + py_result = PyObject_GetAttrString(py_iter, "_can_seek_beginning_from_native"); + + BT_ASSERT(!py_result || PyBool_Check(py_result)); + + if (py_result) { + can_seek_beginning = PyObject_IsTrue(py_result); + } else { + /* + * Once can_seek_beginning can report errors, convert the + * exception to a status. For now, log and return false; + */ + bt2_py_loge_exception(); + PyErr_Clear(); + } + + Py_XDECREF(py_result); + + return can_seek_beginning; +} + +static +bt_self_message_iterator_status bt_py3_component_class_seek_beginning( + bt_self_message_iterator *self_message_iterator) +{ + PyObject *py_iter; + PyObject *py_result; + bt_self_message_iterator_status status; + + py_iter = bt_self_message_iterator_get_data(self_message_iterator); + BT_ASSERT(py_iter); + + py_result = PyObject_CallMethod(py_iter, "_seek_beginning_from_native", NULL); + + BT_ASSERT(!py_result || py_result == Py_None); + status = bt_py3_exc_to_self_message_iterator_status(); + + Py_XDECREF(py_result); + + return status; +} + static bt_self_component_status bt_py3_component_class_port_connected( bt_self_component *self_component, @@ -1001,7 +1053,13 @@ bt_component_class_source *bt_py3_component_class_source_create( ret = bt_component_class_source_set_init_method(component_class_source, bt_py3_component_class_source_init); BT_ASSERT(ret == 0); - ret = bt_component_class_source_set_finalize_method (component_class_source, bt_py3_component_class_source_finalize); + ret = bt_component_class_source_set_finalize_method(component_class_source, bt_py3_component_class_source_finalize); + BT_ASSERT(ret == 0); + ret = bt_component_class_source_set_message_iterator_can_seek_beginning_method(component_class_source, + bt_py3_component_class_can_seek_beginning); + BT_ASSERT(ret == 0); + ret = bt_component_class_source_set_message_iterator_seek_beginning_method(component_class_source, + bt_py3_component_class_seek_beginning); BT_ASSERT(ret == 0); ret = bt_component_class_source_set_output_port_connected_method(component_class_source, bt_py3_component_class_source_output_port_connected); @@ -1049,6 +1107,12 @@ bt_component_class_filter *bt_py3_component_class_filter_create( BT_ASSERT(ret == 0); ret = bt_component_class_filter_set_finalize_method (component_class_filter, bt_py3_component_class_filter_finalize); BT_ASSERT(ret == 0); + ret = bt_component_class_filter_set_message_iterator_can_seek_beginning_method(component_class_filter, + bt_py3_component_class_can_seek_beginning); + BT_ASSERT(ret == 0); + ret = bt_component_class_filter_set_message_iterator_seek_beginning_method(component_class_filter, + bt_py3_component_class_seek_beginning); + BT_ASSERT(ret == 0); ret = bt_component_class_filter_set_input_port_connected_method(component_class_filter, bt_py3_component_class_filter_input_port_connected); BT_ASSERT(ret == 0);