diff --git a/osxphotos/_version.py b/osxphotos/_version.py index 030fd92d..c6009562 100644 --- a/osxphotos/_version.py +++ b/osxphotos/_version.py @@ -1,3 +1,3 @@ """ version info """ -__version__ = "0.28.15" +__version__ = "0.28.16" diff --git a/osxphotos/exiftool.py b/osxphotos/exiftool.py index b1928a52..3fad1e5d 100644 --- a/osxphotos/exiftool.py +++ b/osxphotos/exiftool.py @@ -10,7 +10,7 @@ import logging import os import subprocess import sys -from functools import lru_cache # pylint: disable=syntax-error +from functools import lru_cache # pylint: disable=syntax-error from .utils import _debug @@ -232,20 +232,27 @@ class ExifTool: ver = self.run_commands("-ver", no_file=True) return ver.decode("utf-8") - def json(self): - """ return JSON dictionary from exiftool as dict """ + def as_dict(self): + """ return dictionary of all EXIF tags and values from exiftool + returns empty dict if no tags + """ json_str = self.run_commands("-json") if json_str: - return json.loads(json_str) + exifdict = json.loads(json_str) + return exifdict[0] else: - return None + return dict() + + def json(self): + """ returns JSON string containing all EXIF tags and values from exiftool """ + json_str = self.run_commands("-json") + return json_str def _read_exif(self): """ read exif data from file """ - json = self.json() - self.data = {k: v for k, v in json[0].items()} + data = self.as_dict() + self.data = {k: v for k, v in data.items()} def __str__(self): str_ = f"file: {self.file}\nexiftool: {self._exiftoolproc._exiftool}" return str_ - diff --git a/tests/test_exiftool.py b/tests/test_exiftool.py index f5073064..878e7db0 100644 --- a/tests/test_exiftool.py +++ b/tests/test_exiftool.py @@ -161,13 +161,21 @@ def test_exiftoolproc_exiftool(): assert exif1._exiftoolproc.exiftool == osxphotos.exiftool.get_exiftool_path() +def test_as_dict(): + import osxphotos.exiftool + + exif1 = osxphotos.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD) + exifdata = exif1.as_dict() + assert exifdata["XMP:TagsList"] == "wedding" + + def test_json(): import osxphotos.exiftool import json exif1 = osxphotos.exiftool.ExifTool(TEST_FILE_ONE_KEYWORD) - json1 = exif1.json() - assert json1[0]["XMP:TagsList"] == "wedding" + exifdata = json.loads(exif1.json()) + assert exifdata[0]["XMP:TagsList"] == "wedding" def test_str():