diff --git a/logtools/log/sources/parse/chronicles_raw_source.py b/logtools/log/sources/parse/chronicles_raw_source.py index 15789ca..e36cd5c 100644 --- a/logtools/log/sources/parse/chronicles_raw_source.py +++ b/logtools/log/sources/parse/chronicles_raw_source.py @@ -14,9 +14,9 @@ _LOG_LINE = re.compile( r'count=(?P\d+)$' ) -_TOPICS = re.compile(r'((\w+=("[\w\s]+"|\S+) )+)?\w+=("[\w\s]+"|\S+)$') +_TOPICS = re.compile(r'((\w+=("[^"]+"|\S+) )+)?\w+=("[^"]+"|\S+)$') -_TOPICS_KV = re.compile(r'(?P\w+)=(?P"[\w\s]+"|\S+)') +_TOPICS_KV = re.compile(r'(?P\w+)=(?P"[^"]+"|\S+)') class LogLevel(Enum): diff --git a/logtools/log/sources/parse/tests/test_chronicles_raw_source.py b/logtools/log/sources/parse/tests/test_chronicles_raw_source.py index b1d5ed2..c0db6c5 100644 --- a/logtools/log/sources/parse/tests/test_chronicles_raw_source.py +++ b/logtools/log/sources/parse/tests/test_chronicles_raw_source.py @@ -50,3 +50,21 @@ def test_should_parse_chronicles_fields(): 'type': 'WantBlock', 'items': '1', } + + +def test_should_parse_topics_with_non_alphanumeric_characters(): + source = ChroniclesRawSource( + StringLogSource( + lines='WRN 2024-02-02 20:38:47.316+00:00 a message topics="codex pendingblocks" address="cid: zDx*QP4zx9" ' + 'count=10641' + ) + ).__iter__() + + line = next(source) + + assert line.message == "a message" + assert line.count == 10641 + assert line.fields == { + 'topics': '"codex pendingblocks"', + 'address': '"cid: zDx*QP4zx9"', + }