429 lines
13 KiB
Python
429 lines
13 KiB
Python
""" test photokit.py methods """
|
|
|
|
import os
|
|
import pathlib
|
|
import tempfile
|
|
|
|
import pytest
|
|
|
|
from osxphotos.utils import is_macos
|
|
|
|
if is_macos:
|
|
from osxphotos.photokit import (
|
|
PHOTOS_VERSION_CURRENT,
|
|
PHOTOS_VERSION_ORIGINAL,
|
|
PHOTOS_VERSION_UNADJUSTED,
|
|
LivePhotoAsset,
|
|
PhotoAsset,
|
|
PhotoLibrary,
|
|
VideoAsset,
|
|
)
|
|
else:
|
|
pytest.skip(allow_module_level=True)
|
|
|
|
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": "C6C712C5-9316-408D-A3C3-125661422DA9",
|
|
"filename": "IMG_8844.JPG",
|
|
},
|
|
"hdr": {"uuid": "DD641004-4E37-4233-AF31-CAA0896490B2", "filename": "IMG_6162.JPG"},
|
|
"selfie": {
|
|
"uuid": "C925CFDC-FF2B-4E71-AC9D-C669B6453A8B",
|
|
"filename": "IMG_1929.JPG",
|
|
},
|
|
"video": {
|
|
"uuid": "F4430659-7B17-487E-8029-8C1ABEBE23DF",
|
|
"filename": "IMG_9411.TRIM.MOV",
|
|
},
|
|
"hasadjustments": {
|
|
"uuid": "2F252D2C-C9DE-4BE1-8610-9F968C634D3D",
|
|
"filename": "IMG_2860.JPG",
|
|
"adjusted_size": 3012634,
|
|
"unadjusted_size": 2580058,
|
|
},
|
|
"slow_mo": {
|
|
"uuid": "160447F8-4EB0-4FAE-A26A-3D32EA698F75",
|
|
"filename": "IMG_4055.MOV",
|
|
},
|
|
"live_photo": {
|
|
"uuid": "8EC216A2-0032-4934-BD3F-04C6259B3304",
|
|
"filename": "IMG_3259.HEIC",
|
|
"filename_video": "IMG_3259.mov",
|
|
},
|
|
"burst": {
|
|
"uuid": "CDE4E5D9-1428-41E6-8569-EC0C45FD8E5A",
|
|
"filename": "IMG_8196.JPG",
|
|
"burst_selected": 4,
|
|
"burst_all": 5,
|
|
},
|
|
"raw+jpeg": {
|
|
"uuid": "E3DD04AF-CB65-4D9B-BB79-FF4C955533DB",
|
|
"filename": "IMG_1994.JPG",
|
|
"raw_filename": "IMG_1994.CR2",
|
|
"unadjusted_size": 16128420,
|
|
"uti_raw": "com.canon.cr2-raw-image",
|
|
"uti": "public.jpeg",
|
|
},
|
|
}
|
|
|
|
|
|
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.raw_filename is None
|
|
assert photo.isphoto
|
|
assert not photo.ismovie
|
|
|
|
|
|
def test_raw_plus_jpeg():
|
|
"""test RAW+JPEG"""
|
|
uuid = UUID_DICT["raw+jpeg"]["uuid"]
|
|
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
assert photo.original_filename == UUID_DICT["raw+jpeg"]["filename"]
|
|
assert photo.raw_filename == UUID_DICT["raw+jpeg"]["raw_filename"]
|
|
assert photo.uti_raw() == UUID_DICT["raw+jpeg"]["uti_raw"]
|
|
assert photo.uti() == UUID_DICT["raw+jpeg"]["uti"]
|
|
|
|
|
|
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"]
|
|
|
|
|
|
def test_export_photo_raw():
|
|
"""test PhotoAsset.export for raw component"""
|
|
test_dict = UUID_DICT["raw+jpeg"]
|
|
uuid = test_dict["uuid"]
|
|
lib = PhotoLibrary()
|
|
photo = lib.fetch_uuid(uuid)
|
|
|
|
with tempfile.TemporaryDirectory(prefix="photokit_test") as tempdir:
|
|
export_path = photo.export(tempdir, raw=True)
|
|
export_path = pathlib.Path(export_path[0])
|
|
assert export_path.is_file()
|
|
filename = test_dict["raw_filename"]
|
|
assert export_path.stem == pathlib.Path(filename).stem
|
|
assert export_path.stat().st_size == test_dict["unadjusted_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)
|