From e6c59507c466442e43dcabaee42439ab9e838008 Mon Sep 17 00:00:00 2001 From: DasMoorhuhn Date: Thu, 21 Dec 2023 13:36:13 +0100 Subject: [PATCH] wqadded new way to get mime type --- .gitlab-ci.yml | 2 +- requirements.txt | 1 + src/meta_data_handler.py | 14 +++++++++++++- src/mime_types.py | 14 ++++++++++++++ tests/test_mime_types.py | 24 ++++++++++++++++++++++++ 5 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src/mime_types.py create mode 100644 tests/test_mime_types.py diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 73f6fb2..f2d4434 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ pytest: image: python:3.12-alpine script: - sh tests/start_tests_gitlab.sh - - sed -i "s#/builds/DasMoorhuhn/autopicture-v3/src#${CI_PROJECT_DIR}#g" coverage.xml + # - sed -i "s#/builds/DasMoorhuhn/autopicture-v3/src#${CI_PROJECT_DIR}#g" coverage.xml coverage: '/Code coverage: \d+(?:\.\d+)?/' artifacts: name: "$CI_JOB_NAME" diff --git a/requirements.txt b/requirements.txt index 52779a4..0563f9b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,7 @@ python-magic==0.4.* progressbar==2.5 virtualenv==20.25.* requests==2.31.* +filetype>=1.0.7 pytest==7.4.* pytest-cov==4.1.* pytest-factoryboy==2.5.* \ No newline at end of file diff --git a/src/meta_data_handler.py b/src/meta_data_handler.py index 14c2252..590c012 100644 --- a/src/meta_data_handler.py +++ b/src/meta_data_handler.py @@ -1,17 +1,28 @@ import magic import sys - +import filetype from PIL import Image from PIL import ExifTags sys.path.append("../") from src.exif_data import ExifData +from src.mime_types import MimeTypes video_formats = ["MP4", "MOV", "M4V", "MKV", "AVI", "WMV", "AVCHD", "WEBM", "MPEG"] 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) @@ -30,6 +41,7 @@ def get_image_meta_data(image_path): 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 img = Image.open(f"{image_path}") values = [] for tag, text in img.getexif().items(): diff --git a/src/mime_types.py b/src/mime_types.py new file mode 100644 index 0000000..fd2fad9 --- /dev/null +++ b/src/mime_types.py @@ -0,0 +1,14 @@ +class MimeTypes: + def __init__(self, file_type): + self.image = False + self.video = False + self.unsupported_file_type = False + self.__proceed(file_type) + + def __proceed(self, file_type): + if file_type == "image": + self.image = True + elif file_type == "video": + self.video = True + else: + self.unsupported_file_type = True diff --git a/tests/test_mime_types.py b/tests/test_mime_types.py new file mode 100644 index 0000000..f07890d --- /dev/null +++ b/tests/test_mime_types.py @@ -0,0 +1,24 @@ +import unittest + +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 + + 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 + + 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 +