bt2: Adapt test_event.py and make it pass
[babeltrace.git] / bindings / python / bt2 / bt2 / trace_class.py
index 1f473a3099372660ce8486ea9d93f072c9abef9a..f8ef2646566a88e35c11c1d75c0e89022832a60d 100644 (file)
@@ -117,6 +117,21 @@ class TraceClass(object._SharedObject, collections.abc.Mapping):
 
     _uuid = property(fset=_uuid)
 
+    # Instantiate a trace of this class.
+
+    def __call__(self, name=None):
+        trace_ptr = native_bt.trace_create(self._ptr)
+
+        if trace_ptr is None:
+            raise bt2.CreationError('cannot create trace class object')
+
+        trace = bt2.trace.Trace._create_from_ptr(trace_ptr)
+
+        if name is not None:
+            trace._name = name
+
+        return trace
+
     # Number of stream classes in this trace class.
 
     def __len__(self):
@@ -149,7 +164,15 @@ class TraceClass(object._SharedObject, collections.abc.Mapping):
     def env(self):
         return _TraceClassEnv(self)
 
-    def create_stream_class(self, id=None):
+    def create_stream_class(self, id=None,
+                            name=None,
+                            packet_context_field_class=None,
+                            event_common_context_field_class=None,
+                            default_clock_class=None,
+                            assigns_automatic_event_class_id=True,
+                            assigns_automatic_stream_id=True,
+                            packets_have_default_beginning_clock_snapshot=False,
+                            packets_have_default_end_clock_snapshot=False):
 
         if self.assigns_automatic_stream_class_id:
             if id is not None:
@@ -163,7 +186,26 @@ class TraceClass(object._SharedObject, collections.abc.Mapping):
             utils._check_uint64(id)
             sc_ptr = native_bt.stream_class_create_with_id(self._ptr, id)
 
-        return bt2.StreamClass._create_from_ptr(sc_ptr)
+        sc = bt2.stream_class.StreamClass._create_from_ptr(sc_ptr)
+
+        if name is not None:
+            sc._name = name
+
+        if packet_context_field_class is not None:
+            sc._packet_context_field_class = packet_context_field_class
+
+        if event_common_context_field_class is not None:
+            sc._event_common_context_field_class = event_common_context_field_class
+
+        if default_clock_class is not None:
+            sc._default_clock_class = default_clock_class
+
+        sc._assigns_automatic_event_class_id = assigns_automatic_event_class_id
+        sc._assigns_automatic_stream_id = assigns_automatic_stream_id
+        sc._packets_have_default_beginning_clock_snapshot = packets_have_default_beginning_clock_snapshot
+        sc._packets_have_default_end_clock_snapshot = packets_have_default_end_clock_snapshot
+
+        return sc
 
     @property
     def assigns_automatic_stream_class_id(self):
@@ -175,6 +217,59 @@ class TraceClass(object._SharedObject, collections.abc.Mapping):
 
     _assigns_automatic_stream_class_id = property(fset=_assigns_automatic_stream_class_id)
 
+    # Field class creation methods.
+
+    def _check_create_status(self, ptr, type_name):
+        if ptr is None:
+            raise bt2.CreationError(
+                'cannot create {} field class'.format(type_name))
+
+    def _create_integer_field_class(self, create_func, py_cls, type_name, range, display_base):
+        field_class_ptr = create_func(self._ptr)
+        self._check_create_status(field_class_ptr, type_name)
+
+        field_class = py_cls._create_from_ptr(field_class_ptr)
+
+        if range is not None:
+            field_class._range = range
+
+        if display_base is not None:
+            field_class._display_base = display_base
+
+        return field_class
+
+    def create_signed_integer_field_class(self, range=None, display_base=None):
+        return self._create_integer_field_class(native_bt.field_class_signed_integer_create,
+                                                bt2.field_class.SignedIntegerFieldClass,
+                                                'signed integer', range, display_base)
+
+    def create_unsigned_integer_field_class(self, range=None, display_base=None):
+        return self._create_integer_field_class(native_bt.field_class_unsigned_integer_create,
+                                                bt2.field_class.UnsignedIntegerFieldClass,
+                                                'unsigned integer', range, display_base)
+
+    def create_real_field_class(self, is_single_precision=False):
+        field_class_ptr = native_bt.field_class_real_create(self._ptr)
+        self._check_create_status(field_class_ptr, 'real')
+
+        field_class = bt2.field_class.RealFieldClass._create_from_ptr(field_class_ptr)
+
+        field_class._single_precision = is_single_precision
+
+        return field_class
+
+    def create_structure_field_class(self):
+        field_class_ptr = native_bt.field_class_structure_create(self._ptr)
+        self._check_create_status(field_class_ptr, 'structure')
+
+        return bt2.field_class._StructureFieldClass._create_from_ptr(field_class_ptr)
+
+    def create_string_field_class(self):
+        field_class_ptr = native_bt.field_class_string_create(self._ptr)
+        self._check_create_status(field_class_ptr, 'string')
+
+        return bt2.field_class.StringFieldClass._create_from_ptr(field_class_ptr)
+
     # Add a listener to be called when the trace class is destroyed.
 
     def add_destruction_listener(self, listener):
This page took 0.026534 seconds and 4 git commands to generate.