From 7af1ccd4ed22ea7f0f86973bfba7f108b6650291 Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Thu, 30 Apr 2020 21:38:24 -0700 Subject: [PATCH] Fixed bug related to issue #119 --- osxphotos/_version.py | 2 +- osxphotos/photosdb.py | 25 +- .../database/RKAlbum_name.skindex | Bin 12288 -> 12288 bytes .../database/photos.db | Bin 1916928 -> 1916928 bytes .../com.apple.Photos/appPrivateData.plist | 5 +- .../PhotoAnalysisServicePreferences.plist | 4 +- .../PhotosGraph/photosgraph.graphdb | Bin 73728 -> 73728 bytes .../PhotosGraph/photosgraph.graphdb-shm | Bin 32768 -> 32768 bytes .../VisionService/PersonPromoter | 4 + .../com.apple.photomodel/appPrivateData.plist | 2 +- .../resources/moments/historicalmarker.plist | 2 +- .../resources/recovery/Info.plist | 4 +- .../resources/recovery/RKAlbum/0000000000.lij | Bin 45545 -> 46958 bytes .../recovery/RKAlbumVersion/0000000000.lij | Bin 882 -> 1032 bytes .../recovery/RKCustomSortOrder/0000000000.lij | Bin 4262 -> 5267 bytes .../recovery/RKFolder/0000000000.lij | Bin 9412 -> 10523 bytes .../RKVersionAnalysisState/0000000000.lij | Bin 13409 -> 13651 bytes ...test_albums_folders_high_sierra_10_13_6.py | 229 ++++++++++++++++++ tests/test_highsierra.py | 6 +- 19 files changed, 263 insertions(+), 20 deletions(-) create mode 100644 tests/test_albums_folders_high_sierra_10_13_6.py diff --git a/osxphotos/_version.py b/osxphotos/_version.py index 1f13ae21..b7040edb 100644 --- a/osxphotos/_version.py +++ b/osxphotos/_version.py @@ -1,3 +1,3 @@ """ version info """ -__version__ = "0.28.10" +__version__ = "0.28.11" diff --git a/osxphotos/photosdb.py b/osxphotos/photosdb.py index 9cbbf0eb..9cfdfeeb 100644 --- a/osxphotos/photosdb.py +++ b/osxphotos/photosdb.py @@ -20,6 +20,7 @@ from ._constants import ( _PHOTO_TYPE, _PHOTOS_3_VERSION, _PHOTOS_4_ALBUM_KIND, + _PHOTOS_4_ROOT_FOLDER, _PHOTOS_4_TOP_LEVEL_ALBUM, _PHOTOS_4_VERSION, _PHOTOS_5_ALBUM_KIND, @@ -661,10 +662,11 @@ class PhotosDB: # build folder hierarchy for album, details in self._dbalbum_details.items(): parent_folder = details["folderUuid"] - if ( - details["albumSubclass"] == _PHOTOS_4_ALBUM_KIND - and parent_folder != _PHOTOS_4_TOP_LEVEL_ALBUM - ): + if details[ + "albumSubclass" + ] == _PHOTOS_4_ALBUM_KIND and parent_folder not in [ + _PHOTOS_4_TOP_LEVEL_ALBUM + ]: folder_hierarchy = self._build_album_folder_hierarchy_4(parent_folder) self._dbalbum_folders[album] = folder_hierarchy else: @@ -1222,17 +1224,24 @@ class PhotosDB: def _build_album_folder_hierarchy_4(self, uuid, folders=None): """ recursively build folder/album hierarchy - uuid: uuid of the album/folder being processed - folders: dict holding the folder hierarchy """ + uuid: parent uuid of the album being processed + (parent uuid is a folder in RKFolders) + folders: dict holding the folder hierarchy + NOTE: This implementation is different than _build_album_folder_hierarchy_5 + which takes the uuid of the album being processed. Here uuid is the parent uuid + of the parent folder album because in Photos <=4, folders are in RKFolders and + albums in RKAlbums. In Photos 5, folders are just special albums + with kind = _PHOTOS_5_FOLDER_KIND """ parent_uuid = self._dbfolder_details[uuid]["parentFolderUuid"] - # logging.warning(f"uuid = {uuid}, parent = {parent_uuid}, folders = {folders}") - if parent_uuid is None: return folders if parent_uuid == _PHOTOS_4_TOP_LEVEL_ALBUM: + if not folders: + # this is a top-level folder with no sub-folders + folders = {uuid: None} # at top of hierarchy, we're done return folders diff --git a/tests/Test-10.13.6.photoslibrary/database/RKAlbum_name.skindex b/tests/Test-10.13.6.photoslibrary/database/RKAlbum_name.skindex index 9f344b491c6a9039b98aee5511b38c79d42d54ae..e0134aa042d5210f8b5c408fad1c69d1fba78860 100644 GIT binary patch delta 254 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 QR5SPFS(o;qkRHhYFLpy|NB{r; delta 2040 zcma)74NO&K7(U;3&b{Z{pL1S*F89LaUbvD|m!|yHRQgd&X_&<{S6ezSOjer+w~T73 zc_BO3W==@-6HCEL+Zv95@FM9{XcC3(n@S2Hn4(pW?=wn6jx$U6IonbmJ1 zPHpQZQh*p`0~1R~nilRO^Ay&9*db^i?jmm!-U|UHR+6;(a5@!OpqiB38+`bF;Ct}z zR%wAgQkKQfln0qOixwIItd_OG1yrV}9AaYDsB*2W4K1ZM>X@l?axe&P2m`ZnOS!Ie zE1k^kr#V_!z?M(z0wn`Btuvoa$`;x=Xves9u#6`H2boFK%PtjIz1zB|`MyR)hGve3 zdJeva^H7icFTi2tk?%~Qyo>NKz*)eVMA>)4^of7DN&NeaFy6vngGS_618a=u<5HXu zmqH^pm2hN6YwLl8-ev7F$m|Ad`b!OehnMVqrdp zS_op@lHs2nWy>qXN(7d3a04zwJDh?hsKd<55mk!nUc?YoCcxfS; z8#oxkdAy8iorNFZ7&M^yQ(ztOAhPCZ(j3IJa4-OWAnGc*>BNv)5Yqsx;e0H`$Rca1~_P+h;wnp#wM;Zi2@E8{%=I z-|#8PiBzG)Y7)4}h)3{+#HdX!wJBO{irL@f7P_1kb0%kBYN@kiNcB>Ncv^hS++@zg z!X=uu%)PO3Jv3y~mXvy)A-3Z5kX4Lb_NesUYWCU|&qG>Qna53N$fDia>Y0u|B)06f zyIv@MIV5U*%(E0#X7*gUXV4NdiLn`8sdyQy@JG8?`3{fFp1&AVBNV+D64-Ws^m#rn z#Iq-L_cdG5;t&;M=f+CKi`iFu+)n1( ExpandedSidebarItemIdentifiers + obfeGcvoT1auxoh2Tu86OQ TopLevelAlbums TopLevelSlideshows MBS8+gBrQCWQxmcav+C8HQ @@ -25,11 +26,11 @@ key 1 lastKnownDisplayName - September 28, 2018 + Pumpkin Farm (1) type album uuid - si9dXIayQI2Tb2vrWgpddA + AU8Gp8bwRlOvngZFgwXBdg lastKnownItemCounts diff --git a/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist b/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist index 1b156126..aea430c3 100644 --- a/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist +++ b/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist @@ -3,8 +3,8 @@ PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate - 2019-07-28T01:23:52Z + 2020-04-30T14:09:38Z PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate - 2020-04-30T12:51:35Z + 2020-05-01T04:27:48Z diff --git a/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb b/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb index 0c4c0529d1bb676bba41e56309e095260550f2c3..bf679b27c901610dcbcfaa1325f97398d75df46c 100644 GIT binary patch literal 73728 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 diff --git a/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb-shm b/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb-shm index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..b9273b1d4a08ae25e985fb0234ed82c61e7bdbe5 100644 GIT binary patch delta 215 zcmZo@U}|V!s+V}A%K!pQK+MR%Aixf!g@8CK?oTQAgb9g8TdaAsyTx?&aNNDWh|k5G zRP`Y9KmbJlM*?6$1_mXt1c(E)oPigJnSq!Mh(Q`SfS7Y*W2_S+z bvTSVp%f!eECfUFw`^Lua+>A^c8zm(HH|#Ys delta 89 zcmZo@U}|V!;+1%$%K!t66BkO0TChv7nNGgVi7uf4lYpuIj|Mg_jCI<$LE9Dp%F!O} diff --git a/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/PersonPromoter b/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/PersonPromoter index fce0698d..4fdc85b4 100644 --- a/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/PersonPromoter +++ b/tests/Test-10.13.6.photoslibrary/private/com.apple.photoanalysisd/VisionService/PersonPromoter @@ -2,7 +2,11 @@ + ProcessedInQuiescentState + SuggestedMeIdentifier + Version + 3 diff --git a/tests/Test-10.13.6.photoslibrary/private/com.apple.photomodel/appPrivateData.plist b/tests/Test-10.13.6.photoslibrary/private/com.apple.photomodel/appPrivateData.plist index ef4b164d..95548513 100644 --- a/tests/Test-10.13.6.photoslibrary/private/com.apple.photomodel/appPrivateData.plist +++ b/tests/Test-10.13.6.photoslibrary/private/com.apple.photomodel/appPrivateData.plist @@ -5,7 +5,7 @@ LithiumMessageTracer LastReportedDate - 2019-07-27T12:01:15Z + 2020-05-01T03:34:50Z diff --git a/tests/Test-10.13.6.photoslibrary/resources/moments/historicalmarker.plist b/tests/Test-10.13.6.photoslibrary/resources/moments/historicalmarker.plist index 48ff51f8..8b9b3186 100644 --- a/tests/Test-10.13.6.photoslibrary/resources/moments/historicalmarker.plist +++ b/tests/Test-10.13.6.photoslibrary/resources/moments/historicalmarker.plist @@ -3,7 +3,7 @@ LastHistoryRowId - 657 + 670 LibraryBuildTag BEA5F0E8-BA6B-4462-8F73-3E53BBE4C943 LibrarySchemaVersion diff --git a/tests/Test-10.13.6.photoslibrary/resources/recovery/Info.plist b/tests/Test-10.13.6.photoslibrary/resources/recovery/Info.plist index c15d161c..f8261b89 100644 --- a/tests/Test-10.13.6.photoslibrary/resources/recovery/Info.plist +++ b/tests/Test-10.13.6.photoslibrary/resources/recovery/Info.plist @@ -9,7 +9,7 @@ HistoricalMarker LastHistoryRowId - 657 + 670 LibraryBuildTag BEA5F0E8-BA6B-4462-8F73-3E53BBE4C943 LibrarySchemaVersion @@ -24,7 +24,7 @@ SnapshotCompletedDate 2019-07-26T20:15:17Z SnapshotLastValidated - 2020-04-30T12:51:32Z + 2020-05-01T03:34:50Z SnapshotTables diff --git a/tests/Test-10.13.6.photoslibrary/resources/recovery/RKAlbum/0000000000.lij b/tests/Test-10.13.6.photoslibrary/resources/recovery/RKAlbum/0000000000.lij index 6bd67978efed9ca9e84e20bc6c23415bcf795f97..3645ee7810eded2135b5715315224f8f6f1c2c99 100644 GIT binary patch delta 260 zcmaF)nCaa+rVTGQGDd7>oEpxga7efD+LA|Q@d9Fwp%(517D?qnIsRpN=}~U!60fe*V7URD9tU%&dgJAODxJ&&@j{#U>1-wb_DC4Jy(!v8k{}(;`C(B%}iUFwlf`I zIy~8ShCJJusXBe$Cng)tbe_C_g@&-4GFad85Kf4uWuKBKKbRrSEXXu-vcW_>#+j4< zt_)C>6J(kVR(K=%9|O>F`AKQ1?#X5OA%=;i75N!PA*B{({*$+FG-6x@G&x2IV(PtT lYVlxG?>)U{DZnVmG%qqFwYbDFC#f`d^0}3Itkod5005*QXl(!h delta 9 RcmaF&j_KuNrVTGQ0stOm1@`~| diff --git a/tests/Test-10.13.6.photoslibrary/resources/recovery/RKAlbumVersion/0000000000.lij b/tests/Test-10.13.6.photoslibrary/resources/recovery/RKAlbumVersion/0000000000.lij index 0c495410d2f9795eb1b2754292e2ce26075dadf4..da0a38761982ab2491d1574e959ed00200993e26 100644 GIT binary patch delta 36 scmeyw*1@r%h?%i(B4dECoB*Q$o3i5}-NtLnLpTMP1({||c3?IF0K;kt?EnA( delta 7 OcmeC+_{6rMh#3G2xB{*K diff --git a/tests/Test-10.13.6.photoslibrary/resources/recovery/RKCustomSortOrder/0000000000.lij b/tests/Test-10.13.6.photoslibrary/resources/recovery/RKCustomSortOrder/0000000000.lij index d1970b96c233b781de017acf2b732fadbee1cc06..c9295b6c86b8f0589ccdb221494a47e8178cb694 100644 GIT binary patch delta 290 zcmZ3cI9YSUG6BXj6B$#jSQ!Ku1q9@hfvupsGBZSSIYfG2h2b$v; zYT;gBkyIX(<6oAS9_5x^9^sUdF32<;WX|N(Tm{O)I8}k&b8Xp~Ba^i`B$)-7W=uZF rV=~#E--~aKfGJq=MvAkofY9XW{B!I@a5@^Q@|7Y^iv*eGf{X?L?igjA delta 7 OcmbQNxlD1xG64V#FaqiT diff --git a/tests/Test-10.13.6.photoslibrary/resources/recovery/RKFolder/0000000000.lij b/tests/Test-10.13.6.photoslibrary/resources/recovery/RKFolder/0000000000.lij index 18dee13dff63c511048f294183c7c0d387d7d313..0a610a5a54a67b1d8a1cb6ebd2edc32d9eb60330 100644 GIT binary patch delta 149 zcmX@&IXh^>5fw(o$&M_>i@imebQ@1ExFr-9l3(DHT9%sQn3GhRTO2PSmYYiMd zA7YqTT9Kb&6jEwo<{vm&P}Y!_)7bG4P}}_7NrFt1Cl@k>Pv({A6yppt)Hl+%)K>;e wE;Qp6U=(DUGI@=J@nlmKHwjKbrm0aOsl_F3`8g@6MPOBD7d^Q&`K6>G07O(YL;wH) delta 7 OcmbOobi{MR5fuOq0Bx}6uYq6q*IQv=KZ diff --git a/tests/test_albums_folders_high_sierra_10_13_6.py b/tests/test_albums_folders_high_sierra_10_13_6.py new file mode 100644 index 00000000..cf443704 --- /dev/null +++ b/tests/test_albums_folders_high_sierra_10_13_6.py @@ -0,0 +1,229 @@ +import pytest + +from osxphotos._constants import _UNKNOWN_PERSON + +PHOTOS_DB = "./tests/Test-10.13.6.photoslibrary/database/photos.db" + +TOP_LEVEL_FOLDERS = ["Folder1", "TestFolder"] + +TOP_LEVEL_CHILDREN = ["SubFolder1", "SubFolder2"] + +FOLDER_ALBUM_DICT = { + "Folder1": [], + "SubFolder1": [], + "SubFolder2": ["AlbumInFolder"], + "TestFolder": ["TestAlbum"], +} + +ALBUM_NAMES = ["Pumpkin Farm", "AlbumInFolder", "TestAlbum"] + +ALBUM_PARENT_DICT = { + "Pumpkin Farm": None, + "AlbumInFolder": "SubFolder2", + "TestAlbum": "TestFolder", +} + +ALBUM_FOLDER_NAMES_DICT = { + "Pumpkin Farm": [], + "AlbumInFolder": ["Folder1", "SubFolder2"], + "TestAlbum": ["TestFolder"], +} + +ALBUM_LEN_DICT = {"Pumpkin Farm": 3, "AlbumInFolder": 1, "TestAlbum": 1} + +ALBUM_PHOTO_UUID_DICT = { + "Pumpkin Farm": [ + "vAZGdUK1QdGfWPgC+KsJag", + "NlY8CklESxGpaKsTVHB3HQ", + "RWmFYiDjSyKjeK8Pfna0Eg", + ], + "AlbumInFolder": ["RWmFYiDjSyKjeK8Pfna0Eg"], + "TestAlbum": ["NlY8CklESxGpaKsTVHB3HQ"], +} + + +######### Test FolderInfo ########## + + +def test_folders_1(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + folders = photosdb.folders + + # top level folders + folders = photosdb.folder_info + assert len(folders) == len(TOP_LEVEL_FOLDERS) + + # check folder names + folder_names = [f.title for f in folders] + assert sorted(folder_names) == sorted(TOP_LEVEL_FOLDERS) + + +def test_folder_names(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + # check folder names + folder_names = photosdb.folders + assert folder_names == TOP_LEVEL_FOLDERS + assert sorted(folder_names) == sorted(TOP_LEVEL_FOLDERS) + + +def test_folders_len(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + # top level folders + folders = photosdb.folder_info + assert len(folders[0]) == len(TOP_LEVEL_CHILDREN) + + +def test_folders_children(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + # top level folders + folders = photosdb.folder_info + + # children of top level folder + children = folders[0].subfolders + children_names = [f.title for f in children] + assert sorted(children_names) == sorted(TOP_LEVEL_CHILDREN) + + for child in folders[0].subfolders: + # check valid children FolderInfo + assert child.parent + assert child.parent.uuid == folders[0].uuid + + # check folder names + folder_names = [f.title for f in folders] + assert sorted(folder_names) == sorted(TOP_LEVEL_FOLDERS) + + +def test_folders_parent(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + # top level folders + folders = photosdb.folder_info + + # parent of top level folder should be none + for folder in folders: + assert folder.parent is None + for child in folder.subfolders: + # children's parent uuid should match folder uuid + assert child.parent + assert child.parent.uuid == folder.uuid + + +def test_folders_albums(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + # top level folders + folders = photosdb.folder_info + + for folder in folders: + name = folder.title + albums = [a.title for a in folder.album_info] + assert sorted(albums) == sorted(FOLDER_ALBUM_DICT[name]) + for child in folder.subfolders: + name = child.title + albums = [a.title for a in child.album_info] + assert sorted(albums) == sorted(FOLDER_ALBUM_DICT[name]) + + +########## Test AlbumInfo ########## + + +def test_albums_1(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + albums = photosdb.album_info + assert len(albums) == len(ALBUM_NAMES) + + # check names + album_names = [a.title for a in albums] + assert sorted(album_names) == sorted(ALBUM_NAMES) + + +def test_albums_parent(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + albums = photosdb.album_info + + for album in albums: + parent = album.parent.title if album.parent else None + assert parent == ALBUM_PARENT_DICT[album.title] + + +def test_albums_folder_names(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + albums = photosdb.album_info + + for album in albums: + folder_names = album.folder_names + assert folder_names == ALBUM_FOLDER_NAMES_DICT[album.title] + + +def test_albums_folders(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + albums = photosdb.album_info + + for album in albums: + folders = album.folder_list + folder_names = [f.title for f in folders] + assert folder_names == ALBUM_FOLDER_NAMES_DICT[album.title] + + +def test_albums_len(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + albums = photosdb.album_info + + for album in albums: + assert len(album) == ALBUM_LEN_DICT[album.title] + + +def test_albums_photos(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + + albums = photosdb.album_info + + for album in albums: + photos = album.photos + assert len(photos) == ALBUM_LEN_DICT[album.title] + assert len(photos) == len(album) + for photo in photos: + assert photo.uuid in ALBUM_PHOTO_UUID_DICT[album.title] + + +def test_photoinfo_albums(): + import osxphotos + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + photos = photosdb.photos(uuid=ALBUM_PHOTO_UUID_DICT["Pumpkin Farm"]) + + albums = photos[0].albums + assert "Pumpkin Farm" in albums diff --git a/tests/test_highsierra.py b/tests/test_highsierra.py index f2793de7..05064694 100644 --- a/tests/test_highsierra.py +++ b/tests/test_highsierra.py @@ -15,7 +15,7 @@ KEYWORDS = [ "United Kingdom", ] PERSONS = ["Katie", "Suzy", "Maria"] -ALBUMS = ["Pumpkin Farm"] +ALBUMS = ["Pumpkin Farm", "AlbumInFolder", "TestAlbum"] KEYWORDS_DICT = { "Kids": 4, "wedding": 2, @@ -28,7 +28,7 @@ KEYWORDS_DICT = { "United Kingdom": 1, } PERSONS_DICT = {"Katie": 3, "Suzy": 2, "Maria": 1} -ALBUM_DICT = {"Pumpkin Farm": 3} +ALBUM_DICT = {"Pumpkin Farm": 3, "TestAlbum": 1, "AlbumInFolder": 1} def test_init(): @@ -123,7 +123,7 @@ def test_attributes(): ) assert p.description == "Girl holding pumpkin" assert p.title == "I found one!" - assert p.albums == ["Pumpkin Farm"] + assert sorted(p.albums) == ["AlbumInFolder", "Pumpkin Farm"] assert p.persons == ["Katie"] assert p.path.endswith( "/tests/Test-10.13.6.photoslibrary/Masters/2019/07/26/20190726-203227/Pumkins2.jpg"