Added date_modified to PhotoInfo

This commit is contained in:
Rhet Turnbull
2020-01-25 08:07:50 -08:00
parent fd8d466e05
commit 67b0ae0bf6
9 changed files with 110 additions and 27 deletions

View File

@@ -46,7 +46,7 @@ def get_photos_db(*db_options):
click.echo(f"Using Photos library: {db}", err=True)
return db
else:
return None
return None
# Click CLI object & context settings
@@ -863,9 +863,11 @@ def print_photo_info(photos, json=False):
"path_live_photo",
"iscloudasset",
"incloud",
"date_modified",
]
)
for p in photos:
date_modified_iso = p.date_modified.isoformat() if p.date_modified else None
dump.append(
[
p.uuid,
@@ -895,6 +897,7 @@ def print_photo_info(photos, json=False):
p.path_live_photo,
p.iscloudasset,
p.incloud,
date_modified_iso,
]
)
for row in dump:

View File

@@ -1,3 +1,3 @@
""" version info """
__version__ = "0.22.5"
__version__ = "0.22.6"

View File

@@ -64,6 +64,20 @@ class PhotoInfo:
imagedate_utc = imagedate.astimezone(tz=tz)
return imagedate_utc
@property
def date_modified(self):
""" image modification date as timezone aware datetime object
or None if no modification date set """
imagedate = self._info["lastmodifieddate"]
if imagedate:
seconds = self._info["imageTimeZoneOffsetSeconds"] or 0
delta = timedelta(seconds=seconds)
tz = timezone(delta)
imagedate_utc = imagedate.astimezone(tz=tz)
return imagedate_utc
else:
return None
@property
def tzoffset(self):
""" timezone offset from UTC in seconds """
@@ -630,6 +644,9 @@ class PhotoInfo:
exif["DateTimeOriginal"] = datetimeoriginal
exif["OffsetTimeOriginal"] = offsettime
if self.date_modified is not None:
exif["ModifyDate"] = self.date_modified.strftime("%Y:%m:%d %H:%M:%S")
json_str = json.dumps([exif])
return json_str
@@ -660,11 +677,16 @@ class PhotoInfo:
return f"osxphotos.{self.__class__.__name__}(db={self._db}, uuid='{self._uuid}', info={self._info})"
def __str__(self):
""" string representation of PhotoInfo object """
date_iso = self.date.isoformat()
date_modified_iso = self.date_modified.isoformat() if self.date_modified else None
info = {
"uuid": self.uuid,
"filename": self.filename,
"original_filename": self.original_filename,
"date": str(self.date),
"date": date_iso,
"description": self.description,
"title": self.title,
"keywords": self.keywords,
@@ -688,11 +710,15 @@ class PhotoInfo:
"path_live_photo": self.path_live_photo,
"iscloudasset": self.iscloudasset,
"incloud": self.incloud,
"date_modified": date_modified_iso,
}
return yaml.dump(info, sort_keys=False)
def json(self):
""" return JSON representation """
date_modified_iso = self.date_modified.isoformat() if self.date_modified else None
pic = {
"uuid": self.uuid,
"filename": self.filename,
@@ -721,6 +747,7 @@ class PhotoInfo:
"path_live_photo": self.path_live_photo,
"iscloudasset": self.iscloudasset,
"incloud": self.incloud,
"date_modified": date_modified_iso,
}
return json.dumps(pic)

View File

@@ -94,7 +94,7 @@ class PhotosDB:
if dbfile:
# shouldn't pass via both *args and dbfile=
raise TypeError(
f"photos database path must be specified as argument or named parameter dbfile but not both: args: {args}, dbfile: {dbfile}",
f"photos database path must be specified as argument or named parameter dbfile but not both: args: {dbfile_}, dbfile: {dbfile}",
dbfile_,
dbfile,
)
@@ -532,19 +532,10 @@ class PhotosDB:
self._dbphotos[uuid]["modelID"] = row[1]
self._dbphotos[uuid]["masterUuid"] = row[2]
self._dbphotos[uuid]["filename"] = row[3]
try:
self._dbphotos[uuid]["lastmodifieddate"] = datetime.fromtimestamp(
row[4] + td
)
except:
self._dbphotos[uuid]["lastmodifieddate"] = datetime.fromtimestamp(
row[5] + td
)
self._dbphotos[uuid]["imageDate"] = datetime.fromtimestamp(
row[5] + td
) # - row[9], timezone.utc)
self._dbphotos[uuid]["lastmodifieddate"] = (
datetime.fromtimestamp(row[4] + td) if row[4] is not None else None
)
self._dbphotos[uuid]["imageDate"] = datetime.fromtimestamp(row[5] + td)
self._dbphotos[uuid]["mainRating"] = row[6]
self._dbphotos[uuid]["hasAdjustments"] = row[7]
self._dbphotos[uuid]["hasKeywords"] = row[8]
@@ -647,7 +638,6 @@ class PhotosDB:
JOIN RKModelResource on RKModelResource.attachedModelId = RKVersion.modelId
WHERE RKVersion.isInTrash = 0 """
)
# get info on path of live photo movie
# Order of results:
# 0 RKVersion.uuid
@@ -1008,11 +998,9 @@ class PhotosDB:
info["masterUuid"] = None
info["masterFingerprint"] = row[1]
info["name"] = row[2]
try:
info["lastmodifieddate"] = datetime.fromtimestamp(row[4] + td)
except:
info["lastmodifieddate"] = datetime.fromtimestamp(row[5] + td)
info["lastmodifieddate"] = (
datetime.fromtimestamp(row[4] + td) if row[4] is not None else None
)
info["imageDate"] = datetime.fromtimestamp(row[5] + td)
info["imageTimeZoneOffsetSeconds"] = row[6]
info["hidden"] = row[9]