doc/api/libbabeltrace2/DoxygenLayout.xml: use `topics` tab
[babeltrace.git] / src / bindings / python / bt2 / bt2 / message.py
index 80c5db432795c4bf2003919f69b2d6adeb5daf88..c56f696190c3c7cb1ed2bf59ccb87b3fd9df9115 100644 (file)
@@ -2,11 +2,13 @@
 #
 # Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
 
-from bt2 import native_bt, object, utils
-from bt2 import clock_snapshot as bt2_clock_snapshot
+from bt2 import event as bt2_event
+from bt2 import utils as bt2_utils
+from bt2 import object as bt2_object
 from bt2 import packet as bt2_packet
 from bt2 import stream as bt2_stream
-from bt2 import event as bt2_event
+from bt2 import native_bt
+from bt2 import clock_snapshot as bt2_clock_snapshot
 
 
 def _create_from_ptr(ptr):
@@ -14,15 +16,20 @@ def _create_from_ptr(ptr):
     return _MESSAGE_TYPE_TO_CLS[msg_type]._create_from_ptr(ptr)
 
 
-class _MessageConst(object._SharedObject):
-    _get_ref = staticmethod(native_bt.message_get_ref)
-    _put_ref = staticmethod(native_bt.message_put_ref)
+class _MessageConst(bt2_object._SharedObject):
+    @staticmethod
+    def _get_ref(ptr):
+        native_bt.message_get_ref(ptr)
+
+    @staticmethod
+    def _put_ref(ptr):
+        native_bt.message_put_ref(ptr)
 
     @staticmethod
     def _check_has_default_clock_class(clock_class):
         if clock_class is None:
             raise ValueError(
-                'cannot get default clock snapshot: stream class has no default clock class'
+                "cannot get default clock snapshot: stream class has no default clock class"
             )
 
 
@@ -134,7 +141,7 @@ class _StreamMessageConst(_MessageConst, _MessageWithDefaultClockSnapshot):
 
 class _StreamMessage(_StreamMessageConst, _Message):
     def _default_clock_snapshot(self, raw_value):
-        utils._check_uint64(raw_value)
+        bt2_utils._check_uint64(raw_value)
         self._set_default_clock_snapshot(self._ptr, raw_value)
 
     _default_clock_snapshot = property(
@@ -212,7 +219,7 @@ class _DiscardedMessageConst(_MessageConst, _MessageWithDefaultClockSnapshot):
     def _check_has_default_clock_snapshots(self):
         if not self._has_default_clock_snapshots:
             raise ValueError(
-                'cannot get default clock snapshot: such a message has no clock snapshots for this stream class'
+                "cannot get default clock snapshot: such a message has no clock snapshots for this stream class"
             )
 
     @property
@@ -232,7 +239,11 @@ class _DiscardedMessage(_DiscardedMessageConst, _Message):
     _stream_pycls = property(lambda _: bt2_stream._Stream)
 
     def _set_count(self, count):
-        utils._check_uint64(count)
+        bt2_utils._check_uint64(count)
+
+        if count == 0:
+            raise ValueError("discarded {} count is 0".format(self._item_name))
+
         self._set_count(self._ptr, count)
 
     _count = property(fget=_DiscardedMessageConst.count.fget, fset=_set_count)
@@ -255,9 +266,10 @@ class _DiscardedEventsMessageConst(_DiscardedMessageConst):
         return self.stream.cls.discarded_events_have_default_clock_snapshots
 
 
-class _DiscardedEventsMessage(_DiscardedMessage):
+class _DiscardedEventsMessage(_DiscardedEventsMessageConst, _DiscardedMessage):
     _borrow_stream_ptr = staticmethod(native_bt.message_discarded_events_borrow_stream)
     _set_count = staticmethod(native_bt.message_discarded_events_set_count)
+    _item_name = "event"
 
 
 class _DiscardedPacketsMessageConst(_DiscardedMessageConst):
@@ -280,6 +292,7 @@ class _DiscardedPacketsMessageConst(_DiscardedMessageConst):
 class _DiscardedPacketsMessage(_DiscardedPacketsMessageConst, _DiscardedMessage):
     _borrow_stream_ptr = staticmethod(native_bt.message_discarded_packets_borrow_stream)
     _set_count = staticmethod(native_bt.message_discarded_packets_set_count)
+    _item_name = "packet"
 
 
 _MESSAGE_TYPE_TO_CLS = {
This page took 0.026662 seconds and 4 git commands to generate.