From 1fe885962e8a9a420e776bdd3dc640ca143224b2 Mon Sep 17 00:00:00 2001 From: Rhet Turnbull Date: Sun, 15 Dec 2019 19:21:04 -0800 Subject: [PATCH] changed interface for export, prepped for exiftool_json_sidecar --- README.md | 8 +- osxphotos/__init__.py | 178 ++++++++++++++---- .../database/photos.db | Bin 5832704 -> 5832704 bytes .../com.apple.Photos/appPrivateData.plist | 2 +- .../PhotoAnalysisServicePreferences.plist | 4 +- .../PhotosGraph/photosgraph-tmp.graphdb-shm | Bin 32768 -> 32768 bytes .../PhotosGraph/photosgraph.graphdb | Bin 61440 -> 61440 bytes .../resources/moments/analysismetadata.plist | 2 +- .../resources/moments/needsanalysis | 0 .../database/Photos.sqlite | Bin 2093056 -> 2093056 bytes .../database/Photos.sqlite-shm | Bin 32768 -> 32768 bytes .../database/Photos.sqlite-wal | Bin 12392 -> 4152 bytes .../database/Photos.sqlite.lock | 2 +- .../database/search/psi.sqlite | Bin 139264 -> 139264 bytes .../database/search/psi.sqlite-shm | Bin 32768 -> 32768 bytes .../MediaAnalysis/mediaanalysis.db | Bin 69632 -> 69632 bytes .../MediaAnalysis/mediaanalysis.db-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.AOI.sqlite-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.AOI.sqlite-wal | Bin 284312 -> 341992 bytes ...CLSBusinessCategoryCache.Nature.sqlite-shm | Bin 32768 -> 32768 bytes ...CLSBusinessCategoryCache.Nature.sqlite-wal | Bin 255472 -> 317272 bytes .../CLSBusinessCategoryCache.POI.sqlite-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.POI.sqlite-wal | Bin 185432 -> 247232 bytes .../CLSBusinessCategoryCache.ROI.sqlite-shm | Bin 32768 -> 32768 bytes .../CLSBusinessCategoryCache.ROI.sqlite-wal | Bin 337872 -> 399672 bytes .../caches/graph/CLSContactCache.sqlite | Bin 126976 -> 143360 bytes .../caches/graph/CLSContactCache.sqlite-shm | Bin 32768 -> 32768 bytes .../caches/graph/CLSContactCache.sqlite-wal | Bin 4087072 -> 4140632 bytes .../caches/graph/CLSLocationCache.sqlite-shm | Bin 32768 -> 32768 bytes .../graph/CLSPublicEventCache.sqlite-shm | Bin 32768 -> 32768 bytes .../graph/CLSPublicEventCache.sqlite-wal | Bin 1693352 -> 1767512 bytes .../graph/PGCurationCache.sqlite.sqlite-shm | Bin 32768 -> 32768 bytes .../graph/PGCurationCache.sqlite.sqlite-wal | Bin 181312 -> 181312 bytes .../graph/PGSearchComputationCache.plist | Bin 676 -> 676 bytes .../PhotoAnalysisServicePreferences.plist | 20 +- .../caches/graph/PhotosGraph/photosgraph.kgdb | Bin 512000 -> 512000 bytes .../PhotoAnalysisServicePreferences.plist | 4 +- .../caches/vision/faceWorkerState.plist | 2 +- .../caches/vision/vnpersonsmodel.bin | Bin 7631 -> 7631 bytes tests/test_export_catalina_10_15_1.py | 73 +++++++ 40 files changed, 235 insertions(+), 60 deletions(-) delete mode 100644 tests/Test-10.12.6.photoslibrary/resources/moments/needsanalysis diff --git a/README.md b/README.md index 80e3e195..6f9f7446 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ - [`hidden()`](#hidden) - [`location()`](#location) - [`to_json()`](#to_json) - - [`export(*args, edited=False, overwrite=False, increment=True)`](#exportargs-editedfalse-overwritefalse-incrementtrue) + - [`export(dest, *filename, edited=False, overwrite=False, increment=True)`](#exportdest-filename-editedfalse-overwritefalse-incrementtrue) + [Examples](#examples) * [History](#history) * [Contributing](#contributing) @@ -490,10 +490,10 @@ Returns latitude and longitude as a tuple of floats (latitude, longitude). If l #### `to_json()` Returns a JSON representation of all photo info -#### `export(*args, edited=False, overwrite=False, increment=True)` +#### `export(dest, *filename, edited=False, overwrite=False, increment=True)` Export photo from the Photos library to another destination on disk. -- First argument of *args must be valid destination path (or exception raised). -- Second argument of *args (optional): name of picture; if not provided, will use current filename +- First argument dest must be valid destination path (or exception raised). +- Second argument *filename (optional): name of picture; if not provided, will use current filename - edited: boolean; if True (default=False), will export the edited version of the photo (or raise exception if no edited version) - overwrite: boolean; if True (default=False), will overwrite files if they alreay exist - increment: boolean; if True (default=True), will increment file name until a non-existant name is found diff --git a/osxphotos/__init__.py b/osxphotos/__init__.py index 79f4d7cc..2361914b 100644 --- a/osxphotos/__init__.py +++ b/osxphotos/__init__.py @@ -4,6 +4,7 @@ import logging import os.path import pathlib import platform +import re import sqlite3 import subprocess import sys @@ -88,8 +89,8 @@ def _get_os_version(): def _check_file_exists(filename): - # returns true if file exists and is not a directory - # otherwise returns false + """ returns true if file exists and is not a directory + otherwise returns false """ filename = os.path.abspath(filename) return os.path.exists(filename) and not os.path.isdir(filename) @@ -112,6 +113,54 @@ def _get_resource_loc(model_id): return folder_id, file_id +def _dd_to_dms(dd): + """ convert lat or lon in decimal degrees (dd) to degrees, minutes, seconds """ + """ return tuple of int(deg), int(min), float(sec) """ + dd = float(dd) + negative = dd < 0 + dd = abs(dd) + min_, sec_ = divmod(dd * 3600, 60) + deg_, min_ = divmod(min_, 60) + if negative: + if deg_ > 0: + deg_ = deg_ * -1 + elif min_ > 0: + min_ = min_ * -1 + else: + sec_ = sec_ * -1 + + return int(deg_), int(min_), sec_ + + +def dd_to_dms_str(lat, lon): + """ convert latitude, longitude in degrees to degrees, minutes, seconds as string """ + """ lat: latitude in degrees """ + """ lon: longitude in degrees """ + """ returns: string tuple in format ("51 deg 30' 12.86\" N", "0 deg 7' 54.50\" W") """ + """ this is the same format used by exiftool's json format """ + # TODO: add this to readme + + lat_deg, lat_min, lat_sec = _dd_to_dms(lat) + lon_deg, lon_min, lon_sec = _dd_to_dms(lon) + + lat_hemisphere = "N" + if any([lat_deg < 0, lat_min < 0, lat_sec < 0]): + lat_hemisphere = "S" + + lon_hemisphere = "E" + if any([lon_deg < 0, lon_min < 0, lon_sec < 0]): + lon_hemisphere = "W" + + lat_str = ( + f"{abs(lat_deg)} deg {abs(lat_min)}' {abs(lat_sec):.2f}\" {lat_hemisphere}" + ) + lon_str = ( + f"{abs(lon_deg)} deg {abs(lon_min)}' {abs(lon_sec):.2f}\" {lon_hemisphere}" + ) + + return lat_str, lon_str + + def get_system_library_path(): """ return the path to the system Photos library as string """ """ only works on MacOS 10.15+ """ @@ -1464,7 +1513,7 @@ class PhotoInfo: """ returns (latitude, longitude) as float in degrees or None """ return (self._latitude(), self._longitude()) - def export(self, *args, edited=False, overwrite=False, increment=True): + def export(self, dest, *filename, edited=False, overwrite=False, increment=True): """ export photo """ """ first argument must be valid destination path (or exception raised) """ """ second argument (optional): name of picture; if not provided, will use current filename """ @@ -1478,44 +1527,37 @@ class PhotoInfo: # maybe dest, *filename? # check arguments and get destination path and filename (if provided) - dest = None # destination path - filename = None # photo filename - if not args: - # need at least one arg (destination) - raise TypeError("Must pass destination as first argument") + if filename and len(filename) > 2: + raise TypeError( + "Too many positional arguments. Should be at most two: destination, filename." + ) else: - if len(args) > 2: - raise TypeError( - "Too many positional arguments. Should be at most two: destination, filename." - ) - else: - # verify destination is a valid path - dest = args[0] - if dest is None: - raise ValueError("Destination must not be None") - elif not os.path.isdir(dest): - raise FileNotFoundError("Invalid path passed to export") + # verify destination is a valid path + if dest is None: + raise ValueError("Destination must not be None") + elif not os.path.isdir(dest): + raise FileNotFoundError("Invalid path passed to export") - if len(args) == 2: - # second arg is filename of picture - filename = args[1] - else: - # no filename provided so use the default - # if edited file requested, use filename but add _edited - # need to use file extension from edited file as Photos saves a jpeg once edited - if edited: - # verify we have a valid path_edited and use that to get filename - if not self.path_edited(): - raise FileNotFoundError( - f"edited=True but path_edited is none; hasadjustments: {self.hasadjustments()}" - ) - edited_name = Path(self.path_edited()).name - edited_suffix = Path(edited_name).suffix - filename = ( - Path(self.filename()).stem + "_edited" + edited_suffix + if filename and len(filename) == 1: + # second arg is filename of picture + filename = filename[0] + else: + # no filename provided so use the default + # if edited file requested, use filename but add _edited + # need to use file extension from edited file as Photos saves a jpeg once edited + if edited: + # verify we have a valid path_edited and use that to get filename + if not self.path_edited(): + raise FileNotFoundError( + f"edited=True but path_edited is none; hasadjustments: {self.hasadjustments()}" ) - else: - filename = self.filename() + edited_name = Path(self.path_edited()).name + edited_suffix = Path(edited_name).suffix + filename = ( + Path(self.filename()).stem + "_edited" + edited_suffix + ) + else: + filename = self.filename() # get path to source file and verify it's not None and is valid file # TODO: how to handle ismissing or not hasadjustments and edited=True cases? @@ -1584,6 +1626,66 @@ class PhotoInfo: return str(dest) + def _exiftool_json_sidecar(self): + """ return json string of EXIF details in exiftool sidecar format """ + exif = {} + exif["FileName"] = self.filename() + + if self.description(): + exif["ImageDescription"] = self.description() + exif["Description"] = self.description() + + if self.title(): + exif["Title"] = self.title() + + if self.keywords(): + exif["TagsList"] = exif["Keywords"] = self.keywords() + + if self.persons(): + exif["PersonInImage"] = self.persons() + + # if self.favorite(): + # exif["Rating"] = 5 + + (lat, lon) = self.location() + if lat is not None and lon is not None: + lat_str, lon_str = dd_to_dms_str(lat, lon) + exif["GPSLatitude"] = lat_str + exif["GPSLongitude"] = lon_str + exif["GPSPosition"] = f"{lat_str}, {lon_str}" + lat_ref = "North" if lat >= 0 else "South" + lon_ref = "East" if lon >= 0 else "West" + exif["GPSLatitudeRef"] = lat_ref + exif["GPSLongitudeRef"] = lon_ref + + # process date/time and timezone offset + date = self.date() + # exiftool expects format to "2015:01:18 12:00:00" + datetimeoriginal = date.strftime("%Y:%m:%d %H:%M:%S") + offsettime = date.strftime("%z") + # find timezone offset in format "-04:00" + offset = re.findall(r"([+-]?)([\d]{2})([\d]{2})", offsettime) + offset = offset[0] # findall returns list of tuples + offsettime = f"{offset[0]}{offset[1]}:{offset[2]}" + exif["DateTimeOriginal"] = datetimeoriginal + exif["OffsetTimeOriginal"] = offsettime + + json_str = json.dumps([exif]) + return json_str + + def _write_sidecar_car(self, filename, json_str): + if not filename and not json_str: + raise ( + ValueError( + f"filename {filename} and json_str {json_str} must not be None" + ) + ) + + # TODO: catch exception? + f = open(filename, "w") + f.write(json_str) + f.close() + def _longitude(self): """ Returns longitude, in degrees """ return self._info["longitude"] diff --git a/tests/Test-10.12.6.photoslibrary/database/photos.db b/tests/Test-10.12.6.photoslibrary/database/photos.db index c3b177f52e74d104313e9bc962d503732617ec5a..63f748fd12bad2b5ea528a7c7d28d4af9218ae13 100644 GIT binary patch delta 404 zcmX}exlWW(06^jSFNoVL468T-F1U{?f-8bJAmF~vEi6t9#z0RDu^Ea}Ukt_g1ipd! zYahVc*qE4@*wNZbnUi_BCkwJDOLAWx z$U}J~kL8Ixm1pu?UdT&%CCx9y&6$w;^6jFQD}X;vFmA?^aO}ydYXiTT1bM>pM7{7>v;w;^0z}_v{#k`V0IA z zcF0cICA(#h^vi(kl|k7j`{jTfltXe@j>wQ4m69BjVL2`*M%5qh%$%tH+8*)=d<(7=exZIXIa#!xjgxr@&c_0s^B2!Y8X{kwF8ZskInU$8z z$s>6zPvogQljrh6Udk(ZEpMc~N?fjl)XX;)+v8d9(pZ}5ma8!jsgeKw+ve diff --git a/tests/Test-10.12.6.photoslibrary/private/com.apple.Photos/appPrivateData.plist b/tests/Test-10.12.6.photoslibrary/private/com.apple.Photos/appPrivateData.plist index f8d962c6..8f574f91 100644 --- a/tests/Test-10.12.6.photoslibrary/private/com.apple.Photos/appPrivateData.plist +++ b/tests/Test-10.12.6.photoslibrary/private/com.apple.Photos/appPrivateData.plist @@ -5,7 +5,7 @@ LithiumMessageTracer LastReportedDate - 2019-08-24T02:50:48Z + 2019-12-08T16:44:38Z PXPeopleScreenUnlocked diff --git a/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist b/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist index 9f33ea62..64a53907 100644 --- a/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist +++ b/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotoAnalysisServicePreferences.plist @@ -3,8 +3,8 @@ PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate - 2019-12-07T16:40:40Z + 2019-12-16T02:55:50Z PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate - 2019-12-07T16:40:41Z + 2019-12-16T02:55:50Z diff --git a/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-shm b/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph-tmp.graphdb-shm index ca5a3e0161935b8d90903afe67d1ec68143a5841..fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10 100644 GIT binary patch delta 13 UcmZo@U}|V!nrL9K(cnTo03odfCIA2c delta 13 UcmZo@U}|V!n%JPRQR7BE03%%mZU6uP diff --git a/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb b/tests/Test-10.12.6.photoslibrary/private/com.apple.photoanalysisd/GraphService/PhotosGraph/photosgraph.graphdb index de2fb5288a929144c1ee663147aa1dd417426b20..8bc5d0c55e01bf89d4ec79b292a79fa56512b807 100644 GIT binary patch delta 16084 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 D9;4z| delta 16098 zcmZ9Td05A$ukvfsj36N45Yigd{*P1SJ7kgy&ck zw`y=yQ0vmV)T(u(i&_z_%NOh-)~a8vwys}YT9>NW)~eq<=gtfh`QzN&bIv_?eZP0! zd&329=oh@9Kj6!?om2VW`Al!X^K)~Z`(NH4I**FI`~dsH6{Yh;72m<0pr4ul=lj6j z>B@0ddun;3>s#kP&2xPhdw<7vc`h|Ra6jp~)44;eHm-MH!kp9;maoXWhrVF`#3=DO zy^F=m9+zRdUU!}_8~DB6E7=O#Z#?c>>>6_R3VVvNmi@q0W1F0(_q(n~ zoImpP8-HSNu`(Jlg|C6#Pv0_MGCJMWF5)@iDKxTOA35I?cl(CD4|zWG>@bUK-9L3* z?RitQ83)`uT&J5~`o8j|v&-l)^N{bT+w#s9kMa{d)Ad`rLmcKea1U$obQyQMuRk(( z%H3pPjuoBi(;Qw0{PU9j^=%PmMe|ctJ#E2=70pXk^|mo02xy4Ip=n;-F*-Rb6pa0~ zFl77J#`O@-F-m;8%RhIV%Jgw7G%cwz2G%YS9X?b z1@igN=hZSk^Z%hg07@Uv*EmH}rN~NA$S_WSRKzu^uQDrWiZfH3NOx)2KQhi|niVYYXZSQ5&jb$p1q#B_u!gQ74+LArf@e-yVWK5OX`qLu!rBN-C*q~2Rw=f@KZ zZrFc#R;JwcB`LuiqdA6u!?<=nFBg8#I2C7nf~ZbuM!L&N#Lg6jV|11)RF-T6Q<`c8 zr#C*_pM9&`ZvU{Iw8^oB%R{t6G^e!J#yV$*x|2T8zSs(e8^=_85p|_FJ4PpXM8P

H7T)+L($B*%HeG;=Hb`;uMBr93{bwxv}p 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 WU1e)?b4yu8q^a`Ak6u4>!v6!J8R-20 diff --git a/tests/Test-10.12.6.photoslibrary/resources/moments/analysismetadata.plist b/tests/Test-10.12.6.photoslibrary/resources/moments/analysismetadata.plist index af372a50..e50e7b20 100644 --- a/tests/Test-10.12.6.photoslibrary/resources/moments/analysismetadata.plist +++ b/tests/Test-10.12.6.photoslibrary/resources/moments/analysismetadata.plist @@ -11,6 +11,6 @@ PLLastRevGeoForcedProviderOutOfDateCheckVersionKey 1 PLLastRevGeoVerFileFetchDateKey - 2019-12-07T16:40:32Z + 2019-12-13T18:43:07Z diff --git a/tests/Test-10.12.6.photoslibrary/resources/moments/needsanalysis b/tests/Test-10.12.6.photoslibrary/resources/moments/needsanalysis deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite b/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite index 6d96e0ee758097bad0923c5dc392feb2d1e98d3f..769343038dab344736beda85806c0d21a35a86a3 100644 GIT binary patch delta 197 zcmWm6D-Oay7)9X>{Jh^#9-U5^MW9h^0E-(*5QHE}NQ-E&pt_A3(j{OC!C}}3hJ*NW za?OoDQT&N6fznsAQ2OK&rxI64T=C}Qsg+J=f!vjsegoN(jgcLB8#$6yC{wm`~XX9K==Rv delta 197 zcmWm5D-Oay7)9X>{Jfv#(b9IxECP*U16bThf*=G*LRv(F1=VfTkS+mB2oA$OFdW2} zlPhlWiIY!!36+1<3+10|YE^1WsV(2EJOkxrvrz8J$-bd%$wteLytN$3Dw2b8i&rFT x#he@2E9aaWK?PORP)7qzw9rNeUG&h$|2M!8BaGp~!vsD8gwTjEEplU)j~_hJK;8fV diff --git a/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite-shm b/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite-shm index 6eaaf26a836fa2d149c1b52d84cf385aa138e7da..575a5b55a2f6bf2a7ce0b24a71a789daadd975ee 100644 GIT binary patch delta 155 zcmZo@U}|V!s+V}A%K!pQK+MR%AOOS+|AB<^@*t=5yH-YXo_w(lU}&_REBm&p)o6bM jsp>&yg8LzLHCga1A_nq5HQYp^2IiQq0v_O_Ve{zF8h}N#hie`|6$@zLCckm ztnQ|7v@qgkl%AZ;eVkErvN2B{kX*!503?NZYk}lM-YQ0^%{+V=j6hB)e-V&;!5;ts DE$t%c delta 633 zcmY+?OGs2v90u@noKZAKzvvc?T68H$3Z|ejQX&)~kZh5JRG`q{gQmzCY$VELxL41# zY9X^JS{Q*4w1}ZaZh|0aXp`lX*~8N5;gl2UrbRFN&KX>EF8t2p-upl2a=!^Xcd~w8 zyu=lOtY3(=g3a@wePaE5YxsJ8?0BYm>Cy?VH47nER@c*|Qyt!h#+|A9J>}A$JX4;Q z>yklVAHC^|QmbN!j#gZh8}IrmPf1P&&`)zX(!pv{Z?jr$)1AqmkFG{<9c?=tj`i5R zk^Zxxm>uL|)NgqgJn_@e4n& zj64>Q#Vlr!!4o{jL)^zbq;MP8ki);7 z3eA}l5=jjJkL+3}f(&r<*Bi|;H2ti)>744M?^Qc}rw-9Cs*dJ{Jt8jT3wIkQGwvGtCQ(U$yZh;^Ge}pQ zCi=(OO`kbcblUOIr+s9ZKUV&2A+HXQkGksj9ptqxxwM%~>Q`QZOqKG}{!78$>6YRf hi*D~06N4%f1Ixs~GBL1B3@j4^e<22ziGihK@DH)Pr2YT^ diff --git a/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite.lock b/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite.lock index a1922ade..c714c196 100644 --- a/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite.lock +++ b/tests/Test-10.15.1.photoslibrary/database/Photos.sqlite.lock @@ -7,7 +7,7 @@ hostuuid 9575E48B-8D5F-5654-ABAC-4431B1167324 pid - 423 + 1794 processname photolibraryd uid diff --git a/tests/Test-10.15.1.photoslibrary/database/search/psi.sqlite b/tests/Test-10.15.1.photoslibrary/database/search/psi.sqlite index 7ac8d691c10f14110697e842a71734d83289209f..caab56b4a3edd69496ec93b5850e7e156d0df393 100644 GIT binary patch delta 1705 zcmbW%TWDNG7zgnA_U!EL+0A}mZkvGia%Q$6Xw1ENs*#8#X__W4LLOA`LE79DH1!gV zc9RuRg7hJ)28)PkC`hI8veaP3SPe>vLR4A_r6yHGp`xZqYIBd@ndyVi?#u5#v*(c>~;Y5y0VL@c4a41<;o7GHrp|G4@A(FPwK?PIr1 z-hFcN^2?jC`QvINL(l-;$VGyRhq9s!#~eCMtF(w?R6y707rKn!;1r#t6EsXi^dj}s zQTlZiUBt%N1Y5!uvU}J9wvBJhXEmG0wz9eGA(mK= zMRqqEXLs=ryudoV;OE(Z3J&)3`gr&p4_nx0*@Gz#eH@zEXV?Qu`nQ)$e@{f%--9g2KxIypI+q6Op^gGSrDSQiOafx2Xujy4j@qJW79$v#i z{26C(2s3<^g?yIFf`o{0))DjLPIPZ zbRnQ2Y9^XBxF&RJh?vl%A#6g2hL8z|bqb_O2b8#JLTM6;O^79-$b^z4BuvN z4l1!~LbDPp=G85i@mo7qrU1-$1q$pQhLqSgGg65y6QZ72GQsu4q6sygxNbtFCtzV> zp%UI4NDT9uqEWfMPw=RNpS_)VWAIKk0sxdXUVmY1ubz)j*k+XmJQ3gWzDi`S+U&oJCvK-VpBGQGE+8zig?q?R>RAtd<_-FPOl!4N9iLz z9IL)r?4rB$2mMSx&<(oEZTvF7z|V36Z|5ys#$n#XK~9Tzr&du! zMoaKU!j_EYLSH~e%i(@oM$2F;EQM|GVOWdjLa@eS8Qp@AZo8vTxl9B1pF~*)pMcHq zaaao$MS?O~gW!WZVF>Pkxo|sd#1Ef=IdB`?1FPX~_%zId zTj54n1v6nKbio2gEI1z~S?*{U>qNO3WdnQ^)<+N?L8yayaF-?hpg;=e3Ken>n#qE^f7JiAJ;{~4NYc>2e zwbMF}(hxWDPOju^X78d4)csBlInQ%m--}`~3#?a5D$6y9a2QmgpV& z5PSI`MZDwf|iy0L%Z85Ea%NFN#u*7KPdd`o!K5ns&s?DjY*B{4^X#;-H@jR<7qdi97qeJT7qd)H7qcRf zKVvxaMUNMg65X@LMgE_2#s~Rb zzRXKJPm6S$ZqX`T=MZOd2B)&gNr{?oj5jIbap5qDQ3rGy=R1elDbNL)Gn%+&%mMAD z>D3pfG?SVM%{fg%GwvKQ^~Y!?=Mq}UA%afQ<)VIYL32SfubI=#YGyRkn)43m8qF!q vpk_eRuj$jAlsLjppWx%cG{lcb^qpbNkbVPb4yQ(IXu36BiM3VZf$Dz%Uk^S3 diff --git a/tests/Test-10.15.1.photoslibrary/database/search/psi.sqlite-shm b/tests/Test-10.15.1.photoslibrary/database/search/psi.sqlite-shm index c56e485bc1e897b962b3a21b265232782750c226..794cd7aaa49e020c44de647143afa2124f9db36c 100644 GIT binary patch delta 64 wcmZo@U}|V!njj(3smL$7XmiyC#Rl!@Y2O^@o~*lb`~S7CM>820GiAnkpKVy delta 64 wcmZo@U}|V!njj%@>DQfY8|SZi7QOWf|BOBT6P5%8zcMj1$iXAEF=0VH06Fv_a{vGU diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db b/tests/Test-10.15.1.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db index 90d9b9c0f9aa3556e039f25eb39e18919f2ce587..660e2c9cddb68e027d00dc53f8b049f434e98b1d 100644 GIT binary patch delta 22 dcmZozz|ydQWr8$g$V3@u#*oH@tqF_^_yJYg2Q&Zx delta 22 dcmZozz|ydQWr8%L+e8^>Mz_XA_FF1G)wK(zTXLy?$!l)uE_d>%XW+1CP|kga!2gs$m^R delta 64 vcmZo@U}|V!njj$|WMMJ)bA4D>eWa`UEHwuO;Xsw5JG-~>;*r{zu%I3Q=7<;v diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-shm index 16e828aeafc47360615fa7bea99f5ff1676e9ba6..0f49ab6fdcaca0d6dbf29665b35f29eb1ea1f345 100644 GIT binary patch delta 192 zcmZo@U}|V!s+V}A%K!q55G)W3qy>QZ=!`58rXy3zH<=4LP1+gK8)P;m#dqy>O@|C5=s%&zY)+hi`}G-+o@ugOEnlJ$?<(@0eh uGzttr=KeicH~;crGY0^T7dF%Y diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.AOI.sqlite-wal index 911b1dcd8bfb93c59d303b44657c693cf6f460c3..9725d18c680563931392cffeb88e55bfa4104f91 100644 GIT binary patch delta 397 zcmbQSR`A7pk%kt=7N!>FEi5y_rhjn&8Y(6BP*$wr#UBT-lnq$Q1}Y_zHREXc Tlp{=FDO<3V?dA&?7w`iBu>PlQ delta 17 YcmaFyUS!5v!G;#b7N!>FEi5y_07v2m`Tzg` diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.Nature.sqlite-shm index d9e13d9685f832d6f2daff402e6a9e53e2fb752d..135fc83ecd3a69641706eacd1d8d14de34f9862c 100644 GIT binary patch delta 192 zcmZo@U}|V!s+V}A%K!q55G>#eq=kSuaec8@DZ8^@$egC_E?Z`tZRb9!u#x%3EmGA3 zjRFIZx&M&>RG5juXJX_3i4SZxH!wOmPX6Z#Nf=}!r;o_#^BE2!Qjc@ V#o*20!{EEQk+GF&^B-3hD*!UGIEDZK delta 163 zcmZo@U}|V!s+V}A%K!q55G-H^q=kT3XX%3b%8nNjLgqAWciA%IY=gm?*l*#L`$<&~ tGzttr=Kewy6IYiPNDp{}n_=?$w z+{qA03y7ozRFXHR|MD%FeU1=GONgW;RB~BhLfh;ktMVa|RuD-msN{uNjB}Z)9RETj zts#=uFr9s?Io_|lbs8dR1Cg|WO8Q(q{=JT6-%g06Ekx25Dk(5!O@<&Ohb3zxrfUS}P3{p8wxtA*}9@Hw|#AdOV@ zK%>9_WbS_?02O9pu%6hsd*T9{%{Gi}j+6g6Mab$g=rb5F7%~_!7&DkKm@=3#m@`-~ WSTa~KSTopcc4W-g-25m|gIhNIs6(xoBmtfQ`o;bJwh diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.POI.sqlite-wal index 46632fa6f6fe45a0283c915fcbad2d25dd170bf2..4cd2c6d1550ade11ed1f4c3c06f85d858fba61cd 100644 GIT binary patch delta 405 zcmcbyg8M)>e?tr77N&?RlN%faI8IF8Ec~_Q*W1Yr2GWcMljj&XGa77uV6cIoReGj9&Nu?SKDA zE(Ob&fMrY|G8?k#W}uof9l8`yVW0 z4wf;8$ZYp^nZ5pVN-S8$0xV+zk?~L3aITd5;cu{vC0NE1A~V(5_G$ML)tz7&E3k~! zrcWFB*;5~1nALTm94u}P7Pp3)^>XU|CBem_U>O^*j15GF{Y9-(abr#~SjHACV+)bF Wdf>-O=Qqm>!7_GW89SiN0)7CmIH4i{ delta 13 UcmX@m&3|JBcS8%~7N&?R04kjY%>V!Z diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-shm index ef176a0e35e3d122e8839b7621724c8667579733..4736b98cd3ed91acb32d17f58593f20350e7fe51 100644 GIT binary patch delta 194 zcmZo@U}|V!s+V}A%K!q55G;@gq(y+()X%Nx#^Sx(ed9tdZJYY2>Fe@sUpV$Ad?i&q z&?qnfnfo6JK!uqY5;ivaGfp;OwAp-t@sq>ke@+Rq!3-e`p$uUR;S3QBkql7`(F`#R Yu?%qx@eBzJiJLDnHZpDg tjRFIZx&M&>RG5h&aATuC<7OVFPY#n6m~1Bhb4u7O#59j-^B-3hD*!AMH3t9y diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSBusinessCategoryCache.ROI.sqlite-wal index 5cb86691468e6bb32474d90e5032c2c89f39d46e..f900bb9aac2cc948ae00a9b18023d65006ab7ecd 100644 GIT binary patch delta 458 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 delta 7155 zcmY+JcX(Ar8piM3^pM6mRA~`uizbK#1q5=lh=$cA=AfYNDj?EC4T39eC6^+(H!N)+ zFH#hc-a~|hBIE!GBoH7OAOVy`QJRQ=V8O!9eDQgf@1OkfzVnqcch3A~PO{EMW}S_g z*(fZ+ JjjSI(T6>;mGA1!O&%YxkZ{`QysHQoM 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 diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSContactCache.sqlite-shm index 15b02dc9f2cf99b388a5721ee1567cdd8a843160..311ddda97ce892a69da92d037a3df305657d7785 100644 GIT binary patch delta 294 zcmZo@U}|V!s+V}A%K!q55G?SPnSntW$UbmYcdE99-}aiTkDsRZxLzx}vefq$oAwb> z)q~6f0TBHk2|z>{m>Aw}Y;5Nj1zFDl#DYM~0>rF9tTfq>O_))6^I!hOhMTWA+A*>| zWPZW?X0xF4Q>Mv(T!k240+|OHH(zkKVPt#-VW0CdU}S#6{1(VN&A9oD?=2SQr_9fR zJbA{=CxSIt7#{)Iml-!7iM+zY_zcKaWMX^`q+T;^RuHgYXM7A}3oviKRiVZX02@za AL;wH) delta 234 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 delta 135 zcmV~$$58?S006)_vIIdS3vwXQKn4}mPUwZl7Ge>;tb_-RFvEl0gamX(>E|QGWP7nt2YxS^ diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSLocationCache.sqlite-shm index a3fdd593b68a993106cfdceed481db4f3041d0f2..5c90dc4822782d0261a05de03dd08c8c5b7da8dc 100644 GIT binary patch delta 55 ucmZo@U}|V!;*@x#%K!!wIpqa6OJ?&qbL@&h7GwnrPK;G%blTWhUk?CcehrcU delta 55 vcmZo@U}|V!;*@x#%K!pQ6FKDt&q`+V<#OzbKo(>L3r>txW;EN_SYHnSZfp(` diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-shm index ffc30a4954d2d46ddc1a35afb06958ebb84df03f..871cd4a010e1d63acea5e5ebbceeaa1b0a40e114 100644 GIT binary patch delta 200 zcmZo@U}|V!s+V}A%K!q55G=43$Pfaue_VdC;H{~3#r4IZ1nupP4A{Le{`S$PiQT*i5f^BET~E@WK9xR`MX i<5I?DjLR8UFs@`=#kiVr4ddF)AJ`TOZvGH1paB4$<3^MK delta 165 zcmZo@U}|V!s+V}A%K!q55G*ho$PfauPu-k6)9||S>D4(7clRzl?DdIlOX8AOOsS-* w2bm25AanmC0f;CA6T_^Hjm2!6ZP*W4PYz)B*!<5)k9o5r`w_v-AHoGR0M#QoU;qFB diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/CLSPublicEventCache.sqlite-wal index df9bc05678b1c5dd69016539362c3c8d0a002b0e..f85bc76b5185395beb36c5109a628fb4ffb52371 100644 GIT binary patch delta 567 zcmXBMTPQ;T90%YIX2)gDaUG$#JSfVGJnco%S`kfBk|^bpQd1NU+QXlcTC#^VyPe&4 z&PKF_QW2@Cc&j9QY`HY?Y)4|bT2_{RTICVGl(Ab6NBCyOzS(4yIaW27udi{x zsbCJ61IFtbGGeaLILrxi!j2Nshsf57Fc-`Pb95i{C(n{kFgMH%`&~14*&l8cFaajO zRwgNMe=fJeJTMPzS2J{-W?(8|UYHlw(ml}oGHAYq`CvZSrgo-cs&f7Z=7;%V&MIPz z(bqj#02YAFUM-jj6nP>2zPVdCqmm%KFJ z+q!LXfPnnQ@R$4oFbVHUj{Pf-l<(XeAiyC27cE_0E-A#pR5-a&L1gj-1y*Fdd4j?N zg#O>^kJKNtG1+WxFhJ5j)iJ&GkFUyQpeVC|C@atDwYkxNNkEhxS%>Ux-OrEt{BLc3P=KW4=8s%&U*^mTs18nK9f2)uV!e}F z6*mh^L~_*n8aE#$?p+a^H5P8>RWUPiax-%^bk#L6G&0mRu{3tmbu_nh(={})aJ*4ae>XxDlE$?6v^;p%;3{>m~g zaDTVC;3ATG9WRMnFLdTHZ|-=AB>KqzwB}{LJ;j?Bd_)p03ie-S!m(q+_8p9jNW#I5 z$0XbT+~(bWK@eFunq`Xg9i@3wm+F?R7!clgAp!pJ=u(|Zyb8&EBI z8m@V90cZX9?Gq+3CPFM>Wzk>`Wt`qPi3w_7B-}|&?3~|@%%5~?`-(-3>ipA!%5TEJZ^D0r zfBp6ZVW!`F6Ax%lUsc4U!O9Bv8HOj(0@dNbZjKv|m!8|M@EJK!t9REnO27EVz1@PD zX%F9Y2avCrr{_*$vV?gK?lJ|K%TAs+TyU^$ei6uJZ2a6HmvO_~_MdP1x*{eORyMH1 z`VRq_c-)AHh~f;R*%$A#T5Zoz2Dzi-5KecXMN6kO|CFR98(6kC7&A5TP4@$7WSd@n z2E|~xniAz&wD@mi-OgU7o6Wo3 bVG9#K-*kN;CT*bOPH$wi#A_NbH7o%DaYtE{ delta 1879 zcmX@m!F`~E+rqq_t%*VRkpu&S00RijI4b${&!Vm?yBJQab}M%F0SYmKFibpMWYW_G zo;yBG4iJ#v82*x9049-m^VMq$tt&@22MBNoz(p^)HJLuEx8a@Ks30xzT`0K$IO>M^(Yo|H|ts+BQEZK+^HzX5sPKRuLvp9h}HItoOV)#B}QX z+RXwJksPI=BsQB#o+n_l#=_0KD(0rn=B6&LhPnop7ACqTPOcWZj?R{rx<-~R=7w(0 z&PFaS#+(1IGh~7X%Jf-bU)VSf{od@b5y{lEcmFz9{Zp3!+I60Pvie0!xO&5*Z5iL! zE&jK;;3ATGhsw5_=>|N~n>!vNiRz|5@cAD5k%W6y zk6e+moMgNGf*`Um|I(sUyH@OdwEcx5vT)b*)jJNoi@3SX2w60G!nym3tnL$m7GC9_ z{x*=&81C**GZ%GSzPwyvyFn1+9scP($xJ$MxmSgIBa&tdY~JpX#Ms3@eO(cg3M2FM zdPT+%QBVwU!{YPcqO0$xvA#3jo=}8rYnkSpyxlbuo^7vaVl?2N?l6f-hmmo*q7akF z^p_JEvr+Aexw^_XfA_h#?Gq+3CPM6DWzk>`Wt`rB2xe_0+-19+W0`l>-P^W(#Ue&^ z{^|9Hm`u@)RtKj6edi5bDOC*hP)6Y9HBI0z8 zi;QdDD+38gu&up>6l@+!W&eyb?qA&g;SvtxRthm?Pv=Qu)RBV))18B&w`SM`{o(?K z9V@>H1OE;F_53E=6NH(5^G!UUJ^frEqXsK0+|L-^M+1PC1bGzIzicWsp;DY$W6qv^eAPO?=#ZzHR>Y24kiszUg{G zz&K-@etILLC3YVHQx#ea{%Z_7H@_n7IwS^jgP9Nse{EqN+k9fwU}Oge7!l!y7QLI(3wG*t z&wsN0K`|3jaj>vVjOB-pfcN$v%}kzr)4vKbX*05dGL%%}N+ zT+hL`6X<%royhKA3UNOx2RK1CP6B2^qP>Dh0<+5Yt*ng?p0!`G{if8m<#4qKS``KDJ-0(zcfy1o<8^F$a5OCE**i4p1H diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PGSearchComputationCache.plist index 05b10a46f54955820ba5fb6d9430129c09688f0b..5a74827a247437a8ac9e1ea94fc22298f75e28dc 100644 GIT binary patch delta 13 VcmZ3&x`cJZRYpdg$=4Xq0RSU91wH@( delta 13 VcmZ3&x`cJZRYpeZ$=4Xq0RSU~1x)|| diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist index 5bbae0b4..221843bf 100644 --- a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist +++ b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotoAnalysisServicePreferences.plist @@ -3,24 +3,24 @@ BackgroundHighlightCollection - 2019-12-14T18:19:30Z + 2019-12-15T18:49:56Z BackgroundHighlightEnrichment - 2019-12-14T18:19:29Z + 2019-12-15T18:49:35Z BackgroundJobAssetRevGeocode - 2019-12-14T18:19:30Z + 2019-12-15T20:55:19Z BackgroundJobSearch - 2019-12-14T18:19:30Z + 2019-12-15T18:49:56Z BackgroundPeopleSuggestion - 2019-12-14T18:19:28Z + 2019-12-15T18:49:35Z BackgroundUserBehaviorProcessor - 0000-12-30T00:00:00Z + 2019-12-15T18:49:56Z PhotoAnalysisGraphLastBackgroundGraphConsistencyUpdateJobDateKey - 2019-12-14T18:19:28Z + 2019-12-15T20:55:19Z PhotoAnalysisGraphLastBackgroundGraphRebuildJobDate - 2019-12-14T18:19:28Z + 2019-12-15T18:49:35Z PhotoAnalysisGraphLastBackgroundMemoryGenerationJobDate - 2019-12-10T06:45:58Z + 2019-12-15T20:55:19Z SiriPortraitDonation - 0000-12-30T00:00:00Z + 2019-12-15T18:49:56Z diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/graph/PhotosGraph/photosgraph.kgdb index 15c03a40fe9c590aa2cd8c06c03e8d08c478b561..e6afe24e80c6e7a304b4915ef64c8de5caacf427 100644 GIT binary patch delta 11241 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 Kr2LqC;(q{atQ diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist index fb706463..19f59c1c 100644 --- a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist +++ b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/PhotoAnalysisServicePreferences.plist @@ -3,8 +3,8 @@ FaceIDModelLastGenerationKey - 2019-12-10T06:45:58Z + 2019-12-15T18:49:56Z LastContactClassificationKey - 2019-12-10T06:46:00Z + 2019-12-15T18:49:58Z diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist index c36206de..736db69d 100644 --- a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist +++ b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/faceWorkerState.plist @@ -3,7 +3,7 @@ IncrementalPersonProcessingStage - 6 + 0 PersonBuilderLastMinimumFaceGroupSizeForCreatingMergeCandidates 15 PersonBuilderMergeCandidatesEnabled diff --git a/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/vnpersonsmodel.bin b/tests/Test-10.15.1.photoslibrary/private/com.apple.photoanalysisd/caches/vision/vnpersonsmodel.bin index 34dcccbdbe4dafdd55d9adbb61df89a7634f3fa9..8a59c8441713db81a32fdebda727bebb3ebb7be8 100644 GIT binary patch delta 70 zcmX?aecpOP3)|)BS4Cf47j`jAm;bM4VEAys$L&6lHi&iw(~NhU%>LI;KFBPwc`q}Q Xlz_tin%oo~<(ZkMvV}FTim(6xLDU>F delta 70 zcmX?aecpOP3)}hK!Eq7}3%i)5^ZwT}Fg&ok{rn}6E@-<5rWt#yb^q5-KFBPwc`q}Q Xl)&1XPdN7y8PNVBmWIVmu#} diff --git a/tests/test_export_catalina_10_15_1.py b/tests/test_export_catalina_10_15_1.py index a3ce57ac..df9159f6 100644 --- a/tests/test_export_catalina_10_15_1.py +++ b/tests/test_export_catalina_10_15_1.py @@ -57,6 +57,7 @@ UUID_DICT = { "export": "D79B8D77-BFFC-460B-9312-034F2877D35B", # "Pumkins2.jpg" } + def test_export_1(): # test basic export # get an unedited image and export it using default filename @@ -390,3 +391,75 @@ def test_export_13(): with pytest.raises(Exception) as e: assert photos[0].export(dest) assert e.type == type(FileNotFoundError()) + + +def test_dd_to_dms_str_1(): + import osxphotos + + lat_str, lon_str = osxphotos.dd_to_dms_str( + 34.559331096, 69.206499174 + ) # Kabul, 34°33'33.59" N 69°12'23.40" E + + assert lat_str == "34 deg 33' 33.59\" N" + assert lon_str == "69 deg 12' 23.40\" E" + + +def test_dd_to_dms_str_2(): + import osxphotos + + lat_str, lon_str = osxphotos.dd_to_dms_str( + -34.601997592, -58.375665164 + ) # Buenos Aires, 34°36'7.19" S 58°22'32.39" W + + assert lat_str == "34 deg 36' 7.19\" S" + assert lon_str == "58 deg 22' 32.39\" W" + + +def test_dd_to_dms_str_3(): + import osxphotos + + lat_str, lon_str = osxphotos.dd_to_dms_str( + -1.2666656, 36.7999968 + ) # Nairobi, 1°15'60.00" S 36°47'59.99" E + + assert lat_str == "1 deg 15' 60.00\" S" + assert lon_str == "36 deg 47' 59.99\" E" + + +def test_dd_to_dms_str_4(): + import osxphotos + + lat_str, lon_str = osxphotos.dd_to_dms_str( + 38.889248, -77.050636 + ) # DC: 38° 53' 21.2928" N, 77° 3' 2.2896" W + + assert lat_str == "38 deg 53' 21.29\" N" + assert lon_str == "77 deg 3' 2.29\" W" + + +def test_exiftool_json_sidecar(): + import osxphotos + import json + + photosdb = osxphotos.PhotosDB(dbfile=PHOTOS_DB) + photos = photosdb.photos(uuid=[UUID_DICT["location"]]) + + json_expected = json.loads( + """ + [{"FileName": "DC99FBDD-7A52-4100-A5BB-344131646C30.jpeg", + "Title": "St. James\'s Park", + "TagsList": ["London 2018", "St. James\'s Park", "England", "United Kingdom", "UK", "London"], + "Keywords": ["London 2018", "St. James\'s Park", "England", "United Kingdom", "UK", "London"], + "GPSLatitude": "51 deg 30\' 12.86\\" N", + "GPSLongitude": "0 deg 7\' 54.50\\" W", + "GPSPosition": "51 deg 30\' 12.86\\" N, 0 deg 7\' 54.50\\" W", + "GPSLatitudeRef": "North", "GPSLongitudeRef": "West", + "DateTimeOriginal": "2018:10:13 09:18:12", "OffsetTimeOriginal": "-04:00"}] + """ + ) + + json_got = photos[0]._exiftool_json_sidecar() + json_got = json.loads(json_got) + + assert sorted(json_got[0].items()) == sorted(json_expected[0].items()) +