388 lines
12 KiB
Python
388 lines
12 KiB
Python
""" test photokit.py methods """
|
|
|
|
import os
|
|
import pathlib
|
|
import tempfile
|
|
|
|
import pytest
|
|
|
|
from osxphotos.photokit import (
|
|
LivePhotoAsset,
|
|
PhotoAsset,
|
|
PhotoLibrary,
|
|
VideoAsset,
|
|
PHOTOS_VERSION_CURRENT,
|
|
PHOTOS_VERSION_ORIGINAL,
|
|
PHOTOS_VERSION_UNADJUSTED,
|
|
)
|
|
|
|
skip_test = "OSXPHOTOS_TEST_EXPORT" not in os.environ
|
|
pytestmark = pytest.mark.skipif(
|
|
skip_test, reason="Skip if not running with author's personal library."
|
|
)
|
|
|
|
|
|
UUID_DICT = {
|
|
"plain_photo": {
|
|
"uuid": "A8D646C3-89A9-4D74-8001-4EB46BA55B94",
|
|
"filename": "IMG_8844.JPG",
|
|
},
|
|
"hdr": {"uuid": "DA87C6FF-60E8-4DCB-A21D-9C57595667F1", "filename": "IMG_6162.JPG"},
|
|
"selfie": {
|
|
"uuid": "316AEBE0-971D-4A33-833C-6BDBFF83469B",
|
|
"filename": "IMG_1929.JPG",
|
|
},
|
|
"video": {
|
|
"uuid": "5814D9DE-FAB6-473A-9C9A-5A73C6DD1AF5",
|
|
"filename": "IMG_9411.TRIM.MOV",
|
|
},
|
|
"hasadjustments": {
|
|
"uuid": "2B2D5434-6D31-49E2-BF47-B973D34A317B",
|
|
"filename": "IMG_2860.JPG",
|
|
"adjusted_size": 3012634,
|
|
"unadjusted_size": 2580058,
|
|
},
|
|
"slow_mo": {
|
|
"uuid": "DAABC6D9-1FBA-4485-AA39-0A2B100300B1",
|
|
"filename": "IMG_4055.MOV",
|
|
},
|
|
"live_photo": {
|
|
"uuid": "612CE30B-3D8F-417A-9B14-EC42CBA10ACC",
|
|
"filename": "IMG_3259.HEIC",
|
|
"filename_video": "IMG_3259.mov",
|
|
},
|
|
"burst": {
|
|
"uuid": "CD97EC84-71F0-40C6-BAC1-2BABEE305CAC",
|
|
"filename": "IMG_8196.JPG",
|
|
"burst_selected": 3,
|
|
"burst_all": 5,
|
|
},
|
|
}
|
|
|
|
|
|
def test_fetch_uuid():
|
|
""" test fetch_uuid """
|
|
uuid = UUID_DICT["plain_photo"]["uuid"]
|
|
filename = UUID_DICT["plain_photo"]["filename"]
|
|
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
assert isinstance(photo, PhotoAsset)
|
|
|
|
|
|
def test_plain_photo():
|
|
""" test plain_photo """
|
|
uuid = UUID_DICT["plain_photo"]["uuid"]
|
|
filename = UUID_DICT["plain_photo"]["filename"]
|
|
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
assert photo.original_filename == filename
|
|
assert photo.isphoto
|
|
assert not photo.ismovie
|
|
|
|
|
|
def test_hdr():
|
|
""" test hdr """
|
|
uuid = UUID_DICT["hdr"]["uuid"]
|
|
filename = UUID_DICT["hdr"]["filename"]
|
|
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
assert photo.original_filename == filename
|
|
assert photo.hdr
|
|
|
|
|
|
def test_burst():
|
|
""" test burst and burstid """
|
|
test_dict = UUID_DICT["burst"]
|
|
uuid = test_dict["uuid"]
|
|
filename = test_dict["filename"]
|
|
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
assert photo.original_filename == filename
|
|
assert photo.burst
|
|
assert photo.burstid
|
|
|
|
|
|
|
|
# def test_selfie():
|
|
# """ test selfie """
|
|
# uuid = UUID_DICT["selfie"]["uuid"]
|
|
# filename = UUID_DICT["selfie"]["filename"]
|
|
|
|
# lib = PhotoLibrary()
|
|
# photo = lib.fetch_uuid(uuid)
|
|
# assert photo.original_filename == filename
|
|
# assert photo.selfie
|
|
|
|
|
|
def test_video():
|
|
""" test ismovie """
|
|
uuid = UUID_DICT["video"]["uuid"]
|
|
filename = UUID_DICT["video"]["filename"]
|
|
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
assert isinstance(photo, VideoAsset)
|
|
assert photo.original_filename == filename
|
|
assert photo.ismovie
|
|
assert not photo.isphoto
|
|
|
|
|
|
def test_slow_mo():
|
|
""" test slow_mo """
|
|
test_dict = UUID_DICT["slow_mo"]
|
|
uuid = test_dict["uuid"]
|
|
filename = test_dict["filename"]
|
|
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
assert isinstance(photo, VideoAsset)
|
|
assert photo.original_filename == filename
|
|
assert photo.ismovie
|
|
assert photo.slow_mo
|
|
assert not photo.isphoto
|
|
|
|
|
|
### PhotoAsset
|
|
|
|
|
|
def test_export_photo_original():
|
|
""" test PhotoAsset.export """
|
|
test_dict = UUID_DICT["hasadjustments"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_ORIGINAL)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
assert export_path.stat().st_size == test_dict["unadjusted_size"]
|
|
|
|
|
|
def test_export_photo_unadjusted():
|
|
""" test PhotoAsset.export """
|
|
test_dict = UUID_DICT["hasadjustments"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_UNADJUSTED)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
assert export_path.stat().st_size == test_dict["unadjusted_size"]
|
|
|
|
|
|
def test_export_photo_current():
|
|
""" test PhotoAsset.export """
|
|
test_dict = UUID_DICT["hasadjustments"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
assert export_path.stat().st_size == test_dict["adjusted_size"]
|
|
|
|
|
|
### VideoAsset
|
|
|
|
|
|
def test_export_video_original():
|
|
""" test VideoAsset.export """
|
|
test_dict = UUID_DICT["video"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_ORIGINAL)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
def test_export_video_unadjusted():
|
|
""" test VideoAsset.export """
|
|
test_dict = UUID_DICT["video"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_UNADJUSTED)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
def test_export_video_current():
|
|
""" test VideoAsset.export """
|
|
test_dict = UUID_DICT["video"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_CURRENT)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
### Slow-Mo VideoAsset
|
|
|
|
|
|
def test_export_slow_mo_original():
|
|
""" test VideoAsset.export for slow mo video"""
|
|
test_dict = UUID_DICT["slow_mo"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_ORIGINAL)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
def test_export_slow_mo_unadjusted():
|
|
""" test VideoAsset.export for slow mo video"""
|
|
test_dict = UUID_DICT["slow_mo"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_UNADJUSTED)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
def test_export_slow_mo_current():
|
|
""" test VideoAsset.export for slow mo video"""
|
|
test_dict = UUID_DICT["slow_mo"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_CURRENT)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
### LivePhotoAsset
|
|
|
|
|
|
def test_export_live_original():
|
|
""" test LivePhotoAsset.export """
|
|
test_dict = UUID_DICT["live_photo"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_ORIGINAL)
|
|
for f in export_path:
|
|
filepath = pathlib.Path(f)
|
|
assert filepath.is_file()
|
|
filename = test_dict["filename"]
|
|
assert filepath.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
def test_export_live_unadjusted():
|
|
""" test LivePhotoAsset.export """
|
|
test_dict = UUID_DICT["live_photo"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_UNADJUSTED)
|
|
for file in export_path:
|
|
filepath = pathlib.Path(file)
|
|
assert filepath.is_file()
|
|
filename = test_dict["filename"]
|
|
assert filepath.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
def test_export_live_current():
|
|
""" test LivePhotAsset.export """
|
|
test_dict = UUID_DICT["live_photo"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, version=PHOTOS_VERSION_CURRENT)
|
|
for file in export_path:
|
|
filepath = pathlib.Path(file)
|
|
assert filepath.is_file()
|
|
filename = test_dict["filename"]
|
|
assert filepath.stem == pathlib.Path(filename).stem
|
|
|
|
|
|
def test_export_live_current_just_photo():
|
|
""" test LivePhotAsset.export """
|
|
test_dict = UUID_DICT["live_photo"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, photo=True, video=False)
|
|
assert len(export_path) == 1
|
|
assert export_path[0].lower().endswith(".heic")
|
|
|
|
|
|
def test_export_live_current_just_video():
|
|
""" test LivePhotAsset.export """
|
|
test_dict = UUID_DICT["live_photo"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, photo=False, video=True)
|
|
assert len(export_path) == 1
|
|
assert export_path[0].lower().endswith(".mov")
|
|
|
|
|
|
def test_fetch_burst_uuid():
|
|
""" test fetch_burst_uuid """
|
|
test_dict = UUID_DICT["burst"]
|
|
uuid = test_dict["uuid"]
|
|
filename = test_dict["filename"]
|
|
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
bursts_selected = lib.fetch_burst_uuid(photo.burstid)
|
|
assert len(bursts_selected) == test_dict["burst_selected"]
|
|
assert isinstance(bursts_selected[0], PhotoAsset)
|
|
|
|
bursts_all = lib.fetch_burst_uuid(photo.burstid, all=True)
|
|
assert len(bursts_all) == test_dict["burst_all"]
|
|
assert isinstance(bursts_all[0], PhotoAsset)
|