Changed path() to return absolute path and fixed tests

This commit is contained in:
Rhet Turnbull
2019-11-23 14:48:38 -08:00
parent 243492df88
commit 83186a655d
7 changed files with 35 additions and 24 deletions

View File

@@ -96,6 +96,7 @@ def main():
print( print(
p.uuid, p.uuid,
p.filename(), p.filename(),
p.original_filename(),
p.date(), p.date(),
p.description(), p.description(),
p.name(), p.name(),
@@ -286,7 +287,10 @@ PhotosDB.photos() returns a list of PhotoInfo objects. Each PhotoInfo object re
Returns the universally unique identifier (uuid) of the photo. This is how Photos keeps track of individual photos within the database. Returns the universally unique identifier (uuid) of the photo. This is how Photos keeps track of individual photos within the database.
#### `filename()` #### `filename()`
Returns the filename of the photo Returns the filename of the photo on disk
#### `original_filename()`
Returns the original filename of the photo when it was imported to Photos. Photos 5.0+ renames the photo when it adds the file to the library using UUID. For Photos 4.0 and below, filename() == original_filename()
#### `date()` #### `date()`
Returns the date of the photo as a datetime.datetime object Returns the date of the photo as a datetime.datetime object
@@ -307,7 +311,7 @@ Returns a list of albums the photo is contained in
Returns a list of the names of the persons in the photo Returns a list of the names of the persons in the photo
#### `path()` #### `path()`
Returns the path to the photo on disk as a string. Note: this returns the path to the *original* unedited file (see `hasadjustments()`). If the file is missing on disk, path=`None` (see `ismissing()`) Returns the absolute path to the photo on disk as a string. Note: this returns the path to the *original* unedited file (see `hasadjustments()`). If the file is missing on disk, path=`None` (see `ismissing()`)
#### `ismissing()` #### `ismissing()`
Returns `True` if the original image file is missing on disk, otherwise `False`. This can occur if the file has been uploaded to iCloud but not yet downloaded to the local library or if the file was deleted or imported from a disk that has been unmounted. Note: this status is set by Photos and osxphotos does not verify that the file path returned by `path()` actually exists. It merely reports what Photos has stored in the library database. Returns `True` if the original image file is missing on disk, otherwise `False`. This can occur if the file has been uploaded to iCloud but not yet downloaded to the local library or if the file was deleted or imported from a disk that has been unmounted. Note: this status is set by Photos and osxphotos does not verify that the file path returned by `path()` actually exists. It merely reports what Photos has stored in the library database.

View File

@@ -46,7 +46,7 @@ _PHOTOS_5_VERSION = "6000"
_TESTED_OS_VERSIONS = ["12", "13", "14", "15"] _TESTED_OS_VERSIONS = ["12", "13", "14", "15"]
# set _debug = True to enable debug output # set _debug = True to enable debug output
_debug = False _debug = True
logging.basicConfig( logging.basicConfig(
level=logging.DEBUG, level=logging.DEBUG,
format="%(asctime)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s", format="%(asctime)s - %(levelname)s - %(filename)s - %(lineno)d - %(message)s",
@@ -155,7 +155,7 @@ class PhotosDB:
# TODO: replace os.path with pathlib # TODO: replace os.path with pathlib
# TODO: clean this up -- we'll already know library_path # TODO: clean this up -- we'll already know library_path
library_path = os.path.dirname(dbfile) library_path = os.path.dirname(os.path.abspath(dbfile))
(library_path, _) = os.path.split(library_path) (library_path, _) = os.path.split(library_path)
if int(self._db_version) < int(_PHOTOS_5_VERSION): if int(self._db_version) < int(_PHOTOS_5_VERSION):
masters_path = os.path.join(library_path, "Masters") masters_path = os.path.join(library_path, "Masters")
@@ -1136,7 +1136,7 @@ class PhotoInfo:
) )
else: else:
photopath = None photopath = None
logging.debug("WARNING: masterFingerprint null", pformat(self.__info)) logging.debug(f"WARNING: masterFingerprint null {pformat(self.__info)}")
# TODO: fix the logic for isMissing # TODO: fix the logic for isMissing
if self.__info["isMissing"] == 1: if self.__info["isMissing"] == 1:

View File

@@ -116,15 +116,17 @@ def test_attributes():
assert len(photos) == 1 assert len(photos) == 1
p = photos[0] p = photos[0]
assert p.keywords() == ["Kids"] assert p.keywords() == ["Kids"]
assert p.original_filename() == "Pumkins2.jpg"
assert p.filename() == "Pumkins2.jpg" assert p.filename() == "Pumkins2.jpg"
assert p.date() == datetime.datetime(2018, 9, 28, 16, 7, 7,0,datetime.timezone(datetime.timedelta(seconds=-14400))) assert p.date() == datetime.datetime(
2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400))
)
assert p.description() == "Girl holding pumpkin" assert p.description() == "Girl holding pumpkin"
assert p.name() == "I found one!" assert p.name() == "I found one!"
assert p.albums() == ["Pumpkin Farm"] assert p.albums() == ["Pumpkin Farm"]
assert p.persons() == ["Katie"] assert p.persons() == ["Katie"]
assert ( assert p.path().endswith(
p.path() "/tests/Test-10.12.6.photoslibrary/Masters/2019/08/24/20190824-030824/Pumkins2.jpg"
== "./tests/Test-10.12.6.photoslibrary/Masters/2019/08/24/20190824-030824/Pumkins2.jpg"
) )
assert p.ismissing() == False assert p.ismissing() == False

View File

@@ -125,9 +125,8 @@ def test_attributes():
assert p.name() == "I found one!" assert p.name() == "I found one!"
assert p.albums() == ["Pumpkin Farm"] assert p.albums() == ["Pumpkin Farm"]
assert p.persons() == ["Katie"] assert p.persons() == ["Katie"]
assert ( assert p.path().endswith(
p.path() "tests/Test-10.15.1.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg"
== "tests/Test-10.15.1.photoslibrary/originals/D/D79B8D77-BFFC-460B-9312-034F2877D35B.jpeg"
) )
assert p.ismissing() == False assert p.ismissing() == False

View File

@@ -115,15 +115,17 @@ def test_attributes():
assert len(photos) == 1 assert len(photos) == 1
p = photos[0] p = photos[0]
assert p.keywords() == ["Kids"] assert p.keywords() == ["Kids"]
assert p.original_filename() == "Pumkins2.jpg"
assert p.filename() == "Pumkins2.jpg" assert p.filename() == "Pumkins2.jpg"
assert p.date() == datetime.datetime(2018, 9, 28, 16, 7, 7,0,datetime.timezone(datetime.timedelta(seconds=-14400))) assert p.date() == datetime.datetime(
2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400))
)
assert p.description() == "Girl holding pumpkin" assert p.description() == "Girl holding pumpkin"
assert p.name() == "I found one!" assert p.name() == "I found one!"
assert p.albums() == ["Pumpkin Farm"] assert p.albums() == ["Pumpkin Farm"]
assert p.persons() == ["Katie"] assert p.persons() == ["Katie"]
assert ( assert p.path().endswith(
p.path() "/tests/Test-10.13.6.photoslibrary/Masters/2019/07/26/20190726-203227/Pumkins2.jpg"
== "./tests/Test-10.13.6.photoslibrary/Masters/2019/07/26/20190726-203227/Pumkins2.jpg"
) )
assert p.ismissing() == False assert p.ismissing() == False

View File

@@ -115,15 +115,17 @@ def test_attributes():
assert len(photos) == 1 assert len(photos) == 1
p = photos[0] p = photos[0]
assert p.keywords() == ["Kids"] assert p.keywords() == ["Kids"]
assert p.original_filename() == "Pumkins2.jpg"
assert p.filename() == "Pumkins2.jpg" assert p.filename() == "Pumkins2.jpg"
assert p.date() == datetime.datetime(2018, 9, 28, 16, 7, 7,0,datetime.timezone(datetime.timedelta(seconds=-14400))) assert p.date() == datetime.datetime(
2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400))
)
assert p.description() == "Girl holding pumpkin" assert p.description() == "Girl holding pumpkin"
assert p.name() == "I found one!" assert p.name() == "I found one!"
assert p.albums() == ["Pumpkin Farm"] assert p.albums() == ["Pumpkin Farm"]
assert p.persons() == ["Katie"] assert p.persons() == ["Katie"]
assert ( assert p.path().endswith(
p.path() "/tests/Test-10.14.5.photoslibrary/Masters/2019/07/27/20190727-131650/Pumkins2.jpg"
== "./tests/Test-10.14.5.photoslibrary/Masters/2019/07/27/20190727-131650/Pumkins2.jpg"
) )
assert p.ismissing() == False assert p.ismissing() == False

View File

@@ -115,15 +115,17 @@ def test_attributes():
assert len(photos) == 1 assert len(photos) == 1
p = photos[0] p = photos[0]
assert p.keywords() == ["Kids"] assert p.keywords() == ["Kids"]
assert p.original_filename() == "Pumkins2.jpg"
assert p.filename() == "Pumkins2.jpg" assert p.filename() == "Pumkins2.jpg"
assert p.date() == datetime.datetime(2018, 9, 28, 16, 7, 7,0,datetime.timezone(datetime.timedelta(seconds=-14400))) assert p.date() == datetime.datetime(
2018, 9, 28, 16, 7, 7, 0, datetime.timezone(datetime.timedelta(seconds=-14400))
)
assert p.description() == "Girl holding pumpkin" assert p.description() == "Girl holding pumpkin"
assert p.name() == "I found one!" assert p.name() == "I found one!"
assert p.albums() == ["Pumpkin Farm"] assert p.albums() == ["Pumpkin Farm"]
assert p.persons() == ["Katie"] assert p.persons() == ["Katie"]
assert ( assert p.path().endswith(
p.path() "/tests/Test-10.14.6.photoslibrary/Masters/2019/07/27/20190727-131650/Pumkins2.jpg"
== "./tests/Test-10.14.6.photoslibrary/Masters/2019/07/27/20190727-131650/Pumkins2.jpg"
) )
assert p.ismissing() == False assert p.ismissing() == False