osxphotos/tests/test_sidecar_xmp.py
2022-01-29 09:38:52 -08:00

65 lines
2.1 KiB
Python

""" Test XMP sidecar """
import pathlib
import tempfile
import pytest
import osxphotos
from osxphotos._constants import SIDECAR_XMP
from osxphotos.exiftool import ExifTool, get_exiftool_path
from osxphotos.fileutil import FileUtil
from osxphotos.photoexporter import ExportOptions, PhotoExporter
PHOTOS_DB_15_7 = "tests/Test-10.15.7.photoslibrary"
XMP_TEST_CASES = {
"no_title": "1EB2B765-0765-43BA-A90C-0D0580E6172C",
"no_keywords": "3DD2C897-F19E-4CA6-8C22-B027D5A71907",
"video": "35329C57-B963-48D6-BB75-6AFF9370CBBC",
"title_descr_tag_person": "D79B8D77-BFFC-460B-9312-034F2877D35B",
"descr_tag_person": "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51",
}
# determine if exiftool installed so exiftool tests can be skipped
try:
exiftool = get_exiftool_path()
except:
exiftool = None
@pytest.fixture(scope="module")
def photosdb():
return osxphotos.PhotosDB(dbfile=PHOTOS_DB_15_7)
@pytest.mark.skipif(exiftool is None, reason="exiftool not installed")
def test_sidecar_xmp(photosdb):
for test_case, uuid in XMP_TEST_CASES.items():
tempdir = tempfile.TemporaryDirectory(prefix="osxphotos")
dest = tempdir.name
photo = photosdb.get_photo(uuid)
export_options = ExportOptions(sidecar=SIDECAR_XMP)
PhotoExporter(photo).export(
dest, photo.original_filename, options=export_options
)
filepath = str(pathlib.Path(dest) / photo.original_filename)
xmppath = filepath + ".xmp"
# update the exif and ensure no warnings or errors
exif = ExifTool(filepath)
output, warning, error = exif.run_commands("-tagsfromfile", xmppath, "-all:all")
assert not warning
assert not error
# merge xmp sidecar and ensure no warnings or errors
test_xmp = str(pathlib.Path(dest) / "test.xmp")
FileUtil.copy(xmppath, test_xmp)
exif = ExifTool(test_xmp)
output, warning, error = exif.run_commands(
"-tagsfromfile", xmppath, "-all:all", test_xmp, no_file=True
)
assert not warning
assert not error