Added related_libraries to Library model.
This commit is contained in:
@@ -11,7 +11,7 @@ class MediaBase(Plugin):
|
|||||||
default_dict = {
|
default_dict = {
|
||||||
'profile': {'types': {'quality': {}}},
|
'profile': {'types': {'quality': {}}},
|
||||||
'releases': {'status': {}, 'quality': {}, 'files':{}, 'info': {}},
|
'releases': {'status': {}, 'quality': {}, 'files':{}, 'info': {}},
|
||||||
'library': {'titles': {}, 'files':{}},
|
'library': {'titles': {}, 'files':{}, 'related_libraries': {}},
|
||||||
'files': {},
|
'files': {},
|
||||||
'status': {},
|
'status': {},
|
||||||
'category': {},
|
'category': {},
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ class ShowSearcher(Plugin):
|
|||||||
addEvent('searcher.correct_release', self.correctRelease)
|
addEvent('searcher.correct_release', self.correctRelease)
|
||||||
|
|
||||||
addEvent('searcher.get_media_identifier', self.getMediaIdentifier)
|
addEvent('searcher.get_media_identifier', self.getMediaIdentifier)
|
||||||
addEvent('searcher.get_media_root', self.getMediaRoot)
|
|
||||||
|
|
||||||
def single(self, media, search_protocols = None, manual = False):
|
def single(self, media, search_protocols = None, manual = False):
|
||||||
if media['type'] == 'show':
|
if media['type'] == 'show':
|
||||||
@@ -73,6 +72,7 @@ class ShowSearcher(Plugin):
|
|||||||
#fireEvent('episode.delete', episode['id'], single = True)
|
#fireEvent('episode.delete', episode['id'], single = True)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# TODO replace with 'related_libraries'
|
||||||
show, season, episode = self.getMedia(media)
|
show, season, episode = self.getMedia(media)
|
||||||
if show is None or season is None:
|
if show is None or season is None:
|
||||||
log.error('Unable to find show or season library in database, missing required data for searching')
|
log.error('Unable to find show or season library in database, missing required data for searching')
|
||||||
@@ -139,6 +139,7 @@ class ShowSearcher(Plugin):
|
|||||||
if media['type'] not in ['show', 'season', 'episode']:
|
if media['type'] not in ['show', 'season', 'episode']:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# TODO replace with 'related_libraries'
|
||||||
show, season, episode = self.getMedia(media)
|
show, season, episode = self.getMedia(media)
|
||||||
if show is None:
|
if show is None:
|
||||||
return None
|
return None
|
||||||
@@ -199,6 +200,7 @@ class ShowSearcher(Plugin):
|
|||||||
if not fireEvent('searcher.correct_words', release['name'], media, single = True):
|
if not fireEvent('searcher.correct_words', release['name'], media, single = True):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# TODO replace with 'related_libraries'
|
||||||
show, season, episode = self.getMedia(media)
|
show, season, episode = self.getMedia(media)
|
||||||
if show is None or season is None:
|
if show is None or season is None:
|
||||||
log.error('Unable to find show or season library in database, missing required data for searching')
|
log.error('Unable to find show or season library in database, missing required data for searching')
|
||||||
@@ -258,18 +260,6 @@ class ShowSearcher(Plugin):
|
|||||||
|
|
||||||
return identifier
|
return identifier
|
||||||
|
|
||||||
# TODO move this somewhere else
|
|
||||||
def getMediaRoot(self, media):
|
|
||||||
if media['type'] not in ['show', 'season', 'episode']:
|
|
||||||
return None
|
|
||||||
|
|
||||||
show, season, episode = self.getMedia(media)
|
|
||||||
if show is None or season is None:
|
|
||||||
log.error('Unable to find show or season library in database, missing required data for searching')
|
|
||||||
return
|
|
||||||
|
|
||||||
return show.to_dict()
|
|
||||||
|
|
||||||
# TODO move this somewhere else
|
# TODO move this somewhere else
|
||||||
def getMedia(self, media):
|
def getMedia(self, media):
|
||||||
db = get_session()
|
db = get_session()
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ class Matcher(Plugin):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def correctTitle(self, chain, media):
|
def correctTitle(self, chain, media):
|
||||||
|
# TODO need to switch this to use media['related_libraries']
|
||||||
root_library = fireEvent('searcher.get_media_root', media['library'], single = True)
|
root_library = fireEvent('searcher.get_media_root', media['library'], single = True)
|
||||||
|
|
||||||
if 'show_name' not in chain.info or not len(chain.info['show_name']):
|
if 'show_name' not in chain.info or not len(chain.info['show_name']):
|
||||||
|
|||||||
@@ -112,6 +112,40 @@ class Library(Entity):
|
|||||||
parent = ManyToOne('Library')
|
parent = ManyToOne('Library')
|
||||||
children = OneToMany('Library')
|
children = OneToMany('Library')
|
||||||
|
|
||||||
|
def getRelated(self, include_parents = True, include_self = True, include_children = True):
|
||||||
|
libraries = []
|
||||||
|
|
||||||
|
if include_parents and self.parent is not None:
|
||||||
|
libraries += self.parent.getRelated(include_children = False)
|
||||||
|
|
||||||
|
if include_self:
|
||||||
|
libraries += [(self.type, self)]
|
||||||
|
|
||||||
|
if include_children:
|
||||||
|
for child in self.children:
|
||||||
|
libraries += child.getRelated(include_parents = False)
|
||||||
|
|
||||||
|
return libraries
|
||||||
|
|
||||||
|
def to_dict(self, deep = None, exclude = None):
|
||||||
|
if not exclude: exclude = []
|
||||||
|
if not deep: deep = {}
|
||||||
|
|
||||||
|
include_related = deep.pop('related_libraries', None) is not None
|
||||||
|
|
||||||
|
orig_dict = super(Library, self).to_dict(deep = deep, exclude = exclude)
|
||||||
|
|
||||||
|
# Include related libraries (parents and children)
|
||||||
|
if include_related and self.parent is not None:
|
||||||
|
# TODO need a way to flag the root library
|
||||||
|
# TODO converting to a dict will remove libraries with multiple types (episodes, seasons), they need to be merged into a list instead
|
||||||
|
orig_dict['related_libraries'] = dict([
|
||||||
|
(library_type, library.to_dict(deep, exclude))
|
||||||
|
for (library_type, library) in self.getRelated(include_self = False)
|
||||||
|
])
|
||||||
|
|
||||||
|
return orig_dict
|
||||||
|
|
||||||
|
|
||||||
class ShowLibrary(Library, DictMixin):
|
class ShowLibrary(Library, DictMixin):
|
||||||
using_options(inheritance = 'multi')
|
using_options(inheritance = 'multi')
|
||||||
|
|||||||
Reference in New Issue
Block a user