mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-08-19 12:59:42 -07:00
Add artist, album, track export levels
* Refactor child levels
This commit is contained in:
parent
a5a2ba9d85
commit
47695debdd
1 changed files with 148 additions and 21 deletions
|
@ -53,6 +53,14 @@ class Export(object):
|
||||||
'collection',
|
'collection',
|
||||||
'playlist'
|
'playlist'
|
||||||
)
|
)
|
||||||
|
CHILDREN = {
|
||||||
|
'show': 'season',
|
||||||
|
'season': 'episode',
|
||||||
|
'artist': 'album',
|
||||||
|
'album': 'track',
|
||||||
|
'photo album': 'photo'
|
||||||
|
}
|
||||||
|
LEVELS = (1, 2, 3, 9)
|
||||||
|
|
||||||
def __init__(self, section_id=None, rating_key=None, file_format='json',
|
def __init__(self, section_id=None, rating_key=None, file_format='json',
|
||||||
metadata_level=1, media_info_level=1, include_images=False):
|
metadata_level=1, media_info_level=1, include_images=False):
|
||||||
|
@ -705,6 +713,7 @@ class Export(object):
|
||||||
'librarySectionID': None,
|
'librarySectionID': None,
|
||||||
'librarySectionKey': None,
|
'librarySectionKey': None,
|
||||||
'librarySectionTitle': None,
|
'librarySectionTitle': None,
|
||||||
|
'locations': None,
|
||||||
'media': {
|
'media': {
|
||||||
'audioChannels': None,
|
'audioChannels': None,
|
||||||
'audioCodec': None,
|
'audioCodec': None,
|
||||||
|
@ -954,7 +963,10 @@ class Export(object):
|
||||||
return _media_types[media_type]()
|
return _media_types[media_type]()
|
||||||
|
|
||||||
def return_levels(self, media_type):
|
def return_levels(self, media_type):
|
||||||
|
|
||||||
def movie_levels():
|
def movie_levels():
|
||||||
|
_media_type = 'movie'
|
||||||
|
|
||||||
_movie_levels = [
|
_movie_levels = [
|
||||||
{
|
{
|
||||||
1: [
|
1: [
|
||||||
|
@ -971,7 +983,7 @@ class Export(object):
|
||||||
'chapters.tag', 'chapters.index', 'chapters.start', 'chapters.end', 'chapters.thumb',
|
'chapters.tag', 'chapters.index', 'chapters.start', 'chapters.end', 'chapters.thumb',
|
||||||
'updatedAt', 'lastViewedAt', 'viewCount'
|
'updatedAt', 'lastViewedAt', 'viewCount'
|
||||||
],
|
],
|
||||||
9: self._get_all_metadata_attr('movie')
|
9: self._get_all_metadata_attr(_media_type)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
1: [
|
1: [
|
||||||
|
@ -1017,33 +1029,40 @@ class Export(object):
|
||||||
return _movie_levels
|
return _movie_levels
|
||||||
|
|
||||||
def show_levels():
|
def show_levels():
|
||||||
|
_media_type = 'show'
|
||||||
|
_child_type = self.CHILDREN[_media_type]
|
||||||
|
_child_attr = _child_type + 's.'
|
||||||
|
_child_levels = self.return_levels(_child_type)
|
||||||
|
|
||||||
_show_levels = [
|
_show_levels = [
|
||||||
{
|
{
|
||||||
1: [
|
1: [
|
||||||
'ratingKey', 'title', 'titleSort', 'originallyAvailableAt', 'year', 'addedAt',
|
'ratingKey', 'title', 'titleSort', 'originallyAvailableAt', 'year', 'addedAt',
|
||||||
'rating', 'userRating', 'contentRating',
|
'rating', 'userRating', 'contentRating',
|
||||||
'studio', 'summary', 'guid', 'duration', 'durationHuman', 'type', 'childCount'
|
'studio', 'summary', 'guid', 'duration', 'durationHuman', 'type', 'childCount'
|
||||||
] + ['seasons.' + attr for attr in self.return_levels('season')[0][1]],
|
] + [_child_attr + attr for attr in _child_levels[0][1]],
|
||||||
2: [
|
2: [
|
||||||
'roles.tag', 'roles.role',
|
'roles.tag', 'roles.role',
|
||||||
'genres.tag', 'collections.tag', 'labels.tag', 'fields.name', 'fields.locked'
|
'genres.tag', 'collections.tag', 'labels.tag', 'fields.name', 'fields.locked'
|
||||||
] + ['seasons.' + attr for attr in self.return_levels('season')[0][2]],
|
] + [_child_attr + attr for attr in _child_levels[0][2]],
|
||||||
3: [
|
3: [
|
||||||
'art', 'thumb', 'banner', 'theme', 'key',
|
'art', 'thumb', 'banner', 'theme', 'key',
|
||||||
'updatedAt', 'lastViewedAt', 'viewCount'
|
'updatedAt', 'lastViewedAt', 'viewCount'
|
||||||
] + ['seasons.' + attr for attr in self.return_levels('season')[0][3]],
|
] + [_child_attr + attr for attr in _child_levels[0][3]],
|
||||||
9: self._get_all_metadata_attr('show')
|
9: self._get_all_metadata_attr(_media_type)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
1: ['seasons.' + attr for attr in self.return_levels('season')[1][1]],
|
l: [_child_attr + attr for attr in _child_levels[1][l]] for l in self.LEVELS
|
||||||
2: ['seasons.' + attr for attr in self.return_levels('season')[1][2]],
|
|
||||||
3: ['seasons.' + attr for attr in self.return_levels('season')[1][3]],
|
|
||||||
9: ['seasons.' + attr for attr in self.return_levels('season')[1][9]]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
return _show_levels
|
return _show_levels
|
||||||
|
|
||||||
def season_levels():
|
def season_levels():
|
||||||
|
_media_type = 'season'
|
||||||
|
_child_type = self.CHILDREN[_media_type]
|
||||||
|
_child_attr = _child_type + 's.'
|
||||||
|
_child_levels = self.return_levels(_child_type)
|
||||||
|
|
||||||
_season_levels = [
|
_season_levels = [
|
||||||
{
|
{
|
||||||
1: [
|
1: [
|
||||||
|
@ -1051,27 +1070,26 @@ class Export(object):
|
||||||
'userRating',
|
'userRating',
|
||||||
'summary', 'guid', 'type', 'index',
|
'summary', 'guid', 'type', 'index',
|
||||||
'parentTitle', 'parentRatingKey', 'parentGuid'
|
'parentTitle', 'parentRatingKey', 'parentGuid'
|
||||||
] + ['episodes.' + attr for attr in self.return_levels('episode')[0][1]],
|
] + [_child_attr + attr for attr in _child_levels[0][1]],
|
||||||
2: [
|
2: [
|
||||||
'fields.name', 'fields.locked'
|
'fields.name', 'fields.locked'
|
||||||
] + ['episodes.' + attr for attr in self.return_levels('episode')[0][2]],
|
] + [_child_attr + attr for attr in _child_levels[0][2]],
|
||||||
3: [
|
3: [
|
||||||
'art', 'thumb', 'key',
|
'art', 'thumb', 'key',
|
||||||
'updatedAt', 'lastViewedAt', 'viewCount',
|
'updatedAt', 'lastViewedAt', 'viewCount',
|
||||||
'parentKey', 'parentTheme', 'parentThumb'
|
'parentKey', 'parentTheme', 'parentThumb'
|
||||||
] + ['episodes.' + attr for attr in self.return_levels('episode')[0][3]],
|
] + [_child_attr + attr for attr in _child_levels[0][3]],
|
||||||
9: self._get_all_metadata_attr('season')
|
9: self._get_all_metadata_attr(_media_type)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
1: ['episodes.' + attr for attr in self.return_levels('episode')[1][1]],
|
l: [_child_attr + attr for attr in _child_levels[1][l]] for l in self.LEVELS
|
||||||
2: ['episodes.' + attr for attr in self.return_levels('episode')[1][2]],
|
|
||||||
3: ['episodes.' + attr for attr in self.return_levels('episode')[1][3]],
|
|
||||||
9: ['episodes.' + attr for attr in self.return_levels('episode')[1][9]]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
return _season_levels
|
return _season_levels
|
||||||
|
|
||||||
def episode_levels():
|
def episode_levels():
|
||||||
|
_media_type = 'episode'
|
||||||
|
|
||||||
_episode_levels = [
|
_episode_levels = [
|
||||||
{
|
{
|
||||||
1: [
|
1: [
|
||||||
|
@ -1091,7 +1109,7 @@ class Export(object):
|
||||||
'parentThumb', 'parentKey',
|
'parentThumb', 'parentKey',
|
||||||
'grandparentArt', 'grandparentThumb', 'grandparentTheme', 'grandparentKey'
|
'grandparentArt', 'grandparentThumb', 'grandparentTheme', 'grandparentKey'
|
||||||
],
|
],
|
||||||
9: self._get_all_metadata_attr('episode')
|
9: self._get_all_metadata_attr(_media_type)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
1: [
|
1: [
|
||||||
|
@ -1137,15 +1155,124 @@ class Export(object):
|
||||||
return _episode_levels
|
return _episode_levels
|
||||||
|
|
||||||
def artist_levels():
|
def artist_levels():
|
||||||
_artist_levels = []
|
_media_type = 'artist'
|
||||||
|
_child_type = self.CHILDREN[_media_type]
|
||||||
|
_child_attr = _child_type + 's.'
|
||||||
|
_child_levels = self.return_levels(_child_type)
|
||||||
|
|
||||||
|
_artist_levels = [
|
||||||
|
{
|
||||||
|
1: [
|
||||||
|
'ratingKey', 'title', 'titleSort', 'addedAt',
|
||||||
|
'rating', 'userRating',
|
||||||
|
'summary', 'guid', 'type',
|
||||||
|
] + [_child_attr + attr for attr in _child_levels[0][1]],
|
||||||
|
2: [
|
||||||
|
'collections.tag', 'genres.tag', 'countries.tag', 'moods.tag', 'styles.tag',
|
||||||
|
'fields.name', 'fields.locked'
|
||||||
|
] + [_child_attr + attr for attr in _child_levels[0][2]],
|
||||||
|
3: [
|
||||||
|
'art', 'thumb', 'key',
|
||||||
|
'updatedAt', 'lastViewedAt', 'viewCount'
|
||||||
|
] + [_child_attr + attr for attr in _child_levels[0][3]],
|
||||||
|
9: self._get_all_metadata_attr(_media_type)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
l: [_child_attr + attr for attr in _child_levels[1][l]] for l in self.LEVELS
|
||||||
|
}
|
||||||
|
]
|
||||||
return _artist_levels
|
return _artist_levels
|
||||||
|
|
||||||
def album_levels():
|
def album_levels():
|
||||||
_album_levels = []
|
_media_type = 'album'
|
||||||
|
_child_type = self.CHILDREN[_media_type]
|
||||||
|
_child_attr = _child_type + 's.'
|
||||||
|
_child_levels = self.return_levels(_child_type)
|
||||||
|
|
||||||
|
_album_levels = [
|
||||||
|
{
|
||||||
|
1: [
|
||||||
|
'ratingKey', 'title', 'titleSort', 'originallyAvailableAt', 'addedAt',
|
||||||
|
'rating', 'userRating',
|
||||||
|
'summary', 'guid', 'type', 'index',
|
||||||
|
'parentTitle', 'parentRatingKey', 'parentGuid'
|
||||||
|
] + [_child_attr + attr for attr in _child_levels[0][1]],
|
||||||
|
2: [
|
||||||
|
'collections.tag', 'genres.tag', 'labels.tag', 'moods.tag', 'styles.tag',
|
||||||
|
'fields.name', 'fields.locked'
|
||||||
|
] + [_child_attr + attr for attr in _child_levels[0][2]],
|
||||||
|
3: [
|
||||||
|
'art', 'thumb', 'key',
|
||||||
|
'updatedAt', 'lastViewedAt', 'viewCount',
|
||||||
|
'parentKey', 'parentThumb'
|
||||||
|
] + [_child_attr + attr for attr in _child_levels[0][3]],
|
||||||
|
9: self._get_all_metadata_attr(_media_type)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
l: [_child_attr + attr for attr in _child_levels[1][l]] for l in self.LEVELS
|
||||||
|
}
|
||||||
|
]
|
||||||
return _album_levels
|
return _album_levels
|
||||||
|
|
||||||
def track_levels():
|
def track_levels():
|
||||||
_track_levels = []
|
_media_type = 'track'
|
||||||
|
|
||||||
|
_track_levels = [
|
||||||
|
{
|
||||||
|
1: [
|
||||||
|
'ratingKey', 'title', 'titleSort', 'originalTitle', 'year', 'addedAt',
|
||||||
|
'userRating', 'ratingCount',
|
||||||
|
'summary', 'guid', 'duration', 'durationHuman', 'type', 'index',
|
||||||
|
'parentTitle', 'parentRatingKey', 'parentGuid', 'parentIndex',
|
||||||
|
'grandparentTitle', 'grandparentRatingKey', 'grandparentGuid'
|
||||||
|
],
|
||||||
|
2: [
|
||||||
|
'moods.tag', 'writers.tag',
|
||||||
|
'fields.name', 'fields.locked'
|
||||||
|
],
|
||||||
|
3: [
|
||||||
|
'art', 'thumb', 'key',
|
||||||
|
'updatedAt', 'lastViewedAt', 'viewCount',
|
||||||
|
'parentThumb', 'parentKey',
|
||||||
|
'grandparentArt', 'grandparentThumb', 'grandparentKey'
|
||||||
|
],
|
||||||
|
9: self._get_all_metadata_attr(_media_type)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
1: [
|
||||||
|
'locations', 'media.audioChannels', 'media.audioCodec',
|
||||||
|
'media.audioProfile',
|
||||||
|
'media.bitrate', 'media.container', 'media.duration'
|
||||||
|
],
|
||||||
|
2: [
|
||||||
|
'media.parts.accessible', 'media.parts.exists', 'media.parts.file', 'media.parts.duration',
|
||||||
|
'media.parts.container', 'media.parts.size', 'media.parts.sizeHuman',
|
||||||
|
'media.parts.audioProfile',
|
||||||
|
'media.parts.deepAnalysisVersion', 'media.parts.hasThumbnail'
|
||||||
|
],
|
||||||
|
3: [
|
||||||
|
'media.parts.audioStreams.codec', 'media.parts.audioStreams.bitrate',
|
||||||
|
'media.parts.audioStreams.title', 'media.parts.audioStreams.displayTitle',
|
||||||
|
'media.parts.audioStreams.extendedDisplayTitle',
|
||||||
|
'media.parts.audioStreams.channels', 'media.parts.audioStreams.audioChannelLayout',
|
||||||
|
'media.parts.audioStreams.samplingRate',
|
||||||
|
'media.parts.audioStreams.default',
|
||||||
|
'media.parts.audioStreams.albumGain', 'media.parts.audioStreams.albumPeak',
|
||||||
|
'media.parts.audioStreams.albumRange',
|
||||||
|
'media.parts.audioStreams.loudness', 'media.parts.audioStreams.gain',
|
||||||
|
'media.parts.audioStreams.lra', 'media.parts.audioStreams.peak',
|
||||||
|
'media.parts.audioStreams.startRamp', 'media.parts.audioStreams.endRamp',
|
||||||
|
'media.parts.lyricStreams.codec', 'media.parts.lyricStreams.format',
|
||||||
|
'media.parts.lyricStreams.title', 'media.parts.lyricStreams.displayTitle',
|
||||||
|
'media.parts.lyricStreams.extendedDisplayTitle',
|
||||||
|
'media.parts.lyricStreams.default', 'media.parts.lyricStreams.minLines',
|
||||||
|
'media.parts.lyricStreams.provider', 'media.parts.lyricStreams.timed',
|
||||||
|
],
|
||||||
|
9: [
|
||||||
|
'locations', 'media'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
return _track_levels
|
return _track_levels
|
||||||
|
|
||||||
def photo_album_levels():
|
def photo_album_levels():
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue