Skip to content

Commit 951a274

Browse files
authored
txt file processing fix (#20)
1 parent c615aca commit 951a274

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

safe_s3_storage/file_validator.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ class FileValidator:
4949

5050
def _validate_mime_type(self, *, file_name: str, file_content: bytes) -> str:
5151
mime_type_prediction: typing.Final = Magika().identify_bytes(file_content)
52-
if mime_type_prediction.dl.extensions:
52+
if mime_type_prediction.output.is_text and file_name.endswith(".txt"):
53+
mime_type = "text/plain"
54+
elif mime_type_prediction.dl.extensions:
5355
mime_type = mime_type_prediction.dl.mime_type
5456
else:
5557
mime_type = mime_type_prediction.output.mime_type

tests/test_file_validator.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,19 @@ async def test_ok_image(
129129
== _IMAGE_CONVERSION_FORMAT_TO_MIME_TYPE_AND_EXTENSION_MAP[image_conversion_format][0]
130130
)
131131

132+
@pytest.mark.parametrize("file_content", ["'", "test'", "abracadabra", "python script"])
133+
async def test_txt_file_validate(self, file_content: str) -> None:
134+
file_name: typing.Final = "file_name.txt"
135+
136+
validated_file: typing.Final = await FileValidator(allowed_mime_types=["text/plain"]).validate_file(
137+
file_name=file_name, file_content=file_content.encode()
138+
)
139+
140+
assert validated_file.file_name == file_name
141+
assert validated_file.file_content == file_content.encode()
142+
assert validated_file.file_size == len(file_content)
143+
assert validated_file.mime_type == "text/plain"
144+
132145
@pytest.mark.parametrize("binary", [True, False])
133146
async def test_ok_not_image(self, faker: faker.Faker, binary: bool) -> None:
134147
file_name: typing.Final = faker.file_name()

0 commit comments

Comments
 (0)