You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.1 KiB
81 lines
2.1 KiB
from plex.core.helpers import flatten, to_iterable
|
|
from plex.objects.core.base import Property
|
|
from plex.objects.container import Container
|
|
from plex.objects.library.section import Section
|
|
|
|
|
|
class MediaContainer(Container):
|
|
section = Property(resolver=lambda: MediaContainer.construct_section)
|
|
|
|
title1 = Property
|
|
title2 = Property
|
|
|
|
identifier = Property
|
|
|
|
art = Property
|
|
thumb = Property
|
|
|
|
view_group = Property('viewGroup')
|
|
view_mode = Property('viewMode', int)
|
|
|
|
media_tag_prefix = Property('mediaTagPrefix')
|
|
media_tag_version = Property('mediaTagVersion')
|
|
|
|
size = Property('size', int)
|
|
total_size = Property('totalSize', int)
|
|
|
|
allow_sync = Property('allowSync', bool)
|
|
mixed_parents = Property('mixedParents', bool)
|
|
no_cache = Property('nocache', bool)
|
|
sort_asc = Property('sortAsc', bool)
|
|
|
|
@staticmethod
|
|
def construct_section(client, node):
|
|
attribute_map = {
|
|
'key': 'librarySectionID',
|
|
'uuid': 'librarySectionUUID',
|
|
'title': 'librarySectionTitle'
|
|
}
|
|
|
|
return Section.construct(client, node, attribute_map, child=True)
|
|
|
|
def __iter__(self):
|
|
for item in super(MediaContainer, self).__iter__():
|
|
item.section = self.section
|
|
|
|
yield item
|
|
|
|
|
|
class ChildrenContainer(MediaContainer):
|
|
pass
|
|
|
|
|
|
class LeavesContainer(MediaContainer):
|
|
pass
|
|
|
|
|
|
class SectionContainer(MediaContainer):
|
|
filter_passes = lambda _, allowed, value: allowed is None or value in allowed
|
|
|
|
def filter(self, types=None, keys=None, titles=None):
|
|
types = to_iterable(types)
|
|
keys = to_iterable(keys)
|
|
|
|
titles = to_iterable(titles)
|
|
|
|
if titles:
|
|
# Flatten titles
|
|
titles = [flatten(x) for x in titles]
|
|
|
|
for section in self:
|
|
if not self.filter_passes(types, section.type):
|
|
continue
|
|
|
|
if not self.filter_passes(keys, section.key):
|
|
continue
|
|
|
|
if not self.filter_passes(titles, flatten(section.title)):
|
|
continue
|
|
|
|
yield section
|