diff --git a/exif_database/__main__.py b/exif_database/__main__.py index 3f2aaf1..3f6ffdb 100644 --- a/exif_database/__main__.py +++ b/exif_database/__main__.py @@ -1,28 +1,13 @@ import hashlib import json import os -import subprocess import sys from pathlib import Path from platformdirs import user_data_dir from pymongo import MongoClient - -def _execute_exiftool(img_file: str) -> dict: - res = subprocess.run( - ['exiftool', img_file], - capture_output=True, - text=True, - ) - - exif_metadata = {} - - for line in res.stdout.splitlines(): - parts = line.split(':', 1) - exif_metadata[parts[0].strip().lower().replace(' ', '_')] = parts[1].strip() - - return exif_metadata +from exif_json import execute_exiftool def _load_pictures_cache() -> dict: @@ -69,7 +54,7 @@ if __name__ == '__main__': print(f'Uploading {filename}') - picture_metadata = _execute_exiftool(filename) + picture_metadata = execute_exiftool(filename) metadata_pictures.append(picture_metadata) # Append MongoDB identifier diff --git a/exif_json/__init__.py b/exif_json/__init__.py new file mode 100644 index 0000000..0c66ec2 --- /dev/null +++ b/exif_json/__init__.py @@ -0,0 +1,37 @@ +import subprocess +from datetime import datetime + +_file_date_format = "%Y:%m:%d %H:%M:%S%z" +_original_date_format = "%Y:%m:%d %H:%M:%S.%f%z" + + +def execute_exiftool(img_file: str) -> dict: + res = subprocess.run( + ['exiftool', img_file], + capture_output=True, + text=True, + ) + + if res.returncode != 0: + raise Exception(res.stderr) + + exif_metadata = {} + + for line in res.stdout.splitlines(): + parts = line.split(':', 1) + exif_metadata[parts[0].strip().lower().replace(' ', '_')] = parts[1].strip() + + # Handle dates + date_fields = { + 'file_modification_date/time': _file_date_format, + 'file_access_date/time': _file_date_format, + 'file_inode_change_date/time': _file_date_format, + 'date/time_original': _original_date_format, + 'create_date': _original_date_format, + } + + for (date_field, date_format) in date_fields.items(): + if date_field in exif_metadata: + exif_metadata[date_field] = datetime.strptime(exif_metadata[date_field], date_format) + + return exif_metadata diff --git a/exif_json/__main__.py b/exif_json/__main__.py new file mode 100644 index 0000000..6cdd4a4 --- /dev/null +++ b/exif_json/__main__.py @@ -0,0 +1,8 @@ +import sys + +from rich import print + +from exif_json import execute_exiftool + +if __name__ == '__main__': + print(execute_exiftool(sys.argv[1])) diff --git a/requirements.txt b/requirements.txt index 268fb2f..76a7d51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pymongo==4.10.1 -platformdirs==4.3.6 \ No newline at end of file +platformdirs==4.3.6 +rich==13.9.4 \ No newline at end of file