diff options
author | Xin Li <delphij@google.com> | 2023-08-14 15:38:30 -0700 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2023-08-14 15:38:30 -0700 |
commit | bddf63953e111d742b591c1c0c7c34bcda8a51c7 (patch) | |
tree | 3a93128bff4b737b24b0c9581922c0b20410f0f4 /pw_log_tokenized/py/pw_log_tokenized/__init__.py | |
parent | ee890da55c82b95deca3518d5f3777e3d8ca9f0e (diff) | |
parent | fbb9890f8922aa55fde183655a0017e69127ea4b (diff) | |
download | pigweed-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__.py | 49 |
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: |