Skip to content

Commit

Permalink
bt2: Force usage of MapValue object on component init
Browse files Browse the repository at this point in the history
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I95c7402a28020467d06083d231f3b5bd6eb1fe70
Reviewed-on: https://review.lttng.org/c/babeltrace/+/2226
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
  • Loading branch information
frdeso authored and simark committed Oct 21, 2019
1 parent ce75de1 commit 401b702
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/bindings/python/bt2/bt2/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,11 @@ def add_component(
if obj is not None and not native_bt.bt2_is_python_component_class(base_cc_ptr):
raise ValueError('cannot pass a Python object to a non-Python component')

if params is not None and not isinstance(params, (dict, bt2.MapValue)):
raise TypeError("'params' parameter is not a 'dict' or a 'bt2.MapValue'.")

params = bt2.create_value(params)

params_ptr = params._ptr if params is not None else None

status, comp_ptr = add_fn(
Expand Down
42 changes: 42 additions & 0 deletions tests/bindings/python/bt2/test_graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,48 @@ def _user_consume(self):
with self.assertRaises(ValueError):
self._graph.add_component(MySink, 'salut', logging_level=12345)

def test_add_component_invalid_params_type(self):
class MySink(bt2._UserSinkComponent):
def _user_consume(self):
pass

with self.assertRaises(TypeError):
self._graph.add_component(MySink, 'salut', params=12)

def test_add_component_params_dict(self):
params_obj = None

class MySink(bt2._UserSinkComponent):
def __init__(self, config, params, obj):
nonlocal params_obj
params_obj = params

def _user_consume(self):
pass

params = {'plage': 12312}
self._graph.add_component(MySink, 'salut', params=params)

# Check equality and not identity because `add_component()` method
# converts the Python `dict` to a `bt2.MapValue`.
self.assertEqual(params, params_obj)

def test_add_component_params_mapvalue(self):
params_obj = None

class MySink(bt2._UserSinkComponent):
def __init__(self, config, params, obj):
nonlocal params_obj
params_obj = params

def _user_consume(self):
pass

params = bt2.MapValue({'beachclub': '121'})
self._graph.add_component(MySink, 'salut', params=params)

self.assertEqual(params, params_obj)

def test_add_component_logging_level(self):
class MySink(bt2._UserSinkComponent):
def _user_consume(self):
Expand Down

0 comments on commit 401b702

Please sign in to comment.