bt2: Add `Const` suffix to non-user component-related classes and adapt tests
[babeltrace.git] / src / bindings / python / bt2 / bt2 / query_executor.py
index 77b5857496fbae9b2143892734f5bb94c01df541..36edb014e500a0a7573b200752a82db785ff7e2b 100644 (file)
@@ -23,7 +23,6 @@
 from bt2 import native_bt, object, utils
 from bt2 import interrupter as bt2_interrupter
 from bt2 import component as bt2_component
-from bt2 import logging as bt2_logging
 from bt2 import value as bt2_value
 import bt2
 
@@ -50,8 +49,8 @@ class QueryExecutor(object._SharedObject, _QueryExecutorCommon):
     def _as_query_executor_ptr(self):
         return self._ptr
 
-    def __init__(self, component_class, object, params=None):
-        if not isinstance(component_class, bt2_component._ComponentClass):
+    def __init__(self, component_class, object, params=None, method_obj=None):
+        if not isinstance(component_class, bt2_component._ComponentClassConst):
             err = False
 
             try:
@@ -74,13 +73,28 @@ class QueryExecutor(object._SharedObject, _QueryExecutorCommon):
 
         cc_ptr = component_class._bt_component_class_ptr()
         assert cc_ptr is not None
-        ptr = native_bt.query_executor_create(cc_ptr, object, params_ptr)
+
+        if method_obj is not None and not native_bt.bt2_is_python_component_class(
+            cc_ptr
+        ):
+            raise ValueError(
+                'cannot pass a Python object to a non-Python component class'
+            )
+
+        ptr = native_bt.bt2_query_executor_create(
+            cc_ptr, object, params_ptr, method_obj
+        )
 
         if ptr is None:
             raise bt2._MemoryError('cannot create query executor object')
 
         super().__init__(ptr)
 
+        # Keep a reference of `method_obj` as the native query executor
+        # does not have any. This ensures that, when this object's
+        # query() method is called, the Python object still exists.
+        self._method_obj = method_obj
+
     def add_interrupter(self, interrupter):
         utils._check_type(interrupter, bt2_interrupter.Interrupter)
         native_bt.query_executor_add_interrupter(self._ptr, interrupter._ptr)
@@ -106,7 +120,7 @@ class QueryExecutor(object._SharedObject, _QueryExecutorCommon):
         status, result_ptr = native_bt.query_executor_query(self._ptr)
         utils._handle_func_status(status, 'cannot query component class')
         assert result_ptr is not None
-        return bt2_value._create_from_ptr(result_ptr)
+        return bt2_value._create_from_const_ptr(result_ptr)
 
 
 class _PrivateQueryExecutor(_QueryExecutorCommon):
This page took 0.025576 seconds and 4 git commands to generate.