mime types

This commit is contained in:
2024-01-13 20:06:04 +01:00
parent 892df0144e
commit c21167f941
5 changed files with 38 additions and 43 deletions

View File

@@ -5,3 +5,4 @@ progressbar==2.5
virtualenv==20.25.* virtualenv==20.25.*
requests==2.31.* requests==2.31.*
filetype>=1.0.7 filetype>=1.0.7
rawpy==0.19.*

View File

@@ -13,16 +13,6 @@ picture_formats = ["JPG", "JPEG", "PNG", "TIFF"]
key_words = ["DateTime", "Make"] key_words = ["DateTime", "Make"]
def check_file_type(path:str):
# file_type = magic.from_file(mime=True, filename=path)
file_type = ""
if filetype.is_image(path):
file_type = "image"
elif filetype.is_video(path):
file_type = "video"
return MimeTypes(file_type)
def is_file_video(path:str): def is_file_video(path:str):
mime = magic.Magic(mime=True) mime = magic.Magic(mime=True)
file = mime.from_file(path) file = mime.from_file(path)
@@ -38,16 +28,15 @@ def is_file_picture(path:str):
def get_image_meta_data(image_path): def get_image_meta_data(image_path):
image_extension = str(image_path).split("/")[-1].split(".") # image_extension = str(image_path).split("/")[-1].split(".")
# TODO: Sort out videos # TODO: Sort out videos
if is_file_video(path=image_path): return False mime = MimeTypes(file_path=image_path)
# if not is_file_picture(path=image_path): return False if mime.is_video or mime.is_unsupported_file_type: return False
img = Image.open(f"{image_path}") img = Image.open(f"{image_path}")
values = [] values = []
for tag, text in img.getexif().items(): for tag, text in img.getexif().items():
if tag in ExifTags.TAGS: if tag in ExifTags.TAGS: values.append([ExifTags.TAGS[tag], str(text)])
if image_extension[1].upper() in picture_formats:
values.append(ExifTags.TAGS[tag] + "|" + str(text))
return filter_date_and_make(meta_tags=filter_data(value=values), image_path=image_path) return filter_date_and_make(meta_tags=filter_data(value=values), image_path=image_path)
@@ -57,10 +46,10 @@ def filter_date_and_make(meta_tags:list, image_path):
year = None year = None
time = None time = None
print(meta_tags) print(meta_tags)
make = str(meta_tags[1]).split("|")[1] make = meta_tags[1][1]
image_name = str(image_path).split("/")[-1] image_name = str(image_path).split("/")[-1]
_date = str(meta_tags[0]).split("|") _date = meta_tags[0]
time = _date[1].split(" ")[1] time = _date[1].split(" ")[1]
_date = _date[1].split(" ")[0].split(":") _date = _date[1].split(" ")[0].split(":")
day = int(_date[2]) day = int(_date[2])
@@ -84,7 +73,7 @@ def filter_data(value):
value_return = [] value_return = []
for k in key_words: for k in key_words:
for v in value: for v in value:
temp = v.split("|") temp = v
if temp[0] == k: if temp[0] == k:
value_return.append(v) value_return.append(v)
return value_return return value_return

View File

@@ -1,14 +1,19 @@
class MimeTypes: import filetype
def __init__(self, file_type): import rawpy
self.image = False
self.video = False
self.unsupported_file_type = False
self.__proceed(file_type)
def __proceed(self, file_type):
if file_type == "image": class MimeTypes:
self.image = True def __init__(self, file_path):
elif file_type == "video": self.is_image = False
self.video = True self.is_video = False
self.is_raw = False
self.is_unsupported_file_type = False
self.__proceed(file_path)
def __proceed(self, file_path):
if filetype.is_image(file_path):
self.is_image = True
elif filetype.is_video(file_path):
self.is_video = True
else: else:
self.unsupported_file_type = True self.is_unsupported_file_type = True

Binary file not shown.

View File

@@ -5,20 +5,20 @@ from src.mime_types import MimeTypes
class TestMimeTypes(unittest.TestCase): class TestMimeTypes(unittest.TestCase):
def test_mime_type_image(self): def test_mime_type_image(self):
mime_type = MimeTypes(file_type="image") mime_type = MimeTypes(file_path="tests/test_files/test_image_001.JPG")
assert mime_type.image assert mime_type.is_image
assert not mime_type.video assert not mime_type.is_video
assert not mime_type.unsupported_file_type assert not mime_type.is_unsupported_file_type
def test_mime_type_video(self): def test_mime_type_video(self):
mime_type = MimeTypes(file_type="video") mime_type = MimeTypes(file_path="tests/test_files/test_video.mp4")
assert not mime_type.image assert not mime_type.is_image
assert mime_type.video assert mime_type.is_video
assert not mime_type.unsupported_file_type assert not mime_type.is_unsupported_file_type
def test_mime_type_unsupported_file_type(self): def test_mime_type_unsupported_file_type(self):
mime_type = MimeTypes(file_type="not_a_valid_file_type") mime_type = MimeTypes(file_path="tests/test_mime_types.py")
assert not mime_type.image assert not mime_type.is_image
assert not mime_type.video assert not mime_type.is_video
assert mime_type.unsupported_file_type assert mime_type.is_unsupported_file_type