Delay library.section.all() to speed up export return

This commit is contained in:
JonnyWong16 2020-09-29 00:28:28 -07:00
parent 3a1b4e34aa
commit 1428a2485f
No known key found for this signature in database
GPG key ID: B1F1F9807184697A

View file

@ -94,7 +94,7 @@ class Export(object):
self.timestamp = helpers.timestamp()
self.media_type = None
self.items = []
self.obj = None
self.filename = None
self.export_id = None
@ -1426,26 +1426,24 @@ class Export(object):
self.rating_key, self.metadata_level, self.media_info_level,
self.include_thumb, self.include_art)
item = plex.get_item(self.rating_key)
self.media_type = item.type
self.obj = plex.get_item(self.rating_key)
self.media_type = self.obj.type
if self.media_type != 'playlist':
self.section_id = item.librarySectionID
self.section_id = self.obj.librarySectionID
if self.media_type in ('season', 'episode', 'album', 'track'):
item_title = item._defaultSyncTitle()
item_title = self.obj._defaultSyncTitle()
else:
item_title = item.title
item_title = self.obj.title
if self.media_type == 'photo' and item.TAG == 'Directory':
if self.media_type == 'photo' and self.obj.TAG == 'Directory':
self.media_type = 'photoalbum'
filename = '{} - {} [{}].{}'.format(
self.media_type.title(), item_title, self.rating_key,
helpers.timestamp_to_YMDHMS(self.timestamp))
self.items = [item]
elif self.section_id:
logger.debug(
"Tautulli Exporter :: Export called with section_id %s, "
@ -1453,16 +1451,14 @@ class Export(object):
self.section_id, self.metadata_level, self.media_info_level,
self.include_thumb, self.include_art)
library = plex.get_library(str(self.section_id))
self.media_type = library.type
library_title = library.title
self.obj = plex.get_library(str(self.section_id))
self.media_type = self.obj.type
library_title = self.obj.title
filename = 'Library - {} [{}].{}'.format(
library_title, self.section_id,
helpers.timestamp_to_YMDHMS(self.timestamp))
self.items = library.all()
else:
msg = "Export called but no section_id or rating_key provided."
logger.error("Tautulli Exporter :: %s", msg)
@ -1488,25 +1484,6 @@ class Export(object):
return True
def _process_custom_fields(self):
if self.custom_fields:
logger.debug("Tautulli Exporter :: Processing custom fields: %s", self.custom_fields)
for field in self.custom_fields.split(','):
field = field.strip()
if not field:
continue
media_type = self.PLURAL_MEDIA_TYPES[self.media_type]
for key in self.PLURAL_MEDIA_TYPES.values():
if field.startswith(key + '.'):
media_type, field = field.split('.', maxsplit=1)
if media_type in self._custom_fields:
self._custom_fields[media_type].add(field)
else:
self._custom_fields[media_type] = {field}
def add_export(self):
keys = {'timestamp': self.timestamp,
'section_id': self.section_id,
@ -1550,10 +1527,15 @@ class Export(object):
filepath = get_export_filepath(self.filename)
images_folder = get_export_filepath(self.filename, images=True)
if hasattr(self.obj, 'all'):
items = self.obj.all()
else:
items = [self.obj]
pool = ThreadPool(processes=4)
try:
result = pool.map(self._export_obj, self.items)
result = pool.map(self._export_obj, items)
if self.file_format == 'json':
json_data = json.dumps(result, indent=4, ensure_ascii=False, sort_keys=True)
@ -1600,6 +1582,25 @@ class Export(object):
export_attrs = self._get_level_attrs(obj.type)
return helpers.get_attrs_to_dict(obj, attrs=export_attrs)
def _process_custom_fields(self):
if self.custom_fields:
logger.debug("Tautulli Exporter :: Processing custom fields: %s", self.custom_fields)
for field in self.custom_fields.split(','):
field = field.strip()
if not field:
continue
media_type = self.PLURAL_MEDIA_TYPES[self.media_type]
for key in self.PLURAL_MEDIA_TYPES.values():
if field.startswith(key + '.'):
media_type, field = field.split('.', maxsplit=1)
if media_type in self._custom_fields:
self._custom_fields[media_type].add(field)
else:
self._custom_fields[media_type] = {field}
def _get_all_metadata_attr(self, media_type):
exclude_attrs = ('media', 'artFile', 'thumbFile')
all_attrs = self.return_attrs(media_type)