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()