Commit | Line | Data |
---|---|---|
0235b0db | 1 | # SPDX-License-Identifier: MIT |
f1f74173 PP |
2 | # |
3 | # Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com> | |
f1f74173 | 4 | |
e5914347 SM |
5 | from bt2 import native_bt |
6 | from bt2 import utils as bt2_utils | |
c345b078 SM |
7 | from bt2 import error as bt2_error |
8 | from bt2 import logging as bt2_logging | |
9 | from bt2 import component_descriptor as bt2_component_descriptor | |
f1f74173 PP |
10 | |
11 | ||
12 | def get_greatest_operative_mip_version( | |
c345b078 | 13 | component_descriptors, log_level=bt2_logging.LoggingLevel.NONE |
f1f74173 | 14 | ): |
e5914347 | 15 | bt2_utils._check_log_level(log_level) |
f1f74173 PP |
16 | comp_descr_set_ptr = native_bt.component_descriptor_set_create() |
17 | ||
18 | if comp_descr_set_ptr is None: | |
c345b078 | 19 | raise bt2_error._MemoryError("cannot create component descriptor set object") |
f1f74173 PP |
20 | |
21 | if len(component_descriptors) == 0: | |
f5567ea8 | 22 | raise ValueError("no component descriptors") |
f1f74173 PP |
23 | |
24 | try: | |
25 | for descr in component_descriptors: | |
c345b078 | 26 | if type(descr) is not bt2_component_descriptor.ComponentDescriptor: |
f1f74173 PP |
27 | raise TypeError("'{}' is not a component descriptor".format(descr)) |
28 | ||
29 | base_cc_ptr = descr.component_class._bt_component_class_ptr() | |
30 | params_ptr = None | |
31 | ||
32 | if descr.params is not None: | |
33 | params_ptr = descr.params._ptr | |
34 | ||
21a9f056 | 35 | status = native_bt.bt2_component_descriptor_set_add_descriptor_with_initialize_method_data( |
f1f74173 PP |
36 | comp_descr_set_ptr, base_cc_ptr, params_ptr, descr.obj |
37 | ) | |
e5914347 | 38 | bt2_utils._handle_func_status( |
f5567ea8 | 39 | status, "cannot add descriptor to component descriptor set" |
f1f74173 PP |
40 | ) |
41 | ||
42 | status, version = native_bt.get_greatest_operative_mip_version( | |
43 | comp_descr_set_ptr, log_level | |
44 | ) | |
45 | ||
46 | if status == native_bt.__BT_FUNC_STATUS_NO_MATCH: | |
47 | return None | |
48 | ||
e5914347 SM |
49 | bt2_utils._handle_func_status( |
50 | status, "cannot get greatest operative MIP version" | |
51 | ) | |
f1f74173 PP |
52 | return version |
53 | finally: | |
54 | native_bt.component_descriptor_set_put_ref(comp_descr_set_ptr) | |
55 | ||
56 | ||
57 | def get_maximal_mip_version(): | |
58 | return native_bt.get_maximal_mip_version() |