class EpisodeInfo(object): """Stores information (season, episode number, episode name), and contains logic to generate new name """ CFG_KEY_WITH_EP = "filename_with_episode" CFG_KEY_WITHOUT_EP = "filename_without_episode" def __init__(self, seriesname, seasonnumber, episodenumbers, episodename=None, filename=None, extra=None): self.seriesname = seriesname self.seasonnumber = seasonnumber self.episodenumbers = episodenumbers self.episodename = episodename self.fullpath = filename if filename is not None: # Remains untouched, for use when renaming file self.originalfilename = os.path.basename(filename) else: self.originalfilename = None if extra is None: extra = {} self.extra = extra def fullpath_get(self): return self._fullpath def fullpath_set(self, value): self._fullpath = value if value is None: self.filename, self.extension = None, None else: self.filepath, self.filename = os.path.split(value) self.filename, self.extension = split_extension(self.filename) fullpath = property(fullpath_get, fullpath_set) @property def fullfilename(self): return u"%s%s" % (self.filename, self.extension) def sortable_info(self): """Returns a tuple of sortable information """ return (self.seriesname, self.seasonnumber, self.episodenumbers) def number_string(self): """Used in UI """ return "season: %s, episode: %s" % (self.seasonnumber, ", ".join( [str(x) for x in self.episodenumbers])) def populateFromTvdb(self, tvdb_instance, force_name=None, series_id=None): """Queries the tvdb_api.Tvdb instance for episode name and corrected series name. If series cannot be found, it will warn the user. If the episode is not found, it will use the corrected show name and not set an episode name. If the site is unreachable, it will warn the user. If the user aborts it will catch tvdb_api's user abort error and raise tvnamer's """ try: if series_id is None: show = tvdb_instance[force_name or self.seriesname] else: series_id = int(series_id) tvdb_instance._getShowData(series_id, Config['language']) show = tvdb_instance[series_id] except tvdb_error, errormsg: raise DataRetrievalError("Error with www.thetvdb.com: %s" % errormsg) except tvdb_shownotfound: # No such series found. raise ShowNotFound("Show %s not found on www.thetvdb.com" % self.seriesname)
class EpisodeInfo(object): """Stores information (season, episode number, episode name), and contains logic to generate new name """ def __init__(self, seriesname, seasonnumber, episodenumbers, episodename=None, filename=None): self.seriesname = seriesname self.seasonnumber = seasonnumber self.episodenumbers = episodenumbers self.episodename = episodename self.fullpath = filename def fullpath_get(self): return self._fullpath def fullpath_set(self, value): self._fullpath = value if value is None: self.filename, self.extension = None, None else: self.filepath, self.filename = os.path.split(value) self.filename, self.extension = os.path.splitext(self.filename) self.extension = self.extension.replace(".", "") fullpath = property(fullpath_get, fullpath_set) @property def fullfilename(self): return u"%s.%s" % (self.filename, self.extension) def sortable_info(self): """Returns a tuple of sortable information """ return (self.seriesname, self.seasonnumber, self.episodenumbers) def number_string(self): """Used in UI """ return "season: %s, episode: %s" % (self.seasonnumber, ", ".join( [str(x) for x in self.episodenumbers])) def populateFromTvdb(self, tvdb_instance): """Queries the tvdb_api.Tvdb instance for episode name and corrected series name. If series cannot be found, it will warn the user. If the episode is not found, it will use the corrected show name and not set an episode name. If the site is unreachable, it will warn the user. If the user aborts it will catch tvdb_api's user abort error and raise tvnamer's """ try: show = tvdb_instance[self.seriesname] except tvdb_error, errormsg: raise DataRetrievalError("Error contacting www.thetvdb.com: %s" % errormsg) except tvdb_shownotfound: # No such series found. raise ShowNotFound("Show %s not found on www.thetvdb.com" % self.seriesname)