bt2/native_bt_message.i \
bt2/native_bt_message_iterator.i \
bt2/native_bt_message_iterator.i.h \
+ bt2/native_bt_mip.i \
+ bt2/native_bt_mip.i.h \
bt2/native_bt_packet.i \
bt2/native_bt_plugin.i \
bt2/native_bt_plugin.i.h \
bt2/logging.py \
bt2/message.py \
bt2/message_iterator.py \
+ bt2/mip.py \
bt2/object.py \
bt2/packet.py \
bt2/plugin.py \
from bt2.message import _DiscardedEventsMessage
from bt2.message import _DiscardedPacketsMessage
from bt2.message_iterator import _UserMessageIterator
+from bt2.mip import get_greatest_operative_mip_version
+from bt2.mip import get_maximal_mip_version
from bt2.plugin import find_plugins_in_path
from bt2.plugin import find_plugins
from bt2.plugin import find_plugin
--- /dev/null
+# The MIT License (MIT)
+#
+# Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+from bt2 import native_bt, object, utils
+import bt2
+
+
+def get_greatest_operative_mip_version(
+ component_descriptors, log_level=bt2.LoggingLevel.NONE
+):
+ utils._check_log_level(log_level)
+ comp_descr_set_ptr = native_bt.component_descriptor_set_create()
+
+ if comp_descr_set_ptr is None:
+ raise bt2._MemoryError('cannot create component descriptor set object')
+
+ if len(component_descriptors) == 0:
+ raise ValueError('no component descriptors')
+
+ try:
+ for descr in component_descriptors:
+ if type(descr) is not bt2.ComponentDescriptor:
+ raise TypeError("'{}' is not a component descriptor".format(descr))
+
+ base_cc_ptr = descr.component_class._bt_component_class_ptr()
+ params_ptr = None
+
+ if descr.params is not None:
+ params_ptr = descr.params._ptr
+
+ status = native_bt.bt2_component_descriptor_set_add_descriptor_with_init_method_data(
+ comp_descr_set_ptr, base_cc_ptr, params_ptr, descr.obj
+ )
+ utils._handle_func_status(
+ status, 'cannot add descriptor to component descriptor set'
+ )
+
+ status, version = native_bt.get_greatest_operative_mip_version(
+ comp_descr_set_ptr, log_level
+ )
+
+ if status == native_bt.__BT_FUNC_STATUS_NO_MATCH:
+ return None
+
+ utils._handle_func_status(status, 'cannot get greatest operative MIP version')
+ return version
+ finally:
+ native_bt.component_descriptor_set_put_ref(comp_descr_set_ptr)
+
+
+def get_maximal_mip_version():
+ return native_bt.get_maximal_mip_version()
%include "native_bt_logging.i"
%include "native_bt_message.i"
%include "native_bt_message_iterator.i"
+%include "native_bt_mip.i"
%include "native_bt_packet.i"
%include "native_bt_plugin.i"
%include "native_bt_port.i"
--- /dev/null
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+%include <babeltrace2/graph/component-descriptor-set.h>
+%include <babeltrace2/graph/component-descriptor-set-const.h>
+%include <babeltrace2/graph/mip.h>
+
+%{
+#include "native_bt_mip.i.h"
+%}
+
+bt_component_descriptor_set_add_descriptor_status
+bt_bt2_component_descriptor_set_add_descriptor_with_init_method_data(
+ bt_component_descriptor_set *comp_descr_set,
+ const bt_component_class *comp_cls,
+ const bt_value *params, PyObject *init_method_data);
--- /dev/null
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+static
+bt_component_descriptor_set_add_descriptor_status
+bt_bt2_component_descriptor_set_add_descriptor_with_init_method_data(
+ bt_component_descriptor_set *comp_descr_set,
+ const bt_component_class *comp_cls,
+ const bt_value *params, PyObject *obj)
+{
+ return bt_component_descriptor_set_add_descriptor_with_init_method_data(
+ comp_descr_set, comp_cls, params, obj == Py_None ? NULL : obj);
+}
--- /dev/null
+#
+# Copyright (C) 2019 EfficiOS Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; only version 2
+# of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+import unittest
+import copy
+import bt2
+
+
+class MipTestCase(unittest.TestCase):
+ def test_get_greatest_operative_mip_version(self):
+ class Source1(
+ bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+ ):
+ @classmethod
+ def _user_get_supported_mip_versions(cls, params, obj, log_level):
+ return [0, 1]
+
+ class Source2(
+ bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+ ):
+ @classmethod
+ def _user_get_supported_mip_versions(cls, params, obj, log_level):
+ return [0, 2]
+
+ class Source3(
+ bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+ ):
+ pass
+
+ descriptors = [
+ bt2.ComponentDescriptor(Source1),
+ bt2.ComponentDescriptor(Source2),
+ bt2.ComponentDescriptor(Source3),
+ ]
+ version = bt2.get_greatest_operative_mip_version(descriptors)
+ self.assertEqual(version, 0)
+
+ def test_get_greatest_operative_mip_version_no_match(self):
+ class Source1(
+ bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+ ):
+ @classmethod
+ def _user_get_supported_mip_versions(cls, params, obj, log_level):
+ return [0]
+
+ class Source2(
+ bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+ ):
+ @classmethod
+ def _user_get_supported_mip_versions(cls, params, obj, log_level):
+ return [1]
+
+ descriptors = [
+ bt2.ComponentDescriptor(Source1),
+ bt2.ComponentDescriptor(Source2),
+ ]
+
+ version = bt2.get_greatest_operative_mip_version(descriptors)
+ self.assertIsNone(version)
+
+ def test_get_greatest_operative_mip_version_empty_descriptors(self):
+ with self.assertRaises(ValueError):
+ bt2.get_greatest_operative_mip_version([])
+
+ def test_get_greatest_operative_mip_version_wrong_descriptor_type(self):
+ class Source1(
+ bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+ ):
+ @classmethod
+ def _user_get_supported_mip_versions(cls, params, obj, log_level):
+ return [0, 1]
+
+ descriptors = [bt2.ComponentDescriptor(Source1), object()]
+
+ with self.assertRaises(TypeError):
+ bt2.get_greatest_operative_mip_version(descriptors)
+
+ def test_get_greatest_operative_mip_version_wrong_log_level_type(self):
+ class Source1(
+ bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+ ):
+ pass
+
+ descriptors = [bt2.ComponentDescriptor(Source1)]
+
+ with self.assertRaises(TypeError):
+ bt2.get_greatest_operative_mip_version(descriptors, 'lel')
+
+ def test_get_greatest_operative_mip_version_wrong_log_level_value(self):
+ class Source1(
+ bt2._UserSourceComponent, message_iterator_class=bt2._UserMessageIterator
+ ):
+ pass
+
+ descriptors = [bt2.ComponentDescriptor(Source1)]
+
+ with self.assertRaises(ValueError):
+ bt2.get_greatest_operative_mip_version(descriptors, 12345)
+
+ def test_get_maximal_mip_version(self):
+ self.assertEqual(bt2.get_maximal_mip_version(), 0)