From eb7ec9b5c6752fe2ca82e076dae7c0a206b3e91b Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Sun, 15 Dec 2019 21:12:25 -0800 Subject: [PATCH] added alpha version of exiftool_json_sidecar to export() --- osxphotos/__init__.py | 32 ++++++++++++++---- .../database/photos.db | Bin 5832704 -> 5832704 bytes 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/osxphotos/__init__.py b/osxphotos/__init__.py index 2361914b..9c876dde 100644 --- a/osxphotos/__init__.py +++ b/osxphotos/__init__.py @@ -1513,7 +1513,15 @@ class PhotoInfo: """ returns (latitude, longitude) as float in degrees or None """ return (self._latitude(), self._longitude()) - def export(self, dest, *filename, edited=False, overwrite=False, increment=True): + def export( + self, + dest, + *filename, + edited=False, + overwrite=False, + increment=True, + sidecar=False, + ): """ export photo """ """ first argument must be valid destination path (or exception raised) """ """ second argument (optional): name of picture; if not provided, will use current filename """ @@ -1521,10 +1529,12 @@ class PhotoInfo: """ if overwrite=True (default=False), will overwrite files if they alreay exist """ """ if increment=True (default=True), will increment file name until a non-existant name is found """ """ if overwrite=False and increment=False, export will fail if destination file already exists """ + """ if sidecar=True, will also write a json sidecar with EXIF data in format readable by exiftool """ + """ sidecar filename will be dest/filename.ext.json where ext is suffix of the image file (e.g. jpeg or jpg) """ """ returns the full path to the exported file """ - # TODO: find better way to do *args - # maybe dest, *filename? + # TODO: add this docs: + # ( for jpeg in *.jpeg; do exiftool -v -json=$jpeg.json $jpeg; done ) # check arguments and get destination path and filename (if provided) if filename and len(filename) > 2: @@ -1540,7 +1550,7 @@ class PhotoInfo: if filename and len(filename) == 1: # second arg is filename of picture - filename = filename[0] + filename = filename[0] else: # no filename provided so use the default # if edited file requested, use filename but add _edited @@ -1553,9 +1563,7 @@ class PhotoInfo: ) edited_name = Path(self.path_edited()).name edited_suffix = Path(edited_name).suffix - filename = ( - Path(self.filename()).stem + "_edited" + edited_suffix - ) + filename = Path(self.filename()).stem + "_edited" + edited_suffix else: filename = self.filename() @@ -1624,6 +1632,16 @@ class PhotoInfo: ) raise e + if sidecar: + logging.debug("writing exiftool_json_sidecar") + sidecar_filename = f"{dest}.json" + json_sidecar_str = self._exiftool_json_sidecar() + try: + self._write_sidecar_car(sidecar_filename,json_sidecar_str) + except Exception as e: + logging.critical(f"Error writing json sidecar to {sidecar_filename}") + raise e + return str(dest) def _exiftool_json_sidecar(self): diff --git a/tests/Test-10.12.6.photoslibrary/database/photos.db b/tests/Test-10.12.6.photoslibrary/database/photos.db index 63f748fd12bad2b5ea528a7c7d28d4af9218ae13..6bd8c5bf82cacd943ee9f72bbe05ec1751243e66 100644 GIT binary patch delta 396 zcmX}bIZxAJ0KnnC1yMmxPb`O=UR93La)}@mleicX6E|i@oqUp~T>h0V|GS@Q-A$#!X6nDjje~41?Cv2!(o!R}az^Uptelhc zQZEg1K^mn=nx#crrA;o%CAlnDegcDXJY>5xw8l5V*nJ<=Uhv-9y=C?qEzOK(HXP97gLgL2Es1r}}RI3N+>i?gMh3!--tf!7;GrOgcu)Tu>NlSw?$_Z(blX6N< z%NaQ<8Ocgc^3p5?X^~cGlXmHlPB|xCa$bsZLAs?!dZkY;$|dQS0U4CbG9*`ISgy)7 zDam!YAvfig+?G2sB6np}#^j#dmk07t9?7^&$fQikw9Lq?JeIP|$-FGcqCAnOvLws0 zBG2TxtjY^{DX(NrUdtP)d?W5ohqmN!t1=cEcSdWi_0nwo9$J$9kCnHfVXIcCm&@@e zG}kBQ;-8SOchAS)A-DG_cbKka_deu*rE8hw$71|i44ujQ_4qD?j^yV?TneE*>Dr8c Gzx)FShKMNu