de6f4441c9089372e73af63a34e0dbd03b1551c2
1 # SPDX-License-Identifier: MIT
3 # Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
5 from bt2
import error
as bt2_error
6 from bt2
import utils
as bt2_utils
7 from bt2
import value
as bt2_value
8 from bt2
import object as bt2_object
9 from bt2
import native_bt
10 from bt2
import interrupter
as bt2_interrupter
14 from bt2
import component
as bt2_component
19 class _QueryExecutorCommon
:
21 def _common_ptr(self
):
22 return self
._as
_query
_executor
_ptr
()
25 def is_interrupted(self
):
26 is_interrupted
= native_bt
.query_executor_is_interrupted(self
._common
_ptr
)
27 return bool(is_interrupted
)
30 def logging_level(self
):
31 return native_bt
.query_executor_get_logging_level(self
._common
_ptr
)
34 class QueryExecutor(bt2_object
._SharedObject
, _QueryExecutorCommon
):
37 native_bt
.query_executor_get_ref(ptr
)
41 native_bt
.query_executor_put_ref(ptr
)
43 def _as_query_executor_ptr(self
):
46 def __init__(self
, component_class
, object_name
, params
=None, method_obj
=None):
47 if not isinstance(component_class
, _bt2_component()._ComponentClassConst
):
51 if not issubclass(component_class
, _bt2_component()._UserComponent
):
58 raise TypeError("'{}' is not a component class object".format(o
))
60 bt2_utils
._check
_str
(object_name
)
63 params_ptr
= native_bt
.value_null
65 params
= bt2_value
.create_value(params
)
66 params_ptr
= params
._ptr
68 cc_ptr
= component_class
._bt
_component
_class
_ptr
()
69 assert cc_ptr
is not None
71 if method_obj
is not None and not native_bt
.bt2_is_python_component_class(
75 "cannot pass a Python object to a non-Python component class"
78 ptr
= native_bt
.bt2_query_executor_create(
79 cc_ptr
, object_name
, params_ptr
, method_obj
83 raise bt2_error
._MemoryError
("cannot create query executor object")
87 # Keep a reference of `method_obj` as the native query executor
88 # does not have any. This ensures that, when this object's
89 # query() method is called, the Python object still exists.
90 self
._method
_obj
= method_obj
92 def add_interrupter(self
, interrupter
):
93 bt2_utils
._check
_type
(interrupter
, bt2_interrupter
.Interrupter
)
94 native_bt
.query_executor_add_interrupter(self
._ptr
, interrupter
._ptr
)
97 def default_interrupter(self
):
98 ptr
= native_bt
.query_executor_borrow_default_interrupter(self
._ptr
)
99 return bt2_interrupter
.Interrupter
._create
_from
_ptr
_and
_get
_ref
(ptr
)
101 def _set_logging_level(self
, log_level
):
102 bt2_utils
._check
_log
_level
(log_level
)
103 status
= native_bt
.query_executor_set_logging_level(self
._ptr
, log_level
)
104 bt2_utils
._handle
_func
_status
(
105 status
, "cannot set query executor's logging level"
108 logging_level
= property(
109 fget
=_QueryExecutorCommon
.logging_level
, fset
=_set_logging_level
113 def is_interrupted(self
):
114 is_interrupted
= native_bt
.query_executor_is_interrupted(self
._ptr
)
115 return bool(is_interrupted
)
118 status
, result_ptr
= native_bt
.query_executor_query(self
._ptr
)
119 bt2_utils
._handle
_func
_status
(status
, "cannot query component class")
120 assert result_ptr
is not None
121 return bt2_value
._create
_from
_const
_ptr
(result_ptr
)
124 class _PrivateQueryExecutor(_QueryExecutorCommon
):
125 def __init__(self
, ptr
):
128 def _check_validity(self
):
129 if self
._ptr
is None:
130 raise RuntimeError("this object is not valid anymore")
132 def _as_query_executor_ptr(self
):
133 self
._check
_validity
()
134 return native_bt
.private_query_executor_as_query_executor_const(self
._ptr
)
136 def _invalidate(self
):
This page took 0.03384 seconds and 5 git commands to generate.