Skip to content

Commit 226d4ec

Browse files
TatianaBezmenovaTatyana Bezmenova
andauthored
add exclude conversion formats (#22)
Co-authored-by: Tatyana Bezmenova <Tatyana.BEZMENOVA@raiffeisen.ru>
1 parent 951a274 commit 226d4ec

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

safe_s3_storage/file_validator.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class FileValidator:
4646
max_image_size_bytes: int = 50 * 1024 * 1024 # 50 MB
4747
image_conversion_format: ImageConversionFormat = ImageConversionFormat.webp
4848
image_quality: int = 85
49+
excluded_conversion_formats: list[str] | None = None
4950

5051
def _validate_mime_type(self, *, file_name: str, file_content: bytes) -> str:
5152
mime_type_prediction: typing.Final = Magika().identify_bytes(file_content)
@@ -71,10 +72,20 @@ def _validate_file_size(self, *, file_name: str, file_content: bytes, mime_type:
7172
)
7273
return content_size
7374

75+
def _should_convert_file(self, file_name: str) -> bool:
76+
if not self.excluded_conversion_formats:
77+
return True
78+
79+
_, extension = _split_file_base_name_and_extensions(file_name=file_name)
80+
return extension not in self.excluded_conversion_formats
81+
7482
def _convert_image(self, validated_file: ValidatedFile) -> ValidatedFile:
7583
if not _is_image(validated_file.mime_type):
7684
return validated_file
7785

86+
if not self._should_convert_file(validated_file.file_name):
87+
return validated_file
88+
7889
target_mime_type, target_extension = _IMAGE_CONVERSION_FORMAT_TO_MIME_TYPE_AND_EXTENSION_MAP[
7990
self.image_conversion_format
8091
]

tests/test_file_validator.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,3 +196,19 @@ async def test_antivirus_no_connection(self, faker: faker.Faker, png_file: bytes
196196
)
197197
with pytest.raises(KasperskyScanEngineConnectionStatusError):
198198
await kasper.scan_memory(file_name=faker.file_name(), file_content=png_file)
199+
200+
@pytest.mark.parametrize("image_conversion_format", list(ImageConversionFormat))
201+
async def test_excluded_conversion_formats(
202+
self, faker: faker.Faker, png_file: bytes, image_conversion_format: ImageConversionFormat
203+
) -> None:
204+
file_base_name: typing.Final = faker.pystr()
205+
file_extension: typing.Final = faker.file_extension()
206+
validated_file: typing.Final = await FileValidator(
207+
allowed_mime_types=["image/png"],
208+
image_conversion_format=image_conversion_format,
209+
excluded_conversion_formats=[file_extension],
210+
).validate_file(file_name=f"{file_base_name}.{file_extension}", file_content=png_file)
211+
212+
assert validated_file.file_name == f"{file_base_name}.{file_extension}"
213+
assert validated_file.file_content == png_file
214+
assert validated_file.file_size == len(validated_file.file_content)

0 commit comments

Comments
 (0)