Remove `skip-string-normalization` in Python formatter config
[babeltrace.git] / tests / data / auto-source-discovery / grouping / bt_plugin_test.py
... / ...
CommitLineData
1# SPDX-License-Identifier: GPL-2.0-only
2#
3# Copyright (C) 2019 EfficiOS Inc.
4#
5
6import bt2
7import os
8
9# Source component classes in this file recognize and group inputs in
10# various ways. One stream is created by each component, with a name
11# derived from the component class and the inputs. This is then checked
12# using the `sink.text.details` sink.
13
14
15class TestIter(bt2._UserMessageIterator):
16 def __init__(self, config, output_port):
17 inputs = output_port.user_data["inputs"]
18 sc = output_port.user_data["sc"]
19 tc = sc.trace_class
20 t = tc()
21 s = t.create_stream(sc, name=self._make_stream_name(inputs))
22
23 self._msgs = [
24 self._create_stream_beginning_message(s),
25 self._create_stream_end_message(s),
26 ]
27
28 def _make_stream_name(self, inputs):
29 comp_cls_name = self._component.__class__.__name__
30 return (
31 comp_cls_name
32 + ": "
33 + ", ".join(sorted([os.path.basename(str(x)) for x in inputs]))
34 )
35
36 def __next__(self):
37 if len(self._msgs) == 0:
38 raise StopIteration
39
40 return self._msgs.pop(0)
41
42
43class Base:
44 def __init__(self, params):
45 tc = self._create_trace_class()
46 sc = tc.create_stream_class()
47
48 self._add_output_port("out", {"inputs": params["inputs"], "sc": sc})
49
50
51@bt2.plugin_component_class
52class TestSourceExt(Base, bt2._UserSourceComponent, message_iterator_class=TestIter):
53 """
54 Recognize files whose name start with 'aaa', 'bbb' or 'ccc'.
55
56 'aaa' files are grouped together, 'bbb' files are grouped together, 'ccc'
57 files are not grouped.
58 """
59
60 def __init__(self, config, params, obj):
61 super().__init__(params)
62
63 @staticmethod
64 def _user_query(priv_query_exec, obj, params, method_obj):
65 if obj == "babeltrace.support-info":
66 if params["type"] == "file":
67 name = os.path.basename(str(params["input"]))
68
69 if name.startswith("aaa"):
70 return {"weight": 1, "group": "aaa"}
71 elif name.startswith("bbb"):
72 return {"weight": 0.5, "group": "bbb"}
73 elif name.startswith("ccc"):
74 # Try two different ways of returning 1 (an int and a float).
75 if name[3] == "1":
76 return 1
77 else:
78 return 1.0
79
80 return 0
81 else:
82 raise bt2.UnknownObject
83
84
85@bt2.plugin_component_class
86class TestSourceSomeDir(
87 Base, bt2._UserSourceComponent, message_iterator_class=TestIter
88):
89 """Recognizes directories named "some-dir". The file "aaa10" in the
90 directory "some-dir" won't be found by TestSourceExt, because we won't
91 recurse in "some-dir"."""
92
93 def __init__(self, config, params, obj):
94 super().__init__(params)
95
96 @staticmethod
97 def _user_query(priv_query_exec, obj, params, method_obj):
98 if obj == "babeltrace.support-info":
99 if params["type"] == "directory":
100 name = os.path.basename(str(params["input"]))
101 return 1 if name == "some-dir" else 0
102 else:
103 return 0
104 else:
105 raise bt2.UnknownObject
106
107
108@bt2.plugin_component_class
109class TestSourceABCDE(Base, bt2._UserSourceComponent, message_iterator_class=TestIter):
110 """A source that recognizes the arbitrary string input "ABCDE"."""
111
112 def __init__(self, config, params, obj):
113 super().__init__(params)
114
115 @staticmethod
116 def _user_query(priv_query_exec, obj, params, method_obj):
117 if obj == "babeltrace.support-info":
118 return (
119 1.0
120 if params["type"] == "string" and params["input"] == "ABCDE"
121 else 0.0
122 )
123 else:
124 raise bt2.UnknownObject
125
126
127class TestSourceNoQuery(bt2._UserSourceComponent, message_iterator_class=TestIter):
128 """A source that does not implement _query at all."""
129
130
131bt2.register_plugin(module_name=__name__, name="test")
This page took 0.0234 seconds and 4 git commands to generate.