diff --git a/requirements.txt b/requirements.txt index b6e57e6..94b7ba4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ progressbar==2.5 virtualenv==20.25.* requests==2.31.* filetype>=1.0.7 +rawpy==0.19.* \ No newline at end of file diff --git a/src/meta_data_handler.py b/src/meta_data_handler.py index 590c012..54ab19b 100644 --- a/src/meta_data_handler.py +++ b/src/meta_data_handler.py @@ -13,16 +13,6 @@ picture_formats = ["JPG", "JPEG", "PNG", "TIFF"] 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): mime = magic.Magic(mime=True) file = mime.from_file(path) @@ -38,16 +28,15 @@ def is_file_picture(path:str): 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 - if is_file_video(path=image_path): return False - # if not is_file_picture(path=image_path): return False + mime = MimeTypes(file_path=image_path) + if mime.is_video or mime.is_unsupported_file_type: return False + img = Image.open(f"{image_path}") values = [] for tag, text in img.getexif().items(): - if tag in ExifTags.TAGS: - if image_extension[1].upper() in picture_formats: - values.append(ExifTags.TAGS[tag] + "|" + str(text)) + if tag in ExifTags.TAGS: values.append([ExifTags.TAGS[tag], str(text)]) 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 time = None print(meta_tags) - make = str(meta_tags[1]).split("|")[1] + make = meta_tags[1][1] image_name = str(image_path).split("/")[-1] - _date = str(meta_tags[0]).split("|") + _date = meta_tags[0] time = _date[1].split(" ")[1] _date = _date[1].split(" ")[0].split(":") day = int(_date[2]) @@ -84,7 +73,7 @@ def filter_data(value): value_return = [] for k in key_words: for v in value: - temp = v.split("|") + temp = v if temp[0] == k: value_return.append(v) return value_return diff --git a/src/mime_types.py b/src/mime_types.py index fd2fad9..5f2c353 100644 --- a/src/mime_types.py +++ b/src/mime_types.py @@ -1,14 +1,19 @@ -class MimeTypes: - def __init__(self, file_type): - self.image = False - self.video = False - self.unsupported_file_type = False - self.__proceed(file_type) +import filetype +import rawpy - def __proceed(self, file_type): - if file_type == "image": - self.image = True - elif file_type == "video": - self.video = True + +class MimeTypes: + def __init__(self, file_path): + self.is_image = False + 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: - self.unsupported_file_type = True + self.is_unsupported_file_type = True diff --git a/tests/test_files/test_video.mp4 b/tests/test_files/test_video.mp4 new file mode 100644 index 0000000..f2c1c8f Binary files /dev/null and b/tests/test_files/test_video.mp4 differ diff --git a/tests/test_mime_types.py b/tests/test_mime_types.py index f07890d..4dc3992 100644 --- a/tests/test_mime_types.py +++ b/tests/test_mime_types.py @@ -5,20 +5,20 @@ from src.mime_types import MimeTypes class TestMimeTypes(unittest.TestCase): def test_mime_type_image(self): - mime_type = MimeTypes(file_type="image") - assert mime_type.image - assert not mime_type.video - assert not mime_type.unsupported_file_type + mime_type = MimeTypes(file_path="tests/test_files/test_image_001.JPG") + assert mime_type.is_image + assert not mime_type.is_video + assert not mime_type.is_unsupported_file_type def test_mime_type_video(self): - mime_type = MimeTypes(file_type="video") - assert not mime_type.image - assert mime_type.video - assert not mime_type.unsupported_file_type + mime_type = MimeTypes(file_path="tests/test_files/test_video.mp4") + assert not mime_type.is_image + assert mime_type.is_video + assert not mime_type.is_unsupported_file_type def test_mime_type_unsupported_file_type(self): - mime_type = MimeTypes(file_type="not_a_valid_file_type") - assert not mime_type.image - assert not mime_type.video - assert mime_type.unsupported_file_type + mime_type = MimeTypes(file_path="tests/test_mime_types.py") + assert not mime_type.is_image + assert not mime_type.is_video + assert mime_type.is_unsupported_file_type