Skip to content

Commit 2d6e996

Browse files
authored
Trc file support (#1217)
* Added file for implementation of trc file read and write * Added trc file header template * Added link where to lookup the trc file format description * Add trc reader and writer to backends * Add example trace file as conversion from asc log * Add TRCWriter and TRCReader to can package * Basic header extraction in reader * Implement read of file version * Remove useless format string * Implement basic message parsing * Move message parsing to separate function * Implement parse of first message * Handle none rx messages * Handle empty files * Add test method for trc files * Format code with black * Implement stop at end of log file * Implement basic write of header version 2.1 * Add newline after header * Implement write of messages * Enable test for trace file writing * Add test files for different pcan trace file versions * Use binary mode for write to ensure correct line ending on all platforms * Add handler for file write * Move some header lines to specific write function * Move lines to function * Move write of file header to class * Use new function for better code readability * Add enum for file versions * Handle text io streams correctly * send line ending setting to logger * Add check for file version in writer * Add TRCFileVersion as export * Add test for wrong file version * Add format and header for version 1 trace file format * Use correct format according to selected version * Introduce handler method _parse_line * Skip empty lines * Add check for type before eval message * Print info on unsupported types * Add test for new test data files trc format * Implement file version reading * More flexible implementation of line parsing for different versions * Implement Version 1 trace file parsing * Add test case for Version 1.0 trc file * Implement parsing for version 1.1 trace files * Add test for version 1.1 reading * Add test case for version 1.0 trace files * Avoid multi test runs with same input and output by separate generic tests from file version tests * Correct first timestamp * Add type information for file attribute * Add type definitions for init function * Add type for first_timestamp * Add info for return types * Drop type casting for file. Should already be done in init * Add type info * Always use text read write * Update types for initialization * Use text io mode by default
1 parent b0a4400 commit 2d6e996

11 files changed

Lines changed: 637 additions & 0 deletions

can/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
from .io import CanutilsLogReader, CanutilsLogWriter
4242
from .io import CSVWriter, CSVReader
4343
from .io import SqliteWriter, SqliteReader
44+
from .io import TRCReader, TRCWriter, TRCFileVersion
4445

4546
from .broadcastmanager import (
4647
CyclicSendTaskABC,

can/io/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414
from .csv import CSVWriter, CSVReader
1515
from .sqlite import SqliteReader, SqliteWriter
1616
from .printer import Printer
17+
from .trc import TRCReader, TRCWriter, TRCFileVersion

can/io/logger.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from .csv import CSVWriter
2424
from .sqlite import SqliteWriter
2525
from .printer import Printer
26+
from .trc import TRCWriter
2627
from ..typechecking import StringPathLike, FileLike, AcceptedIOType
2728

2829

@@ -36,6 +37,7 @@ class Logger(MessageWriter): # pylint: disable=abstract-method
3637
* .csv: :class:`can.CSVWriter`
3738
* .db: :class:`can.SqliteWriter`
3839
* .log :class:`can.CanutilsLogWriter`
40+
* .trc :class:`can.TRCWriter`
3941
* .txt :class:`can.Printer`
4042
4143
Any of these formats can be used with gzip compression by appending
@@ -58,6 +60,7 @@ class Logger(MessageWriter): # pylint: disable=abstract-method
5860
".csv": CSVWriter,
5961
".db": SqliteWriter,
6062
".log": CanutilsLogWriter,
63+
".trc": TRCWriter,
6164
".txt": Printer,
6265
}
6366

can/io/player.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from .canutils import CanutilsLogReader
1717
from .csv import CSVReader
1818
from .sqlite import SqliteReader
19+
from .trc import TRCReader
1920
from ..typechecking import StringPathLike, FileLike, AcceptedIOType
2021
from ..message import Message
2122

@@ -30,6 +31,7 @@ class LogReader(MessageReader):
3031
* .csv
3132
* .db
3233
* .log
34+
* .trc
3335
3436
Gzip compressed files can be used as long as the original
3537
files suffix is one of the above (e.g. filename.asc.gz).
@@ -56,6 +58,7 @@ class LogReader(MessageReader):
5658
".csv": CSVReader,
5759
".db": SqliteReader,
5860
".log": CanutilsLogReader,
61+
".trc": TRCReader,
5962
}
6063

6164
@staticmethod

0 commit comments

Comments
 (0)