aboutsummaryrefslogtreecommitdiff
path: root/pw_log_tokenized/py/pw_log_tokenized/__init__.py
diff options
context:
space:
mode:
authorXin Li <delphij@google.com>2023-08-14 15:38:30 -0700
committerXin Li <delphij@google.com>2023-08-14 15:38:30 -0700
commitbddf63953e111d742b591c1c0c7c34bcda8a51c7 (patch)
tree3a93128bff4b737b24b0c9581922c0b20410f0f4 /pw_log_tokenized/py/pw_log_tokenized/__init__.py
parentee890da55c82b95deca3518d5f3777e3d8ca9f0e (diff)
parentfbb9890f8922aa55fde183655a0017e69127ea4b (diff)
downloadpigweed-tmp_amf_298295554.tar.gz
Merge Android U (ab/10368041)tmp_amf_298295554
Bug: 291102124 Merged-In: I10c41adb8fe3e126cfa4ff2f49b15863fff379de Change-Id: I66f7a6cccaafc173d3924dae62a736c6c53520c7
Diffstat (limited to 'pw_log_tokenized/py/pw_log_tokenized/__init__.py')
-rw-r--r--pw_log_tokenized/py/pw_log_tokenized/__init__.py49
1 files changed, 27 insertions, 22 deletions
diff --git a/pw_log_tokenized/py/pw_log_tokenized/__init__.py b/pw_log_tokenized/py/pw_log_tokenized/__init__.py
index d0cc1d14f..9fff100cc 100644
--- a/pw_log_tokenized/py/pw_log_tokenized/__init__.py
+++ b/pw_log_tokenized/py/pw_log_tokenized/__init__.py
@@ -13,9 +13,9 @@
# the License.
"""Tools for working with tokenized logs."""
-from dataclasses import dataclass
+from dataclasses import dataclass, asdict
import re
-from typing import Dict, Mapping
+from typing import Dict, Mapping, Iterator
def _mask(value: int, start: int, count: int) -> int:
@@ -23,33 +23,38 @@ def _mask(value: int, start: int, count: int) -> int:
return (value & (mask << start)) >> start
+@dataclass
class Metadata:
"""Parses the metadata payload used by pw_log_tokenized."""
- def __init__(self,
- value: int,
- *,
- log_bits: int = 3,
- line_bits: int = 11,
- flag_bits: int = 2,
- module_bits: int = 16) -> None:
- self.value = value
-
- self.log_level = _mask(value, 0, log_bits)
- self.line = _mask(value, log_bits, line_bits)
- self.flags = _mask(value, log_bits + line_bits, flag_bits)
- self.module_token = _mask(value, log_bits + line_bits + flag_bits,
- module_bits)
- def __repr__(self) -> str:
- return (f'{type(self).__name__}('
- f'log_level={self.log_level}, '
- f'line={self.line}, '
- f'flags={self.flags}, '
- f'module_token={self.module_token})')
+ value: int
+ log_bits: int = 3
+ line_bits: int = 11
+ flag_bits: int = 2
+ module_bits: int = 16
+
+ def __post_init__(self):
+ self.log_level = _mask(self.value, 0, self.log_bits)
+ self.line = _mask(self.value, self.log_bits, self.line_bits)
+ self.flags = _mask(
+ self.value, self.log_bits + self.line_bits, self.flag_bits
+ )
+ self.module_token = _mask(
+ self.value,
+ self.log_bits + self.line_bits + self.flag_bits,
+ self.module_bits,
+ )
+
+ def __iter__(self):
+ return iter(asdict(self).items())
+
+ def __dict__(self):
+ return asdict(self)
class FormatStringWithMetadata:
"""Parses metadata from a log format string with metadata fields."""
+
_FIELD_KEY = re.compile(r'■([a-zA-Z]\w*)♦', flags=re.ASCII)
def __init__(self, string: str) -> None: