diff --git a/src/video.py b/src/video.py index f2043a0..a6919c9 100644 --- a/src/video.py +++ b/src/video.py @@ -106,6 +106,111 @@ class Video(object): return hash(self.name) +class Episode(Video): + """Episode :class:`Video`. + :param str series: series of the episode. + :param int season: season number of the episode. + :param int episode: episode number of the episode. + :param str title: title of the episode. + :param int year: year of the series. + :param bool original_series: whether the series is the first with this name. + :param int tvdb_id: TVDB id of the episode. + :param \*\*kwargs: additional parameters for the :class:`Video` constructor. + """ + def __init__(self, name, series, season, episode, title=None, year=None, original_series=True, tvdb_id=None, + series_tvdb_id=None, series_imdb_id=None, **kwargs): + super(Episode, self).__init__(name, **kwargs) + + #: Series of the episode + self.series = series + + #: Season number of the episode + self.season = season + + #: Episode number of the episode + self.episode = episode + + #: Title of the episode + self.title = title + + #: Year of series + self.year = year + + #: The series is the first with this name + self.original_series = original_series + + #: TVDB id of the episode + self.tvdb_id = tvdb_id + + #: TVDB id of the series + self.series_tvdb_id = series_tvdb_id + + #: IMDb id of the series + self.series_imdb_id = series_imdb_id + + @classmethod + def fromguess(cls, name, guess): + if guess['type'] != 'episode': + raise ValueError('The guess must be an episode guess') + + if 'title' not in guess or 'episode' not in guess: + raise ValueError('Insufficient data to process the guess') + + return cls(name, guess['title'], guess.get('season', 1), guess['episode'], title=guess.get('episode_title'), + year=guess.get('year'), format=guess.get('format'), original_series='year' not in guess, + release_group=guess.get('release_group'), resolution=guess.get('screen_size'), + video_codec=guess.get('video_codec'), audio_codec=guess.get('audio_codec')) + + @classmethod + def fromname(cls, name): + return cls.fromguess(name, guessit(name, {'type': 'episode'})) + + def __repr__(self): + if self.year is None: + return '<%s [%r, %dx%s]>' % (self.__class__.__name__, self.series, self.season, self.episode) + if self.subtitle_languages is not None: + return '<%s [%r, %dx%s] %s>' % (self.__class__.__name__, self.series, self.season, self.episode, self.subtitle_languages) + + return '<%s [%r, %d, %dx%d]>' % (self.__class__.__name__, self.series, self.year, self.season, self.episode) + + +class Movie(Video): + """Movie :class:`Video`. + :param str title: title of the movie. + :param int year: year of the movie. + :param \*\*kwargs: additional parameters for the :class:`Video` constructor. + """ + def __init__(self, name, title, year=None, **kwargs): + super(Movie, self).__init__(name, **kwargs) + + #: Title of the movie + self.title = title + + #: Year of the movie + self.year = year + + @classmethod + def fromguess(cls, name, guess): + if guess['type'] != 'movie': + raise ValueError('The guess must be a movie guess') + + if 'title' not in guess: + raise ValueError('Insufficient data to process the guess') + + return cls(name, guess['title'], format=guess.get('format'), release_group=guess.get('release_group'), + resolution=guess.get('screen_size'), video_codec=guess.get('video_codec'), + audio_codec=guess.get('audio_codec'), year=guess.get('year')) + + @classmethod + def fromname(cls, name): + return cls.fromguess(name, guessit(name, {'type': 'movie'})) + + def __repr__(self): + if self.year is None: + return '<%s [%r]>' % (self.__class__.__name__, self.title) + + return '<%s [%r, %d]>' % (self.__class__.__name__, self.title, self.year) +''' class Episode(): """Episode :class:`Video`. :param str series: series of the episode. @@ -231,3 +336,4 @@ class Movie(): return '<%s [%r]>' % (self.__class__.__name__, self.title) return '<%s [%r, %d]>' % (self.__class__.__name__, self.title, self.year) +'''