Match file extensions case-insensitively in filter_files_content_types

This commit is contained in:
Sean Kim 2026-07-13 22:39:51 -07:00
parent 0aecac867d
commit de4feda3f6
2 changed files with 9 additions and 1 deletions

View File

@ -236,7 +236,7 @@ def filter_files_content_types(files: list[str], content_types: List[Literal["im
global extension_mimetypes_cache
result = []
for file in files:
extension = file.split('.')[-1]
extension = file.split('.')[-1].lower()
if extension not in extension_mimetypes_cache:
mime_type, _ = mimetypes.guess_type(file, strict=False)
if not mime_type:

View File

@ -51,6 +51,14 @@ def test_categorizes_all_uniquely(mock_dir, file_extensions, patched_mimetype_ca
assert len(filtered_files) == len(extensions)
def test_categorizes_uppercase_extensions(patched_mimetype_cache):
# Extensions must be matched case-insensitively (like filter_files_extensions),
# so an uppercase 3D-model extension isn't dropped just because the mimetype
# cache keys and the OS mimetypes DB are lowercase.
files = ["sample_model.FBX", "sample_model.fbx"]
assert filter_files_content_types(files, ["model"]) == ["sample_model.FBX", "sample_model.fbx"]
def test_handles_bad_extensions():
files = ["file1.txt", "file2.py", "file3.example", "file4.pdf", "file5.ini", "file6.doc", "file7.md"]
assert filter_files_content_types(files, ["image", "audio", "video"]) == []