Skip to content

Commit 511dcfd

Browse files
committed
Find the correct Reader/Writer independently of the file extension case
1 parent 587325c commit 511dcfd

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

can/io/logger.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def __new__(
7171
)
7272
Logger.fetched_plugins = True
7373

74-
suffix = pathlib.PurePath(filename).suffix
74+
suffix = pathlib.PurePath(filename).suffix.lower()
7575
try:
7676
return Logger.message_writers[suffix](filename, *args, **kwargs)
7777
except KeyError:

can/io/player.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def __new__(cls, filename: "can.typechecking.StringPathLike", *args, **kwargs):
7070
)
7171
LogReader.fetched_plugins = True
7272

73-
suffix = pathlib.PurePath(filename).suffix
73+
suffix = pathlib.PurePath(filename).suffix.lower()
7474
try:
7575
return LogReader.message_readers[suffix](filename, *args, **kwargs)
7676
except KeyError:

test/logformats_test.py

+30
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,36 @@
3636
logging.basicConfig(level=logging.DEBUG)
3737

3838

39+
class ReaderWriterExtensionTest(unittest.TestCase):
40+
message_writers_and_readers = {}
41+
for suffix, writer in can.Logger.message_writers.items():
42+
message_writers_and_readers[suffix] = (
43+
writer,
44+
can.LogReader.message_readers.get(suffix),
45+
)
46+
47+
def test_extension_matching(self):
48+
for suffix, (writer, reader) in self.message_writers_and_readers.items():
49+
suffix_variants = [
50+
suffix.upper(),
51+
suffix.lower(),
52+
"".join([c.upper() if i % 2 else c for i, c in enumerate(suffix)]),
53+
]
54+
for suffix_variant in suffix_variants:
55+
tmp_file = tempfile.NamedTemporaryFile(
56+
suffix=suffix_variant, delete=False
57+
)
58+
tmp_file.close()
59+
try:
60+
with can.Logger(tmp_file.name) as logger:
61+
assert type(logger) == writer
62+
if reader is not None:
63+
with can.LogReader(tmp_file.name) as player:
64+
assert type(player) == reader
65+
finally:
66+
os.remove(tmp_file.name)
67+
68+
3969
class ReaderWriterTest(unittest.TestCase, ComparingMessagesTestCase, metaclass=ABCMeta):
4070
"""Tests a pair of writer and reader by writing all data first and
4171
then reading all data and checking if they could be reconstructed

0 commit comments

Comments
 (0)