Source code for osxphotos.photosalbum
""" PhotosAlbum class to create an album in default Photos library and add photos to it """
from typing import List, Optional
import photoscript
from more_itertools import chunked
from photoscript import Photo, PhotosLibrary
from .photoinfo import PhotoInfo
from .utils import noop, pluralize
__all__ = ["PhotosAlbum", "PhotosAlbumPhotoScript"]
[docs]class PhotosAlbum:
"""Add osxphotos.photoinfo.PhotoInfo objects to album"""
def __init__(self, name: str, verbose: Optional[callable] = None):
self.name = name
self.verbose = verbose or noop
self.library = photoscript.PhotosLibrary()
album = self.library.album(name)
if album is None:
self.verbose(f"Creating Photos album '{self.name}'")
album = self.library.create_album(name)
self.album = album
def add(self, photo: PhotoInfo):
photo_ = photoscript.Photo(photo.uuid)
self.album.add([photo_])
self.verbose(
f"Added {photo.original_filename} ({photo.uuid}) to album {self.name}"
)
def add_list(self, photo_list: List[PhotoInfo]):
photos = []
for p in photo_list:
try:
photos.append(photoscript.Photo(p.uuid))
except Exception as e:
self.verbose(f"Error creating Photo object for photo {p.uuid}: {e}")
for photolist in chunked(photos, 10):
self.album.add(photolist)
photo_len = len(photo_list)
self.verbose(
f"Added {photo_len} {pluralize(photo_len, 'photo', 'photos')} to album {self.name}"
)
def photos(self):
return self.album.photos()
[docs]class PhotosAlbumPhotoScript:
"""Add photoscript.Photo objects to album"""
def __init__(self, name: str, verbose: Optional[callable] = None):
self.name = name
self.verbose = verbose or noop
self.library = PhotosLibrary()
album = self.library.album(name)
if album is None:
self.verbose(f"Creating Photos album '{self.name}'")
album = self.library.create_album(name)
self.album = album
def add(self, photo: Photo):
self.album.add([photo])
self.verbose(f"Added {photo.filename} ({photo.uuid}) to album {self.name}")
def add_list(self, photo_list: List[Photo]):
for photolist in chunked(photo_list, 10):
self.album.add(photolist)
photo_len = len(photo_list)
self.verbose(
f"Added {photo_len} {pluralize(photo_len, 'photo', 'photos')} to album {self.name}"
)
def photos(self):
return self.album.photos()