Skip to content
1 change: 1 addition & 0 deletions pyicloud/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ def __init__(

self.user = {"accountName": apple_id, "password": password}
self.data = {}

self.params = {}
self.client_id = client_id or ("auth-%s" % str(uuid1()).lower())
self.with_family = with_family
Expand Down
29 changes: 24 additions & 5 deletions pyicloud/services/photos.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,10 +179,10 @@ def albums(self):
continue

# TODO: Handle subfolders # pylint: disable=fixme
if folder["recordName"] == "----Root-Folder----" or (
folder["fields"].get("isDeleted")
and folder["fields"]["isDeleted"]["value"]
):
if folder['recordName'] in ('----Root-Folder----',
'----Project-Root-Folder----') or \
(folder['fields'].get('isDeleted') and
folder['fields']['isDeleted']['value']):
continue

folder_id = folder["recordName"]
Expand Down Expand Up @@ -498,6 +498,13 @@ def __init__(self, service, master_record, asset_record):

self._versions = None

ITEM_TYPES = {
u"public.heic": u"image",
u"public.jpeg": u"image",
u"public.png": u"image",
u"com.apple.quicktime-movie": u"movie"
}

PHOTO_VERSION_LOOKUP = {
u"original": u"resOriginal",
u"medium": u"resJPEGMed",
Expand Down Expand Up @@ -534,6 +541,7 @@ def created(self):

@property
def asset_date(self):

"""Gets the photo asset date."""
try:
return datetime.fromtimestamp(
Expand All @@ -557,17 +565,28 @@ def dimensions(self):
self._master_record["fields"]["resOriginalHeight"]["value"],
)

@property
def item_type(self):
item_type = self._master_record['fields']['itemType']['value']
if item_type in self.ITEM_TYPES:
return self.ITEM_TYPES[item_type]
if self.filename.lower().endswith(('.heic', '.png', '.jpg', '.jpeg')):
return 'image'
return 'movie'

@property
def versions(self):
"""Gets the photo versions."""
if not self._versions:
self._versions = {}
if "resVidSmallRes" in self._master_record["fields"]:
if self.item_type == "movie":

typed_version_lookup = self.VIDEO_VERSION_LOOKUP
else:
typed_version_lookup = self.PHOTO_VERSION_LOOKUP

for key, prefix in typed_version_lookup.items():

if "%sRes" % prefix in self._master_record["fields"]:
fields = self._master_record["fields"]
version = {"filename": self.filename}
Expand Down