65 lines
2.1 KiB
Python
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
|