Create exif_json and start mapping dates

This commit is contained in:
Aloïs Micard 2024-11-14 21:25:39 +01:00
parent 6bea2c0043
commit d77f655acf
4 changed files with 49 additions and 18 deletions

View file

@ -1,28 +1,13 @@
import hashlib import hashlib
import json import json
import os import os
import subprocess
import sys import sys
from pathlib import Path from pathlib import Path
from platformdirs import user_data_dir from platformdirs import user_data_dir
from pymongo import MongoClient from pymongo import MongoClient
from exif_json import execute_exiftool
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
def _load_pictures_cache() -> dict: def _load_pictures_cache() -> dict:
@ -69,7 +54,7 @@ if __name__ == '__main__':
print(f'Uploading {filename}') print(f'Uploading {filename}')
picture_metadata = _execute_exiftool(filename) picture_metadata = execute_exiftool(filename)
metadata_pictures.append(picture_metadata) metadata_pictures.append(picture_metadata)
# Append MongoDB identifier # Append MongoDB identifier

37
exif_json/__init__.py Normal file
View file

@ -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

8
exif_json/__main__.py Normal file
View file

@ -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]))

View file

@ -1,2 +1,3 @@
pymongo==4.10.1 pymongo==4.10.1
platformdirs==4.3.6 platformdirs==4.3.6
rich==13.9.4