diff --git a/osxphotos/_version.py b/osxphotos/_version.py
index 22cb5725..01b3809f 100644
--- a/osxphotos/_version.py
+++ b/osxphotos/_version.py
@@ -1,3 +1,3 @@
""" version info """
-__version__ = "0.33.7"
+__version__ = "0.33.8"
diff --git a/osxphotos/photoinfo/_photoinfo_export.py b/osxphotos/photoinfo/_photoinfo_export.py
index 945d7f28..28f4b02e 100644
--- a/osxphotos/photoinfo/_photoinfo_export.py
+++ b/osxphotos/photoinfo/_photoinfo_export.py
@@ -688,7 +688,7 @@ def export2(
if sidecar_json:
logging.debug("writing exiftool_json_sidecar")
- sidecar_filename = dest.parent / pathlib.Path(f"{dest.stem}.json")
+ sidecar_filename = dest.parent / pathlib.Path(f"{dest.stem}{dest.suffix}.json")
sidecar_str = self._exiftool_json_sidecar(
use_albums_as_keywords=use_albums_as_keywords,
use_persons_as_keywords=use_persons_as_keywords,
@@ -704,12 +704,13 @@ def export2(
if sidecar_xmp:
logging.debug("writing xmp_sidecar")
- sidecar_filename = dest.parent / pathlib.Path(f"{dest.stem}.xmp")
+ sidecar_filename = dest.parent / pathlib.Path(f"{dest.stem}{dest.suffix}.xmp")
sidecar_str = self._xmp_sidecar(
use_albums_as_keywords=use_albums_as_keywords,
use_persons_as_keywords=use_persons_as_keywords,
keyword_template=keyword_template,
description_template=description_template,
+ extension=dest.suffix[1:] if dest.suffix else None,
)
if not dry_run:
try:
@@ -1120,6 +1121,7 @@ def _xmp_sidecar(
use_persons_as_keywords=False,
keyword_template=None,
description_template=None,
+ extension=None
):
""" returns string for XMP sidecar
use_albums_as_keywords: treat album names as keywords
@@ -1129,11 +1131,10 @@ def _xmp_sidecar(
xmp_template = Template(filename=os.path.join(_TEMPLATE_DIR, _XMP_TEMPLATE_NAME))
- if self.path is not None:
- extension = pathlib.Path(self.path).suffix[1:].upper()
- else:
- extension = None
-
+ if extension is None:
+ extension = pathlib.Path(self.original_filename)
+ extension = extension.suffix[1:] if extension.suffix else None
+
if description_template is not None:
description = self.render_template(
description_template, expand_inplace=True, inplace_sep=", "
diff --git a/tests/test_cli.py b/tests/test_cli.py
index b9d672b9..ae5bbae3 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -202,7 +202,7 @@ CLI_EXPORT_BY_DATE_NEED_TOUCH_UUID = [
CLI_EXPORT_BY_DATE_NEED_TOUCH_TIMES = [1538165227, 1539436692]
CLI_EXPORT_BY_DATE = ["2018/09/28/Pumpkins3.jpg", "2018/09/28/Pumkins1.jpg"]
-CLI_EXPORT_SIDECAR_FILENAMES = ["Pumkins2.jpg", "Pumkins2.json", "Pumkins2.xmp"]
+CLI_EXPORT_SIDECAR_FILENAMES = ["Pumkins2.jpg", "Pumkins2.jpg.json", "Pumkins2.jpg.xmp"]
CLI_EXPORT_LIVE = [
"51F2BEF7-431A-4D31-8AC1-3284A57826AE.jpeg",
@@ -224,7 +224,7 @@ CLI_UUID_DICT_15_5 = {
"template": "F12384F6-CD17-4151-ACBA-AE0E3688539E",
}
-CLI_TEMPLATE_SIDECAR_FILENAME = "Pumkins1.json"
+CLI_TEMPLATE_SIDECAR_FILENAME = "Pumkins1.jpg.json"
CLI_UUID_DICT_14_6 = {"intrash": "3tljdX43R8+k6peNHVrJNQ"}
@@ -2256,7 +2256,7 @@ def test_export_sidecar_keyword_template():
"EXIF:ModifyDate": "2020:04:11 12:34:16"}]"""
)[0]
- json_file = open("Pumkins2.json", "r")
+ json_file = open("Pumkins2.jpg.json", "r")
json_got = json.load(json_file)[0]
json_file.close()
diff --git a/tests/test_export_catalina_10_15_1.py b/tests/test_export_catalina_10_15_1.py
index 6293e067..1fe561c3 100644
--- a/tests/test_export_catalina_10_15_1.py
+++ b/tests/test_export_catalina_10_15_1.py
@@ -59,12 +59,13 @@ UUID_DICT = {
"external_edit": "DC99FBDD-7A52-4100-A5BB-344131646C30",
"no_external_edit": "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51",
"export": "D79B8D77-BFFC-460B-9312-034F2877D35B", # "Pumkins2.jpg"
- "xmp": "F12384F6-CD17-4151-ACBA-AE0E3688539E", # Pumkins1.jpg
+ "xmp": "F12384F6-CD17-4151-ACBA-AE0E3688539E", # Pumkins1.jpg
}
# used with UUID_DICT["xmp"]
-XMP_FILENAME = "Pumkins1.xmp"
-XMP_JPG_FILENAME = "Pumkins1.jpg"
+XMP_FILENAME = "Pumkins1.jpg.xmp"
+XMP_JPG_FILENAME = "Pumkins1.jpg"
+
def test_export_1():
# test basic export
@@ -576,12 +577,13 @@ def test_xmp_sidecar_is_valid(tmp_path):
photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
photos = photosdb.photos(uuid=[UUID_DICT["xmp"]])
- photos[0].export(str(tmp_path), XMP_JPG_FILENAME, sidecar_xmp = True)
+ photos[0].export(str(tmp_path), XMP_JPG_FILENAME, sidecar_xmp=True)
xmp_file = tmp_path / XMP_FILENAME
assert xmp_file.is_file()
exiftool = ExifTool(str(xmp_file))
output = exiftool.run_commands("-validate", "-warning")
- assert output == b'[ExifTool] Validate : 0 0 0'
+ assert output == b"[ExifTool] Validate : 0 0 0"
+
def test_xmp_sidecar():
import osxphotos
@@ -596,7 +598,73 @@ def test_xmp_sidecar():
- JPEG
+ jpg
+ Girls with pumpkins
+ Can we carry this?
+
+
+
+ Kids
+ Suzy
+ Katie
+
+
+ 2018-09-28T15:35:49.063000-04:00
+
+
+
+
+ Suzy
+ Katie
+
+
+
+
+
+
+ Kids
+
+
+
+
+ 2018-09-28T15:35:49
+ 2018-09-28T15:35:49
+
+
+
+
+ """
+
+ xmp_expected_lines = [line.strip() for line in xmp_expected.split("\n")]
+
+ xmp_got = photos[0]._xmp_sidecar(extension="jpg")
+ xmp_got_lines = [line.strip() for line in xmp_got.split("\n")]
+
+ for line_expected, line_got in zip(
+ sorted(xmp_expected_lines), sorted(xmp_got_lines)
+ ):
+ assert line_expected == line_got
+
+
+def test_xmp_sidecar_extension():
+ """ test XMP sidecar when no extension is passed """
+ import osxphotos
+
+ photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
+ photos = photosdb.photos(uuid=[UUID_DICT["xmp"]])
+
+ xmp_expected = """
+
+
+
+
+ jpg
Girls with pumpkins
Can we carry this?
@@ -661,7 +729,7 @@ def test_xmp_sidecar_use_persons_keyword():
- JPEG
+ jpg
Girls with pumpkins
Can we carry this?
@@ -706,7 +774,7 @@ def test_xmp_sidecar_use_persons_keyword():
xmp_expected_lines = [line.strip() for line in xmp_expected.split("\n")]
- xmp_got = photos[0]._xmp_sidecar(use_persons_as_keywords=True)
+ xmp_got = photos[0]._xmp_sidecar(use_persons_as_keywords=True, extension="jpg")
xmp_got_lines = [line.strip() for line in xmp_got.split("\n")]
for line_expected, line_got in zip(
@@ -728,7 +796,7 @@ def test_xmp_sidecar_use_albums_keyword():
- JPEG
+ jpg
Girls with pumpkins
Can we carry this?
@@ -773,7 +841,7 @@ def test_xmp_sidecar_use_albums_keyword():
xmp_expected_lines = [line.strip() for line in xmp_expected.split("\n")]
- xmp_got = photos[0]._xmp_sidecar(use_albums_as_keywords=True)
+ xmp_got = photos[0]._xmp_sidecar(use_albums_as_keywords=True, extension="jpg")
xmp_got_lines = [line.strip() for line in xmp_got.split("\n")]
for line_expected, line_got in zip(
@@ -796,7 +864,7 @@ def test_xmp_sidecar_gps():
- JPEG
+ jpg
St. James's Park
@@ -845,7 +913,7 @@ def test_xmp_sidecar_gps():
xmp_expected_lines = [line.strip() for line in xmp_expected.split("\n")]
- xmp_got = photos[0]._xmp_sidecar()
+ xmp_got = photos[0]._xmp_sidecar(extension="jpg")
xmp_got_lines = [line.strip() for line in xmp_got.split("\n")]
for line_expected, line_got in zip(
diff --git a/tests/test_export_keyword_template_catalina_10_15_4.py b/tests/test_export_keyword_template_catalina_10_15_4.py
index 3d4718a2..bff667b7 100644
--- a/tests/test_export_keyword_template_catalina_10_15_4.py
+++ b/tests/test_export_keyword_template_catalina_10_15_4.py
@@ -166,7 +166,7 @@ def test_xmp_sidecar_keyword_template():
- JPEG
+ jpg
Girls with pumpkins
Can we carry this?
@@ -213,7 +213,7 @@ def test_xmp_sidecar_keyword_template():
xmp_expected_lines = [line.strip() for line in xmp_expected.split("\n")]
xmp_got = photos[0]._xmp_sidecar(
- keyword_template=["{created.year}", "{folder_album}"]
+ keyword_template=["{created.year}", "{folder_album}"], extension="jpg"
)
xmp_got_lines = [line.strip() for line in xmp_got.split("\n")]
diff --git a/tests/test_export_mojave_10_14_6.py b/tests/test_export_mojave_10_14_6.py
index 66406c75..6acaf0ef 100644
--- a/tests/test_export_mojave_10_14_6.py
+++ b/tests/test_export_mojave_10_14_6.py
@@ -418,7 +418,7 @@ def test_xmp_sidecar():
- JPG
+ jpg
Girls with pumpkins
Can we carry this?
@@ -461,7 +461,7 @@ def test_xmp_sidecar():
xmp_expected_lines = [line.strip() for line in xmp_expected.split("\n")]
- xmp_got = photos[0]._xmp_sidecar()
+ xmp_got = photos[0]._xmp_sidecar(extension="jpg")
xmp_got_lines = [line.strip() for line in xmp_got.split("\n")]
for line_expected, line_got in zip(xmp_expected_lines, xmp_got_lines):
@@ -481,7 +481,7 @@ def test_xmp_sidecar_keyword_template():
- JPG
+ jpg
Girls with pumpkins
Can we carry this?
@@ -528,7 +528,7 @@ def test_xmp_sidecar_keyword_template():
xmp_expected_lines = [line.strip() for line in xmp_expected.split("\n")]
xmp_got = photos[0]._xmp_sidecar(
- keyword_template=["{folder_album}", "{created.year}"]
+ keyword_template=["{folder_album}", "{created.year}"], extension="jpg"
)
xmp_got_lines = [line.strip() for line in xmp_got.split("\n")]