From 72f034ef85010544a158d8301b898b5d0d865b05 Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Sun, 7 Jun 2020 08:14:02 -0700 Subject: [PATCH] Fix for bug in handling of deleted albums to address issue #156 --- osxphotos/_version.py | 2 +- osxphotos/photosdb/photosdb.py | 6 +- .../database/Photos.sqlite-shm | Bin 32768 -> 32768 bytes .../database/Photos.sqlite-wal | Bin 2270152 -> 3683312 bytes .../database/Photos.sqlite.lock | 2 +- .../database/search/psi.sqlite | Bin 167936 -> 167936 bytes .../CLSBusinessCategoryCache.POI.sqlite-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.POI.sqlite-wal | Bin 2958192 -> 2966432 bytes .../caches/graph/changetoken.plist | Bin 605 -> 605 bytes .../resources/journals/Album-change.plj | Bin 400 -> 1559 bytes .../resources/journals/Folder-change.plj | Bin 0 -> 648 bytes .../resources/journals/HistoryToken.plist | Bin 552 -> 552 bytes tests/test_catalina_10_15_5.py | 8 ++- tests/test_cli.py | 54 ++++++++++++++++++ 14 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 tests/Test-10.15.5.photoslibrary/resources/journals/Folder-change.plj diff --git a/osxphotos/_version.py b/osxphotos/_version.py index 639f6176..a7ef9074 100644 --- a/osxphotos/_version.py +++ b/osxphotos/_version.py @@ -1,3 +1,3 @@ """ version info """ -__version__ = "0.29.11" +__version__ = "0.29.12" diff --git a/osxphotos/photosdb/photosdb.py b/osxphotos/photosdb/photosdb.py index 2079fb7f..22208e02 100644 --- a/osxphotos/photosdb/photosdb.py +++ b/osxphotos/photosdb/photosdb.py @@ -2133,7 +2133,11 @@ class PhotosDB: if album in self._dbalbum_titles: title_set = set() for album_id in self._dbalbum_titles[album]: - title_set.update(self._dbalbums_album[album_id]) + try: + title_set.update(self._dbalbums_album[album_id]) + except KeyError: + # an empty album will be in _dbalbum_titles but not _dbalbums_album + pass album_set.update(title_set) else: logging.debug(f"Could not find album '{album}' in database") diff --git a/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite-shm b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite-shm index 7c919e5758a272666d844c1f07e9e9fa322d829e..3b514a9559af77b7027ef13d7ceeab3a2449e8e1 100644 GIT binary patch delta 2037 zcmb`I3s6->7{~Yg_p)#i5ET^Vkz5pciQ)rah;X?GA|T2`K?DWG7Yd@FBIwnK%&f#U zGE-DkB1^=sk5V%-GgC87qpO)2K6+YdrCFBk*<+2&G|e>AnfcD_x8MK&+i&;onQJz~ zY{n9|mYzg?97QOEI4`DzltILtoD)0h5ByM+boQ#B>z&&z_h#O*KW4i7U-c3$UMlzg zL(hYGN_t?|vRb=#Vr_CxgsljJ2%oBL1Nd&{!SC7Hah>AEyD3fWO`@@A5rra(M3kZG zl9y-enSa1kP&aP2)BQWfsWs;R19xr>CZwC#UUw1O`BLgG8guYW5xY+n@vyR3?vId~ zzf_K`s{Fidp#JX}i>H2P2=|MK&}Gn>luwEbv-cm#jfA`YR4DmU}t zMyWHkut|6meyZ4w*F{^|aBPL6<_#pCN<6lsgXT?)VQfA=LbzJ>vP&lm@i8J)P$EAS z)4+1j1b?+=;9Fy@EC$=)q=ABnmy&>&;i7@!E7|rAjFtgB4fs9U^Hw z&7!mDBDEOKPsZiBFG3~G<0`&~ktWb=I-8b>>!?0ggvQ_ANct(ccnbll#bBu&356x% z6}YO))mq{cf)q9xhY_gNHzkVtDC|H-Sy!sX4$Aqlq{X3SxJDkw1zf`qh@y#fJe^4M zX#p*Nu$;E2_BN4FWeVO#kc28b1tgi@8r{H>(11?rWLJK4%x>La6sboP%a0~EvOF9? zPp!5-Wt>d_R^UhZt941OV56}UZjz?glMSRNp2BTWEas*(qstI1#yVWY7oaqnCez7u zt||@SN75SDRJ?;=>E!FiT3IaW&{nSE6hbP9k8(sAgGO{#r@S2ONev0c)3}3NwXq^@ zOgFlOVF_Nqr}z>&I-I7^DRiEOKb)San?wsGjT;b3J^YNxpEqSTvgvpiy){(z1c6Gyt8kYn z-jt=Y>5WymD^cOuM%QpG#Rhzaufb?6O`}t33EeAEhq4>l3>-s4aE!8U<-5M& zkU!5VV5|V|BUCnHSy3Rk8F&re8n->!MnX}I`;vR9uz{ISi#F=Fc-&zWSxF+5LY%?? z&Aq%xxX0sl7^K^-1F0he@ErKf6ocjB+zN%w!3P+qi7ShRI1~HfBgMS2M8^hVEflSM zp+v}wa2kVT&MOu)BU2sv+J})~WdaVMn>5A4XK*32Z_O_A57V z3wk<|rqda;R27+cb7>`;i!&Ikd6q3|#sqcf%gtpvmW6}puBHZEM>0m6Z!WX45qJ^K en&Vt~C7Xv2F+`>o^J1}?Y`g(qY2(|Mr2PrrKrb@@ delta 1234 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 diff --git a/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite.lock b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite.lock index 2f5f3463..d96edccc 100644 --- a/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite.lock +++ b/tests/Test-10.15.5.photoslibrary/database/Photos.sqlite.lock @@ -7,7 +7,7 @@ hostuuid 9575E48B-8D5F-5654-ABAC-4431B1167324 pid - 452 + 703 processname photolibraryd uid diff --git a/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite b/tests/Test-10.15.5.photoslibrary/database/search/psi.sqlite index 091b63fbef1e43161cf138e47a04a9455edf1d73..1ac292776b487272144913baf52b8be5ab132b20 100644 GIT binary patch delta 826 zcmb7?T}V_x6vyYBJ9n<$yLaXqR4ZxRjY7~Av9PwHuDK*y%K9M2DygswE`%V+T43Q8 zffZDX;O#-mq7M)QH>n{|%AmIhd#DE?q#lIC2O*HCm*z$ggh3scIcJ!||D5yV3{RND z6XrBs(}dMLYOIx_)jU(=mRTp;E_GRqQ5q%cHl|~Z7hhW#nz{eIi<*Lu z5iulM_}G&WjPR{nC}a3%5nPgwIJAK_P9nbUKn&ut$pL1Y##2*6B#SB|Q3{g?>feQW zw9|gvg%-ct1txE~@HpguWLWG^R{_&i_BK-vRKg7m>3TmA>-;QV<)hN6hAEr!cVup~ z$bEJyY-*&IC_^pVO*97rLjXb!jtnaUjSQ*ZJy_k7O&|s1*X-({0}XhnNCQYKhd=`& zDpC+t-{O-Wsl&~3^)NW#lw8n=DQ*%?mcO`3pMSfxms?8P=;G0g`v{AOWKE$pdN=RQH+;ab&w z=Dg07yz|39BThBZiO{q9#RXxBqN_BY5MCmY7sk2)dT`180g}G*w}le_!ml&9C0V?6!PSk@QmF9%f>q6>C=-)O7k+zRRB)KKTq{h3b{Kj*gnp#NTn-*K_=FtJ$ zT|leN7vS(%0i^IDDv$BcVPxL_$N2@XP*GeXC&}mjYmEDT@L+tH{P_l5-57|aa>C9S z+0MsCZX~g|R%hn<(^HviK(BSfN*l)R%}`z@F&LExc(+fEHZ*!v6#Bb9(la`*pJ_$6 TbVd8LOvU&Goy5g)dC>e9PvL5P diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-shm index c9b73deacc250da135258136b0ebfcf7e2a525d2..7c42481d2d019b2292644a8bb539140e2c4f9417 100644 GIT binary patch delta 169 zcmZo@U}|V!s+V}A%K!q55G-(kiGe`?$llwg`I2)s=i+tNQP)qd-M4z%&vTb<#kRze zsvcxE2!PD}j|3p13``8?H#XXHPh7yU`2e?>`R0F4vshWqGhJZXe308sW%HvPIbi@* Cu{}`$ delta 165 zcmZo@U}|V!s+V}A%K!q55G-(xiGe`?$lknBOMGo{#<_LYQP)qd-M89C!yxKQzpFi| x>Op3M0La|`NB|difMQ$&Z&5v^AgaPA^H_-q9 diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal index ac1e064c6151565b663bdabcff3eaeac307d14ad..f841cc00aac38e344b586ef0ecc35a7eb7413c94 100644 GIT binary patch delta 161 zcmXBJyAHun0D$2fs#>?!{Z6S{T@sHV@j@Pm5d;XL5JDx4hE9YiG2$dJFiDakO@=Hv@)RgiqD+MxrL>bwT-RB&R*)^=;Z7obCtUl_ec5%uo584 diff --git a/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist b/tests/Test-10.15.5.photoslibrary/private/com.apple.photoanalysisd/caches/graph/changetoken.plist index 22a2691af864f602991833ef5a3c5b2ecbf2a1da..842aacf224e0026786bca956a77970946f07db00 100644 GIT binary patch delta 14 Vcmcc1a+hU;5F_J<&BBaci~uNf1c?9u delta 14 Vcmcc1a+hU;5F_KW&BBaci~uM&1b+Yk diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Album-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Album-change.plj index 748b16808d622d7443f8d8f85dfbbde61904809d..87e13f53bbdf361aac64219d80b03a5641ce4a1a 100644 GIT binary patch literal 1559 zcmZ?BXJL@%U=R|>V30a@&(Cf9;vd$!%$MgzDllsNU^Mu0=>J9Dq=KBx;t~Uc8;nfM zEUawo9GqO-JiL7T0&giN(dKCB^Xq!U$o<;^fr4l+3*Ju!79I zywsGKA;*5~&%)AriY`BUemgXO z+o`N2z$n0A?087;u4?1uw_yPp`6c}63aQbp+>=tW`>ywr9~ZnRx^lj zFbN5iy-Iv)b;s{{Tc-TVfIkUy9Ns;F#K)C8CF%0QZZF#Qgz#^Obh81*$0kODB@=cp z<%d~%9W_4CVgnN3*kglmGzc&VFapESZFZf7l~!D69yqE}6dZGsN^?PBDXyyHW;txXHkGGgHx1D!cTN zMoR$b>0QKO)iFr)yy{c`rse6fVNbc1_8}X^{gCK6zVp#vcwVAQ^vpPQA)fN+Su6_) zFD$;IMf7~$iPJg{gRWVJPx2w92552YFCg%8PmEd3MTdpUwY&S*DAfjXa0?NLFI4~$ C#Jslv delta 7 OcmbQvGl6--1V#V~eFAs@ diff --git a/tests/Test-10.15.5.photoslibrary/resources/journals/Folder-change.plj b/tests/Test-10.15.5.photoslibrary/resources/journals/Folder-change.plj new file mode 100644 index 0000000000000000000000000000000000000000..bdec336d64b95c9540acf6514f3cb766397cc128 GIT binary patch literal 648 zcmZ>`=*l3^!6+m!=~^TEw&SkW(=JWl@F_RCTY*ty38TTH##e7ylL~S&i%Sd)E;2I3 z3kW1uk}fao_M&Z12>*siH=9+Cu3tHOJo6?_-yY!^ z@qhN4otsxxzjybY@M|H<8>hEQJb_*_s>}WS8>G#=t5aY7>R9??NAxV`%^Zvhi~u3?1JwWk diff --git a/tests/test_catalina_10_15_5.py b/tests/test_catalina_10_15_5.py index 2831952d..8504f1f5 100644 --- a/tests/test_catalina_10_15_5.py +++ b/tests/test_catalina_10_15_5.py @@ -24,10 +24,11 @@ KEYWORDS = [ PERSONS = ["Katie", "Suzy", "Maria", _UNKNOWN_PERSON] ALBUMS = [ "Pumpkin Farm", - "Test Album", + "Test Album", # there are 2 albums named "Test Album" for testing duplicate album names "AlbumInFolder", "Raw", -] # Note: there are 2 albums named "Test Album" for testing duplicate album names + "I have a deleted twin", # there's an empty album with same name that has been deleted +] KEYWORDS_DICT = { "Kids": 4, "wedding": 2, @@ -45,6 +46,7 @@ ALBUM_DICT = { "Test Album": 2, "AlbumInFolder": 2, "Raw": 4, + "I have a deleted twin": 1, } # Note: there are 2 albums named "Test Album" for testing duplicate album names UUID_DICT = { @@ -232,7 +234,7 @@ def test_missing(): photos = photosdb.photos(uuid=[UUID_DICT["missing"]]) assert len(photos) == 1 p = photos[0] - assert p.path == None + assert p.path is None assert p.ismissing == True diff --git a/tests/test_cli.py b/tests/test_cli.py index 384137e9..cda217e0 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -49,6 +49,10 @@ CLI_EXPORT_FILENAMES = [ "wedding_edited.jpeg", ] +CLI_EXPORT_FILENAMES_ALBUM = ["Pumkins1.jpg", "Pumkins2.jpg", "Pumpkins3.jpg"] + +CLI_EXPORT_FILENAMES_DELETED_TWIN = ["wedding.jpg", "wedding_edited.jpeg"] + CLI_EXPORT_EDITED_SUFFIX = "_bearbeiten" CLI_EXPORT_FILENAMES_EDITED_SUFFIX = [ @@ -165,6 +169,8 @@ CLI_EXPORTED_FILENAME_TEMPLATE_FILENAMES2 = [ "Test Album-Pumkins1.jpg", "Test Album-Pumkins2.jpg", "None-IMG_1693.tif", + "I have a deleted twin-wedding.jpg", + "I have a deleted twin-wedding_edited.jpeg", ] CLI_EXPORT_UUID = "D79B8D77-BFFC-460B-9312-034F2877D35B" @@ -947,6 +953,54 @@ def test_export_filename_template_3(): assert "Error: Invalid template" in result.output +def test_export_album(): + """Test export of an album """ + import glob + import os + import os.path + import osxphotos + from osxphotos.__main__ import export + + runner = CliRunner() + cwd = os.getcwd() + # pylint: disable=not-context-manager + with runner.isolated_filesystem(): + result = runner.invoke( + export, + [os.path.join(cwd, PHOTOS_DB_15_5), ".", "--album", "Pumpkin Farm", "-V"], + ) + assert result.exit_code == 0 + files = glob.glob("*") + assert sorted(files) == sorted(CLI_EXPORT_FILENAMES_ALBUM) + + +def test_export_album_deleted_twin(): + """Test export of an album where album of same name has been deleted """ + import glob + import os + import os.path + import osxphotos + from osxphotos.__main__ import export + + runner = CliRunner() + cwd = os.getcwd() + # pylint: disable=not-context-manager + with runner.isolated_filesystem(): + result = runner.invoke( + export, + [ + os.path.join(cwd, PHOTOS_DB_15_5), + ".", + "--album", + "I have a deleted twin", + "-V", + ], + ) + assert result.exit_code == 0 + files = glob.glob("*") + assert sorted(files) == sorted(CLI_EXPORT_FILENAMES_DELETED_TWIN) + + def test_places(): import json import os