Ejemplo n.º 1
0
    def _loadData(self, data):
        """ Load attribute values from Plex XML response. """
        Video._loadData(self, data)
        Playable._loadData(self, data)
        self._seasonNumber = None  # cached season number
        self.audienceRating = utils.cast(float,
                                         data.attrib.get('audienceRating'))
        self.audienceRatingImage = data.attrib.get('audienceRatingImage')
        self.chapters = self.findItems(data, media.Chapter)
        self.chapterSource = data.attrib.get('chapterSource')
        self.collections = self.findItems(data, media.Collection)
        self.contentRating = data.attrib.get('contentRating')
        self.directors = self.findItems(data, media.Director)
        self.duration = utils.cast(int, data.attrib.get('duration'))
        self.grandparentArt = data.attrib.get('grandparentArt')
        self.grandparentGuid = data.attrib.get('grandparentGuid')
        self.grandparentKey = data.attrib.get('grandparentKey')
        self.grandparentRatingKey = utils.cast(
            int, data.attrib.get('grandparentRatingKey'))
        self.grandparentTheme = data.attrib.get('grandparentTheme')
        self.grandparentThumb = data.attrib.get('grandparentThumb')
        self.grandparentTitle = data.attrib.get('grandparentTitle')
        self.guids = self.findItems(data, media.Guid)
        self.index = utils.cast(int, data.attrib.get('index'))
        self.labels = self.findItems(data, media.Label)
        self.markers = self.findItems(data, media.Marker)
        self.media = self.findItems(data, media.Media)
        self.originallyAvailableAt = utils.toDatetime(
            data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
        self.parentGuid = data.attrib.get('parentGuid')
        self.parentIndex = utils.cast(int, data.attrib.get('parentIndex'))
        self.parentKey = data.attrib.get('parentKey')
        self.parentRatingKey = utils.cast(int,
                                          data.attrib.get('parentRatingKey'))
        self.parentThumb = data.attrib.get('parentThumb')
        self.parentTitle = data.attrib.get('parentTitle')
        self.parentYear = utils.cast(int, data.attrib.get('parentYear'))
        self.producers = self.findItems(data, media.Producer)
        self.rating = utils.cast(float, data.attrib.get('rating'))
        self.roles = self.findItems(data, media.Role)
        self.skipParent = utils.cast(bool, data.attrib.get('skipParent', '0'))
        self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
        self.writers = self.findItems(data, media.Writer)
        self.year = utils.cast(int, data.attrib.get('year'))

        # If seasons are hidden, parentKey and parentRatingKey are missing from the XML response.
        # https://forums.plex.tv/t/parentratingkey-not-in-episode-xml-when-seasons-are-hidden/300553
        if self.skipParent and not self.parentRatingKey:
            # Parse the parentRatingKey from the parentThumb
            if self.parentThumb and self.parentThumb.startswith(
                    '/library/metadata/'):
                self.parentRatingKey = utils.cast(
                    int,
                    self.parentThumb.split('/')[3])
            # Get the parentRatingKey from the season's ratingKey
            if not self.parentRatingKey and self.grandparentRatingKey:
                self.parentRatingKey = self.show().season(
                    season=self.parentIndex).ratingKey
            if self.parentRatingKey:
                self.parentKey = '/library/metadata/%s' % self.parentRatingKey
Ejemplo n.º 2
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Playable._loadData(self, data)
     self.addedAt = utils.toDatetime(data.attrib.get('addedAt'))
     self.createdAtAccuracy = data.attrib.get('createdAtAccuracy')
     self.createdAtTZOffset = utils.cast(
         int, data.attrib.get('createdAtTZOffset'))
     self.fields = self.findItems(data, media.Field)
     self.guid = data.attrib.get('guid')
     self.index = utils.cast(int, data.attrib.get('index'))
     self.key = data.attrib.get('key', '')
     self.librarySectionID = data.attrib.get('librarySectionID')
     self.librarySectionKey = data.attrib.get('librarySectionKey')
     self.librarySectionTitle = data.attrib.get('librarySectionTitle')
     self.listType = 'photo'
     self.media = self.findItems(data, media.Media)
     self.originallyAvailableAt = utils.toDatetime(
         data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
     self.parentGuid = data.attrib.get('parentGuid')
     self.parentIndex = utils.cast(int, data.attrib.get('parentIndex'))
     self.parentKey = data.attrib.get('parentKey')
     self.parentRatingKey = utils.cast(int,
                                       data.attrib.get('parentRatingKey'))
     self.parentThumb = data.attrib.get('parentThumb')
     self.parentTitle = data.attrib.get('parentTitle')
     self.ratingKey = utils.cast(int, data.attrib.get('ratingKey'))
     self.summary = data.attrib.get('summary')
     self.tags = self.findItems(data, media.Tag)
     self.thumb = data.attrib.get('thumb')
     self.title = data.attrib.get('title')
     self.titleSort = data.attrib.get('titleSort', self.title)
     self.type = data.attrib.get('type')
     self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt'))
     self.year = utils.cast(int, data.attrib.get('year'))
Ejemplo n.º 3
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Video._loadData(self, data)
     Playable._loadData(self, data)
     self._details_key = self.key + self._include
     self._seasonNumber = None  # cached season number
     self.art = data.attrib.get('art')
     self.chapterSource = data.attrib.get('chapterSource')
     self.contentRating = data.attrib.get('contentRating')
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.grandparentArt = data.attrib.get('grandparentArt')
     self.grandparentKey = data.attrib.get('grandparentKey')
     self.grandparentRatingKey = utils.cast(int, data.attrib.get('grandparentRatingKey'))
     self.grandparentTheme = data.attrib.get('grandparentTheme')
     self.grandparentThumb = data.attrib.get('grandparentThumb')
     self.grandparentTitle = data.attrib.get('grandparentTitle')
     self.guid = data.attrib.get('guid')
     self.index = utils.cast(int, data.attrib.get('index'))
     self.originallyAvailableAt = utils.toDatetime(data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
     self.parentIndex = data.attrib.get('parentIndex')
     self.parentKey = data.attrib.get('parentKey')
     self.parentRatingKey = utils.cast(int, data.attrib.get('parentRatingKey'))
     self.parentThumb = data.attrib.get('parentThumb')
     self.parentTitle = data.attrib.get('parentTitle')
     self.title = data.attrib.get('title')
     self.rating = utils.cast(float, data.attrib.get('rating'))
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
     self.year = utils.cast(int, data.attrib.get('year'))
     self.directors = self.findItems(data, media.Director)
     self.media = self.findItems(data, media.Media)
     self.writers = self.findItems(data, media.Writer)
     self.labels = self.findItems(data, media.Label)
     self.collections = self.findItems(data, media.Collection)
     self.chapters = self.findItems(data, media.Chapter)
Ejemplo n.º 4
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Playable._loadData(self, data)
     self.addedAt = utils.toDatetime(data.attrib.get('addedAt'))
     self.allowSync = utils.cast(bool, data.attrib.get('allowSync'))
     self.composite = data.attrib.get('composite')  # url to thumbnail
     self.content = data.attrib.get('content')
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.durationInSeconds = utils.cast(
         int, data.attrib.get('durationInSeconds'))
     self.fields = self.findItems(data, media.Field)
     self.guid = data.attrib.get('guid')
     self.icon = data.attrib.get('icon')
     self.key = data.attrib.get('key', '').replace('/items',
                                                   '')  # FIX_BUG_50
     self.leafCount = utils.cast(int, data.attrib.get('leafCount'))
     self.librarySectionID = utils.cast(int,
                                        data.attrib.get('librarySectionID'))
     self.librarySectionKey = data.attrib.get('librarySectionKey')
     self.librarySectionTitle = data.attrib.get('librarySectionTitle')
     self.playlistType = data.attrib.get('playlistType')
     self.radio = utils.cast(bool, data.attrib.get('radio', 0))
     self.ratingKey = utils.cast(int, data.attrib.get('ratingKey'))
     self.smart = utils.cast(bool, data.attrib.get('smart'))
     self.summary = data.attrib.get('summary')
     self.title = data.attrib.get('title')
     self.type = data.attrib.get('type')
     self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt'))
     self._items = None  # cache for self.items
     self._section = None  # cache for self.section
     self._filters = None  # cache for self.filters
Ejemplo n.º 5
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Audio._loadData(self, data)
     Playable._loadData(self, data)
     self.chapterSource = data.attrib.get('chapterSource')
     self.collections = self.findItems(data, media.Collection)
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.grandparentArt = data.attrib.get('grandparentArt')
     self.grandparentGuid = data.attrib.get('grandparentGuid')
     self.grandparentKey = data.attrib.get('grandparentKey')
     self.grandparentRatingKey = utils.cast(
         int, data.attrib.get('grandparentRatingKey'))
     self.grandparentThumb = data.attrib.get('grandparentThumb')
     self.grandparentTitle = data.attrib.get('grandparentTitle')
     self.media = self.findItems(data, media.Media)
     self.originalTitle = data.attrib.get('originalTitle')
     self.parentGuid = data.attrib.get('parentGuid')
     self.parentIndex = data.attrib.get('parentIndex')
     self.parentKey = data.attrib.get('parentKey')
     self.parentRatingKey = utils.cast(int,
                                       data.attrib.get('parentRatingKey'))
     self.parentThumb = data.attrib.get('parentThumb')
     self.parentTitle = data.attrib.get('parentTitle')
     self.primaryExtraKey = data.attrib.get('primaryExtraKey')
     self.ratingCount = utils.cast(int, data.attrib.get('ratingCount'))
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
     self.year = utils.cast(int, data.attrib.get('year'))
Ejemplo n.º 6
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Video._loadData(self, data)
     Playable._loadData(self, data)
     self.audienceRating = utils.cast(float, data.attrib.get('audienceRating'))
     self.audienceRatingImage = data.attrib.get('audienceRatingImage')
     self.chapters = self.findItems(data, media.Chapter)
     self.chapterSource = data.attrib.get('chapterSource')
     self.collections = self.findItems(data, media.Collection)
     self.contentRating = data.attrib.get('contentRating')
     self.countries = self.findItems(data, media.Country)
     self.directors = self.findItems(data, media.Director)
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.genres = self.findItems(data, media.Genre)
     self.labels = self.findItems(data, media.Label)
     self.media = self.findItems(data, media.Media)
     self.originallyAvailableAt = utils.toDatetime(data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
     self.originalTitle = data.attrib.get('originalTitle')
     self.primaryExtraKey = data.attrib.get('primaryExtraKey')
     self.producers = self.findItems(data, media.Producer)
     self.rating = utils.cast(float, data.attrib.get('rating'))
     self.ratingImage = data.attrib.get('ratingImage')
     self.roles = self.findItems(data, media.Role)
     self.similar = self.findItems(data, media.Similar)
     self.studio = data.attrib.get('studio')
     self.tagline = data.attrib.get('tagline')
     self.userRating = utils.cast(float, data.attrib.get('userRating'))
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
     self.writers = self.findItems(data, media.Writer)
     self.year = utils.cast(int, data.attrib.get('year'))
Ejemplo n.º 7
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Video._loadData(self, data)
     Playable._loadData(self, data)
     self._seasonNumber = None  # cached season number
     self.chapters = self.findItems(data, media.Chapter)
     self.chapterSource = data.attrib.get('chapterSource')
     self.contentRating = data.attrib.get('contentRating')
     self.directors = self.findItems(data, media.Director)
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.grandparentArt = data.attrib.get('grandparentArt')
     self.grandparentGuid = data.attrib.get('grandparentGuid')
     self.grandparentKey = data.attrib.get('grandparentKey')
     self.grandparentRatingKey = utils.cast(int, data.attrib.get('grandparentRatingKey'))
     self.grandparentTheme = data.attrib.get('grandparentTheme')
     self.grandparentThumb = data.attrib.get('grandparentThumb')
     self.grandparentTitle = data.attrib.get('grandparentTitle')
     self.index = utils.cast(int, data.attrib.get('index'))
     self.markers = self.findItems(data, media.Marker)
     self.media = self.findItems(data, media.Media)
     self.originallyAvailableAt = utils.toDatetime(data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
     self.parentGuid = data.attrib.get('parentGuid')
     self.parentIndex = utils.cast(int, data.attrib.get('parentIndex'))
     self.parentKey = data.attrib.get('parentKey')
     self.parentRatingKey = utils.cast(int, data.attrib.get('parentRatingKey'))
     self.parentThumb = data.attrib.get('parentThumb')
     self.parentTitle = data.attrib.get('parentTitle')
     self.rating = utils.cast(float, data.attrib.get('rating'))
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
     self.writers = self.findItems(data, media.Writer)
     self.year = utils.cast(int, data.attrib.get('year'))
Ejemplo n.º 8
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Audio._loadData(self, data)
     Playable._loadData(self, data)
     self.art = data.attrib.get('art')
     self.chapterSource = data.attrib.get('chapterSource')
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.grandparentArt = data.attrib.get('grandparentArt')
     self.grandparentKey = data.attrib.get('grandparentKey')
     self.grandparentRatingKey = data.attrib.get('grandparentRatingKey')
     self.grandparentThumb = data.attrib.get('grandparentThumb')
     self.grandparentTitle = data.attrib.get('grandparentTitle')
     self.guid = data.attrib.get('guid')
     self.originalTitle = data.attrib.get('originalTitle')
     self.parentIndex = data.attrib.get('parentIndex')
     self.parentKey = data.attrib.get('parentKey')
     self.parentRatingKey = data.attrib.get('parentRatingKey')
     self.parentThumb = data.attrib.get('parentThumb')
     self.parentTitle = data.attrib.get('parentTitle')
     self.primaryExtraKey = data.attrib.get('primaryExtraKey')
     self.ratingCount = utils.cast(int, data.attrib.get('ratingCount'))
     self.userRating = utils.cast(float, data.attrib.get('userRating', 0))
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
     self.year = utils.cast(int, data.attrib.get('year'))
     self.media = self.findItems(data, media.Media)
     self.moods = self.findItems(data, media.Mood)
Ejemplo n.º 9
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Audio._loadData(self, data)
     Playable._loadData(self, data)
     self._details_key = self.key + self._include
     self.art = data.attrib.get('art')
     self.chapterSource = data.attrib.get('chapterSource')
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.grandparentArt = data.attrib.get('grandparentArt')
     self.grandparentGuid = data.attrib.get('grandparentGuid')
     self.grandparentKey = data.attrib.get('grandparentKey')
     self.grandparentRatingKey = data.attrib.get('grandparentRatingKey')
     self.grandparentThumb = data.attrib.get('grandparentThumb')
     self.grandparentTitle = data.attrib.get('grandparentTitle')
     self.guid = data.attrib.get('guid')
     self.originalTitle = data.attrib.get('originalTitle')
     self.parentGuid = data.attrib.get('parentGuid')
     self.parentIndex = data.attrib.get('parentIndex')
     self.parentKey = data.attrib.get('parentKey')
     self.parentRatingKey = data.attrib.get('parentRatingKey')
     self.parentThumb = data.attrib.get('parentThumb')
     self.parentTitle = data.attrib.get('parentTitle')
     self.primaryExtraKey = data.attrib.get('primaryExtraKey')
     self.ratingCount = utils.cast(int, data.attrib.get('ratingCount'))
     self.userRating = utils.cast(float, data.attrib.get('userRating', 0))
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
     self.year = utils.cast(int, data.attrib.get('year'))
     self.media = self.findItems(data, media.Media)
     self.moods = self.findItems(data, media.Mood)
     self.fields = self.findItems(data, media.Field)
Ejemplo n.º 10
0
 def _loadData(self, data):
     """Load attribute values from Plex XML response."""
     Video._loadData(self, data)
     Playable._loadData(self, data)
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.extraType = utils.cast(int, data.attrib.get('extraType'))
     self.guid = data.attrib.get('guid')
     self.index = utils.cast(int, data.attrib.get('index'))
     self.originallyAvailableAt = data.attrib.get('originallyAvailableAt')
     self.subtype = data.attrib.get('subtype')
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
Ejemplo n.º 11
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Video._loadData(self, data)
     Playable._loadData(self, data)
     self._details_key = self.key + self._include
     self.art = data.attrib.get('art')
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.guid = data.attrib.get('guid')
     self.index = utils.cast(int, data.attrib.get('index'))
     self.originallyAvailableAt = utils.toDatetime(
         data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
     self.title = data.attrib.get('title')
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
     self.media = self.findItems(data, media.Media)
Ejemplo n.º 12
0
 def _loadData(self, data):
     """Load attribute values from Plex XML response."""
     Video._loadData(self, data)
     Playable._loadData(self, data)
     self._data = data
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.extraType = utils.cast(int, data.attrib.get('extraType'))
     self.index = utils.cast(int, data.attrib.get('index'))
     self.media = self.findItems(data, media.Media)
     self.originallyAvailableAt = data.attrib.get('originallyAvailableAt')
     self.skipDetails = utils.cast(int, data.attrib.get('skipDetails'))
     self.subtype = data.attrib.get('subtype')
     self.thumbAspectRatio = data.attrib.get('thumbAspectRatio')
     self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
     self.year = utils.cast(int, data.attrib.get('year'))
Ejemplo n.º 13
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Playable._loadData(self, data)
     self.addedAt = toDatetime(data.attrib.get('addedAt'))
     self.composite = data.attrib.get('composite')  # url to thumbnail
     self.duration = cast(int, data.attrib.get('duration'))
     self.durationInSeconds = cast(int, data.attrib.get('durationInSeconds'))
     self.guid = data.attrib.get('guid')
     self.key = data.attrib.get('key')
     self.key = self.key.replace('/items', '') if self.key else self.key  # FIX_BUG_50
     self.leafCount = cast(int, data.attrib.get('leafCount'))
     self.playlistType = data.attrib.get('playlistType')
     self.ratingKey = cast(int, data.attrib.get('ratingKey'))
     self.smart = cast(bool, data.attrib.get('smart'))
     self.summary = data.attrib.get('summary')
     self.title = data.attrib.get('title')
     self.type = data.attrib.get('type')
     self.updatedAt = toDatetime(data.attrib.get('updatedAt'))
Ejemplo n.º 14
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Playable._loadData(self, data)
     self.addedAt = toDatetime(data.attrib.get('addedAt'))
     self.composite = data.attrib.get('composite')  # url to thumbnail
     self.duration = cast(int, data.attrib.get('duration'))
     self.durationInSeconds = cast(int, data.attrib.get('durationInSeconds'))
     self.guid = data.attrib.get('guid')
     self.key = data.attrib.get('key')
     self.key = self.key.replace('/items', '') if self.key else self.key  # FIX_BUG_50
     self.leafCount = cast(int, data.attrib.get('leafCount'))
     self.playlistType = data.attrib.get('playlistType')
     self.ratingKey = cast(int, data.attrib.get('ratingKey'))
     self.smart = cast(bool, data.attrib.get('smart'))
     self.summary = data.attrib.get('summary')
     self.title = data.attrib.get('title')
     self.type = data.attrib.get('type')
     self.updatedAt = toDatetime(data.attrib.get('updatedAt'))
     self._items = None  # cache for self.items
Ejemplo n.º 15
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Video._loadData(self, data)
     Playable._loadData(self, data)
     self._data = data
     self.addedAt = data.attrib.get('addedAt')
     self.duration = utils.cast(int, data.attrib.get('duration'))
     self.guid = data.attrib.get('guid')
     self.key = data.attrib.get('key')
     self.originallyAvailableAt = utils.toDatetime(
         data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
     self.ratingKey = data.attrib.get('ratingKey')
     self.skipDetails = utils.cast(int, data.attrib.get('skipDetails'))
     self.subtype = data.attrib.get('subtype')
     self.thumb = data.attrib.get('thumb')
     self.thumbAspectRatio = data.attrib.get('thumbAspectRatio')
     self.title = data.attrib.get('title')
     self.type = data.attrib.get('type')
     self.year = utils.cast(int, data.attrib.get('year'))
     self.media = self.findItems(data, media.Media)
Ejemplo n.º 16
0
 def _loadData(self, data):
     """ Load attribute values from Plex XML response. """
     Playable._loadData(self, data)
     self.listType = 'photo'
     self.addedAt = utils.toDatetime(data.attrib.get('addedAt'))
     self.fields = self.findItems(data, etag='Field')
     self.index = utils.cast(int, data.attrib.get('index'))
     self.key = data.attrib.get('key')
     self.librarySectionID = data.attrib.get('librarySectionID')
     self.originallyAvailableAt = utils.toDatetime(
         data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
     self.parentKey = data.attrib.get('parentKey')
     self.parentRatingKey = data.attrib.get('parentRatingKey')
     self.ratingKey = data.attrib.get('ratingKey')
     self.summary = data.attrib.get('summary')
     self.thumb = data.attrib.get('thumb')
     self.title = data.attrib.get('title')
     self.type = data.attrib.get('type')
     self.updatedAt = utils.toDatetime(data.attrib.get('updatedAt'))
     self.year = utils.cast(int, data.attrib.get('year'))
     self.media = self.findItems(data, media.Media)
     self.tag = self.findItems(data, media.Tag)
Ejemplo n.º 17
0
    def _loadData(self, data):
        """ Load attribute values from Plex XML response. """
        Video._loadData(self, data)
        Playable._loadData(self, data)

        self._details_key = self.key + self._include
        self.art = data.attrib.get('art')
        self.audienceRating = utils.cast(float, data.attrib.get('audienceRating'))
        self.audienceRatingImage = data.attrib.get('audienceRatingImage')
        self.chapterSource = data.attrib.get('chapterSource')
        self.contentRating = data.attrib.get('contentRating')
        self.duration = utils.cast(int, data.attrib.get('duration'))
        self.guid = data.attrib.get('guid')
        self.originalTitle = data.attrib.get('originalTitle')
        self.originallyAvailableAt = utils.toDatetime(
            data.attrib.get('originallyAvailableAt'), '%Y-%m-%d')
        self.primaryExtraKey = data.attrib.get('primaryExtraKey')
        self.rating = utils.cast(float, data.attrib.get('rating'))
        self.ratingImage = data.attrib.get('ratingImage')
        self.studio = data.attrib.get('studio')
        self.tagline = data.attrib.get('tagline')
        self.userRating = utils.cast(float, data.attrib.get('userRating'))
        self.viewOffset = utils.cast(int, data.attrib.get('viewOffset', 0))
        self.year = utils.cast(int, data.attrib.get('year'))
        self.collections = self.findItems(data, media.Collection)
        self.countries = self.findItems(data, media.Country)
        self.directors = self.findItems(data, media.Director)
        self.fields = self.findItems(data, media.Field)
        self.genres = self.findItems(data, media.Genre)
        self.media = self.findItems(data, media.Media)
        self.producers = self.findItems(data, media.Producer)
        self.roles = self.findItems(data, media.Role)
        self.writers = self.findItems(data, media.Writer)
        self.labels = self.findItems(data, media.Label)
        self.chapters = self.findItems(data, media.Chapter)
        self.similar = self.findItems(data, media.Similar)