From 7f466f9c08862ddbee9995e24153ae69d2e3ba68 Mon Sep 17 00:00:00 2001 From: Dean Gardiner Date: Thu, 7 Aug 2014 12:45:58 +1200 Subject: [PATCH] [TV] Split matcher into separate modules --- .../core/media/show/matcher/__init__.py | 7 +++ .../show/{matcher.py => matcher/base.py} | 63 +------------------ .../core/media/show/matcher/episode.py | 30 +++++++++ couchpotato/core/media/show/matcher/main.py | 9 +++ couchpotato/core/media/show/matcher/season.py | 27 ++++++++ 5 files changed, 75 insertions(+), 61 deletions(-) create mode 100755 couchpotato/core/media/show/matcher/__init__.py rename couchpotato/core/media/show/{matcher.py => matcher/base.py} (55%) create mode 100755 couchpotato/core/media/show/matcher/episode.py create mode 100755 couchpotato/core/media/show/matcher/main.py create mode 100755 couchpotato/core/media/show/matcher/season.py diff --git a/couchpotato/core/media/show/matcher/__init__.py b/couchpotato/core/media/show/matcher/__init__.py new file mode 100755 index 00000000..e2e607a9 --- /dev/null +++ b/couchpotato/core/media/show/matcher/__init__.py @@ -0,0 +1,7 @@ +from .main import ShowMatcher + + +def autoload(): + return ShowMatcher() + +config = [] diff --git a/couchpotato/core/media/show/matcher.py b/couchpotato/core/media/show/matcher/base.py similarity index 55% rename from couchpotato/core/media/show/matcher.py rename to couchpotato/core/media/show/matcher/base.py index 4137c1c5..186334f9 100755 --- a/couchpotato/core/media/show/matcher.py +++ b/couchpotato/core/media/show/matcher/base.py @@ -1,19 +1,9 @@ -from couchpotato import CPLog -from couchpotato.core.event import addEvent, fireEvent -from couchpotato.core.helpers.variable import tryInt +from couchpotato import fireEvent, CPLog, tryInt +from couchpotato.core.event import addEvent from couchpotato.core.media._base.matcher.base import MatcherBase -from couchpotato.core.media._base.providers.base import MultiProvider log = CPLog(__name__) -autoload = 'ShowMatcher' - - -class ShowMatcher(MultiProvider): - - def getTypes(self): - return [Season, Episode] - class Base(MatcherBase): @@ -80,52 +70,3 @@ class Base(MatcherBase): identifier[key] = tryInt(value, value) return identifier - - -class Episode(Base): - type = 'show.episode' - - def correctIdentifier(self, chain, media): - identifier = self.getChainIdentifier(chain) - if not identifier: - log.info2('Wrong: release identifier is not valid (unsupported or missing identifier)') - return False - - # TODO - Parse episode ranges from identifier to determine if they are multi-part episodes - if any([x in identifier for x in ['episode_from', 'episode_to']]): - log.info2('Wrong: releases with identifier ranges are not supported yet') - return False - - required = fireEvent('library.identifier', media, single = True) - - # TODO - Support air by date episodes - # TODO - Support episode parts - - if identifier != required: - log.info2('Wrong: required identifier (%s) does not match release identifier (%s)', (required, identifier)) - return False - - return True - - -class Season(Base): - type = 'show.season' - - def correctIdentifier(self, chain, media): - identifier = self.getChainIdentifier(chain) - if not identifier: - log.info2('Wrong: release identifier is not valid (unsupported or missing identifier)') - return False - - # TODO - Parse episode ranges from identifier to determine if they are season packs - if any([x in identifier for x in ['episode_from', 'episode_to']]): - log.info2('Wrong: releases with identifier ranges are not supported yet') - return False - - required = fireEvent('library.identifier', media, single = True) - - if identifier != required: - log.info2('Wrong: required identifier (%s) does not match release identifier (%s)', (required, identifier)) - return False - - return True diff --git a/couchpotato/core/media/show/matcher/episode.py b/couchpotato/core/media/show/matcher/episode.py new file mode 100755 index 00000000..fb8a37ea --- /dev/null +++ b/couchpotato/core/media/show/matcher/episode.py @@ -0,0 +1,30 @@ +from couchpotato import fireEvent, CPLog +from couchpotato.core.media.show.matcher.base import Base + +log = CPLog(__name__) + + +class Episode(Base): + type = 'show.episode' + + def correctIdentifier(self, chain, media): + identifier = self.getChainIdentifier(chain) + if not identifier: + log.info2('Wrong: release identifier is not valid (unsupported or missing identifier)') + return False + + # TODO - Parse episode ranges from identifier to determine if they are multi-part episodes + if any([x in identifier for x in ['episode_from', 'episode_to']]): + log.info2('Wrong: releases with identifier ranges are not supported yet') + return False + + required = fireEvent('library.identifier', media, single = True) + + # TODO - Support air by date episodes + # TODO - Support episode parts + + if identifier != required: + log.info2('Wrong: required identifier (%s) does not match release identifier (%s)', (required, identifier)) + return False + + return True diff --git a/couchpotato/core/media/show/matcher/main.py b/couchpotato/core/media/show/matcher/main.py new file mode 100755 index 00000000..e9eee6cf --- /dev/null +++ b/couchpotato/core/media/show/matcher/main.py @@ -0,0 +1,9 @@ +from couchpotato.core.media._base.providers.base import MultiProvider +from couchpotato.core.media.show.matcher.episode import Episode +from couchpotato.core.media.show.matcher.season import Season + + +class ShowMatcher(MultiProvider): + + def getTypes(self): + return [Season, Episode] diff --git a/couchpotato/core/media/show/matcher/season.py b/couchpotato/core/media/show/matcher/season.py new file mode 100755 index 00000000..2bc64ca4 --- /dev/null +++ b/couchpotato/core/media/show/matcher/season.py @@ -0,0 +1,27 @@ +from couchpotato import fireEvent, CPLog +from couchpotato.core.media.show.matcher.base import Base + +log = CPLog(__name__) + + +class Season(Base): + type = 'show.season' + + def correctIdentifier(self, chain, media): + identifier = self.getChainIdentifier(chain) + if not identifier: + log.info2('Wrong: release identifier is not valid (unsupported or missing identifier)') + return False + + # TODO - Parse episode ranges from identifier to determine if they are season packs + if any([x in identifier for x in ['episode_from', 'episode_to']]): + log.info2('Wrong: releases with identifier ranges are not supported yet') + return False + + required = fireEvent('library.identifier', media, single = True) + + if identifier != required: + log.info2('Wrong: required identifier (%s) does not match release identifier (%s)', (required, identifier)) + return False + + return True