22from urllib .parse import quote_plus
33
44from plexapi import media , utils
5- from plexapi .base import PlexPartialObject
5+ from plexapi .base import Playable , PlexPartialObject
66from plexapi .exceptions import BadRequest , NotFound
77
88
@@ -106,7 +106,7 @@ def download(self, savepath=None, keep_original_name=False, showstatus=False):
106106
107107
108108@utils .registerPlexObject
109- class Photo (PlexPartialObject ):
109+ class Photo (PlexPartialObject , Playable ):
110110 """ Represents a single photo.
111111
112112 Attributes:
@@ -116,6 +116,7 @@ class Photo(PlexPartialObject):
116116 fields (list): List of :class:`~plexapi.media.Field`.
117117 index (sting): Index number of this photo.
118118 key (str): API URL (/library/metadata/<ratingkey>).
119+ librarySectionID (int): :class:`~plexapi.library.LibrarySection` ID.
119120 listType (str): Hardcoded as 'photo' (useful for search filters).
120121 media (TYPE): Unknown
121122 originallyAvailableAt (datetime): Datetime this photo was added to Plex.
@@ -135,11 +136,13 @@ class Photo(PlexPartialObject):
135136
136137 def _loadData (self , data ):
137138 """ Load attribute values from Plex XML response. """
139+ Playable ._loadData (self , data )
138140 self .listType = 'photo'
139141 self .addedAt = utils .toDatetime (data .attrib .get ('addedAt' ))
140142 self .fields = self .findItems (data , etag = 'Field' )
141143 self .index = utils .cast (int , data .attrib .get ('index' ))
142144 self .key = data .attrib .get ('key' )
145+ self .librarySectionID = data .attrib .get ('librarySectionID' )
143146 self .originallyAvailableAt = utils .toDatetime (
144147 data .attrib .get ('originallyAvailableAt' ), '%Y-%m-%d' )
145148 self .parentKey = data .attrib .get ('parentKey' )
@@ -154,6 +157,12 @@ def _loadData(self, data):
154157 self .media = self .findItems (data , media .Media )
155158 self .tag = self .findItems (data , media .Tag )
156159
160+ @property
161+ def thumbUrl (self ):
162+ """Return URL for the thumbnail image."""
163+ key = self .firstAttr ('thumb' , 'parentThumb' , 'granparentThumb' )
164+ return self ._server .url (key , includeToken = True ) if key else None
165+
157166 def photoalbum (self ):
158167 """ Return this photo's :class:`~plexapi.photo.Photoalbum`. """
159168 return self .fetchItem (self .parentKey )
0 commit comments