Fixed PhotoInfo.albums, album_info for issue #169
This commit is contained in:
@@ -1,3 +1,3 @@
|
|||||||
""" version info """
|
""" version info """
|
||||||
|
|
||||||
__version__ = "0.29.22"
|
__version__ = "0.29.23"
|
||||||
|
|||||||
@@ -21,12 +21,15 @@ import yaml
|
|||||||
from .._constants import (
|
from .._constants import (
|
||||||
_MOVIE_TYPE,
|
_MOVIE_TYPE,
|
||||||
_PHOTO_TYPE,
|
_PHOTO_TYPE,
|
||||||
|
_PHOTOS_4_ALBUM_KIND,
|
||||||
_PHOTOS_4_VERSION,
|
_PHOTOS_4_VERSION,
|
||||||
|
_PHOTOS_5_ALBUM_KIND,
|
||||||
|
_PHOTOS_5_SHARED_ALBUM_KIND,
|
||||||
_PHOTOS_5_SHARED_PHOTO_PATH,
|
_PHOTOS_5_SHARED_PHOTO_PATH,
|
||||||
)
|
)
|
||||||
from ..albuminfo import AlbumInfo
|
from ..albuminfo import AlbumInfo
|
||||||
from ..placeinfo import PlaceInfo4, PlaceInfo5
|
|
||||||
from ..phototemplate import PhotoTemplate
|
from ..phototemplate import PhotoTemplate
|
||||||
|
from ..placeinfo import PlaceInfo4, PlaceInfo5
|
||||||
from ..utils import _debug, _get_resource_loc, findfiles, get_preferred_uti_extension
|
from ..utils import _debug, _get_resource_loc, findfiles, get_preferred_uti_extension
|
||||||
|
|
||||||
|
|
||||||
@@ -341,21 +344,42 @@ class PhotoInfo:
|
|||||||
@property
|
@property
|
||||||
def albums(self):
|
def albums(self):
|
||||||
""" list of albums picture is contained in """
|
""" list of albums picture is contained in """
|
||||||
albums = []
|
try:
|
||||||
|
return self._albums
|
||||||
|
except AttributeError:
|
||||||
|
self._albums = []
|
||||||
|
if self._db._db_version <= _PHOTOS_4_VERSION:
|
||||||
|
album_kinds = [_PHOTOS_4_ALBUM_KIND]
|
||||||
|
kind_field = "albumSubclass"
|
||||||
|
else:
|
||||||
|
album_kinds = [_PHOTOS_5_ALBUM_KIND, _PHOTOS_5_SHARED_ALBUM_KIND]
|
||||||
|
kind_field = "kind"
|
||||||
|
|
||||||
for album in self._info["albums"]:
|
for album in self._info["albums"]:
|
||||||
if not self._db._dbalbum_details[album]["intrash"]:
|
detail = self._db._dbalbum_details[album]
|
||||||
albums.append(self._db._dbalbum_details[album]["title"])
|
if detail[kind_field] in album_kinds and not detail["intrash"]:
|
||||||
return albums
|
self._albums.append(detail["title"])
|
||||||
|
return self._albums
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def album_info(self):
|
def album_info(self):
|
||||||
""" list of AlbumInfo objects representing albums the photos is contained in """
|
""" list of AlbumInfo objects representing albums the photos is contained in """
|
||||||
albums = []
|
try:
|
||||||
for album in self._info["albums"]:
|
return self._album_info
|
||||||
if not self._db._dbalbum_details[album]["intrash"]:
|
except AttributeError:
|
||||||
albums.append(AlbumInfo(db=self._db, uuid=album))
|
self._album_info = []
|
||||||
|
if self._db._db_version <= _PHOTOS_4_VERSION:
|
||||||
|
album_kinds = [_PHOTOS_4_ALBUM_KIND]
|
||||||
|
kind_field = "albumSubclass"
|
||||||
|
else:
|
||||||
|
album_kinds = [_PHOTOS_5_ALBUM_KIND, _PHOTOS_5_SHARED_ALBUM_KIND]
|
||||||
|
kind_field = "kind"
|
||||||
|
|
||||||
return albums
|
for album in self._info["albums"]:
|
||||||
|
detail = self._db._dbalbum_details[album]
|
||||||
|
if detail[kind_field] in album_kinds and not detail["intrash"]:
|
||||||
|
self._album_info.append(AlbumInfo(db=self._db, uuid=album))
|
||||||
|
return self._album_info
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def keywords(self):
|
def keywords(self):
|
||||||
@@ -772,12 +796,18 @@ class PhotoInfo:
|
|||||||
}
|
}
|
||||||
return json.dumps(pic)
|
return json.dumps(pic)
|
||||||
|
|
||||||
# compare two PhotoInfo objects for equality
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
|
""" Compare two PhotoInfo objects for equality """
|
||||||
|
# Can't just compare the two __dicts__ because some methods (like albums)
|
||||||
|
# memoize their value once called in an instance variable (e.g. self._albums)
|
||||||
if isinstance(other, self.__class__):
|
if isinstance(other, self.__class__):
|
||||||
return self.__dict__ == other.__dict__
|
return (
|
||||||
|
self._db.db_path == other._db.db_path
|
||||||
|
and self.uuid == other.uuid
|
||||||
|
and self._info == other._info
|
||||||
|
)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def __ne__(self, other):
|
def __ne__(self, other):
|
||||||
|
""" Compare two PhotoInfo objects for inequality """
|
||||||
return not self.__eq__(other)
|
return not self.__eq__(other)
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ def test_albums_photos():
|
|||||||
|
|
||||||
|
|
||||||
def test_photoinfo_albums():
|
def test_photoinfo_albums():
|
||||||
|
""" Test PhotoInfo.albums """
|
||||||
import osxphotos
|
import osxphotos
|
||||||
|
|
||||||
photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
||||||
@@ -238,7 +239,20 @@ def test_photoinfo_albums():
|
|||||||
assert "Pumpkin Farm" in albums
|
assert "Pumpkin Farm" in albums
|
||||||
|
|
||||||
|
|
||||||
|
def test_photoinfo_albums_2():
|
||||||
|
""" Test that PhotoInfo.albums returns only number albums expected """
|
||||||
|
import osxphotos
|
||||||
|
|
||||||
|
photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
||||||
|
photos = photosdb.photos(uuid=[UUID_DICT["two_albums"]])
|
||||||
|
|
||||||
|
albums = photos[0].albums
|
||||||
|
assert len(albums) == 2
|
||||||
|
|
||||||
|
|
||||||
def test_photoinfo_album_info():
|
def test_photoinfo_album_info():
|
||||||
|
""" test PhotoInfo.album_info """
|
||||||
|
|
||||||
import osxphotos
|
import osxphotos
|
||||||
|
|
||||||
photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
||||||
@@ -249,4 +263,4 @@ def test_photoinfo_album_info():
|
|||||||
assert album_info[0].title in ["Pumpkin Farm", "Test Album"]
|
assert album_info[0].title in ["Pumpkin Farm", "Test Album"]
|
||||||
assert album_info[1].title in ["Pumpkin Farm", "Test Album"]
|
assert album_info[1].title in ["Pumpkin Farm", "Test Album"]
|
||||||
|
|
||||||
assert photos[0] in album_info[0].photos
|
assert photos[0].uuid in [photo.uuid for photo in album_info[0].photos]
|
||||||
|
|||||||
@@ -244,4 +244,4 @@ def test_photoinfo_album_info():
|
|||||||
assert album_info[0].title in ["Pumpkin Farm", "Test Album"]
|
assert album_info[0].title in ["Pumpkin Farm", "Test Album"]
|
||||||
assert album_info[1].title in ["Pumpkin Farm", "Test Album"]
|
assert album_info[1].title in ["Pumpkin Farm", "Test Album"]
|
||||||
|
|
||||||
assert photos[0] in album_info[0].photos
|
assert photos[0].uuid in [photo.uuid for photo in album_info[0].photos]
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ UUID_DICT = {
|
|||||||
"no_external_edit": "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51",
|
"no_external_edit": "E9BC5C36-7CD1-40A1-A72B-8B8FAC227D51",
|
||||||
"export": "D79B8D77-BFFC-460B-9312-034F2877D35B", # "Pumkins2.jpg"
|
"export": "D79B8D77-BFFC-460B-9312-034F2877D35B", # "Pumkins2.jpg"
|
||||||
"export_tif": "8846E3E6-8AC8-4857-8448-E3D025784410",
|
"export_tif": "8846E3E6-8AC8-4857-8448-E3D025784410",
|
||||||
|
"in_album": "D79B8D77-BFFC-460B-9312-034F2877D35B", # "Pumkins2.jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID_PUMPKIN_FARM = [
|
UUID_PUMPKIN_FARM = [
|
||||||
@@ -797,11 +798,29 @@ def test_export_14(caplog):
|
|||||||
|
|
||||||
|
|
||||||
def test_eq():
|
def test_eq():
|
||||||
|
""" Test equality of two PhotoInfo objects """
|
||||||
import osxphotos
|
import osxphotos
|
||||||
|
|
||||||
photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
photosdb1 = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
||||||
photos1 = photosdb.photos(uuid=[UUID_DICT["export"]])
|
photosdb2 = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
||||||
photos2 = photosdb.photos(uuid=[UUID_DICT["export"]])
|
photos1 = photosdb1.photos(uuid=[UUID_DICT["export"]])
|
||||||
|
photos2 = photosdb2.photos(uuid=[UUID_DICT["export"]])
|
||||||
|
assert photos1[0] == photos2[0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_eq_2():
|
||||||
|
""" Test equality of two PhotoInfo objects when one has memoized property """
|
||||||
|
import osxphotos
|
||||||
|
|
||||||
|
photosdb1 = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
||||||
|
photosdb2 = osxphotos.PhotosDB(dbfile=PHOTOS_DB)
|
||||||
|
photos1 = photosdb1.photos(uuid=[UUID_DICT["in_album"]])
|
||||||
|
photos2 = photosdb2.photos(uuid=[UUID_DICT["in_album"]])
|
||||||
|
|
||||||
|
# memoize a value
|
||||||
|
albums = photos1[0].albums
|
||||||
|
assert albums
|
||||||
|
|
||||||
assert photos1[0] == photos2[0]
|
assert photos1[0] == photos2[0]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user