Skip to content

Commit ec11497

Browse files
authored
Fix error on text file not containing us-ascii on first line. (gh-440) (#486)
Closes gh-440
1 parent 3acb533 commit ec11497

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

elodie/media/text.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,13 @@ def parse_metadata_line(self):
145145
if source is None:
146146
return None
147147

148-
with open(source, 'r') as f:
149-
first_line = f.readline().strip()
148+
try:
149+
with open(source, 'r') as f:
150+
first_line = f.readline().strip()
151+
except UnicodeDecodeError:
152+
# Handle non-UTF-8 files by reading with error handling
153+
with open(source, 'r', encoding='utf-8', errors='ignore') as f:
154+
first_line = f.readline().strip()
150155

151156
try:
152157
parsed_json = loads(first_line)

elodie/tests/files/cp1252.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{"title":"Test � file"}
2+
This is a CP1252 encoded file with special character �

elodie/tests/media/text_test.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,3 +316,16 @@ def test_set_original_name_with_arg():
316316

317317
assert metadata['original_name'] is None, metadata['original_name']
318318
assert metadata_updated['original_name'] == new_name, metadata_updated['original_name']
319+
320+
def test_parse_metadata_line_with_non_utf8_encoding():
321+
# Test for gh-440: Crash on text file NOT containing us-ascii or utf-8 in first line
322+
text = Text(helper.get_file('cp1252.txt'))
323+
324+
# This should not raise a UnicodeDecodeError
325+
# The method should handle non-UTF-8 files gracefully
326+
text.parse_metadata_line()
327+
328+
# Should be able to get metadata without crashing
329+
metadata = text.get_metadata()
330+
assert metadata is not None
331+
assert metadata['mime_type'] == 'text/plain'

0 commit comments

Comments
 (0)