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