def getDestinationFolder(issue): """Constructs the location to move/copy the file """ # Calls makeValidFilename on volume name, as it must valid for a filename destdir = Config['move_files_destination'] % { 'volumename': makeValidFilename(issue.volumename), 'issuenumbers': makeValidFilename(formatIssueNumbers(issue.issuenumbers)) } return destdir
def getDestinationFolder(episode): """Constructs the location to move/copy the file """ # Calls makeValidFilename on series name, as it must valid for a filename destdir = Config['move_files_destination'] % { 'seriesname': makeValidFilename(episode.seriesname), 'seasonnumber': episode.seasonnumber, 'episodenumbers': makeValidFilename(formatEpisodeNumbers(episode.episodenumbers)) } return destdir
def getDestinationFolder(episode): """Constructs the location to move/copy the file """ # Calls makeValidFilename on series name, as it must valid for a filename destdir = Config["move_files_destination"] % { "seriesname": makeValidFilename(episode.seriesname), "seasonnumber": episode.seasonnumber, "episodenumbers": makeValidFilename(formatEpisodeNumbers(episode.episodenumbers)), } return destdir
def getDestinationFolder(issue): """Constructs the location to move/copy the file """ # Calls makeValidFilename on series name, as it must valid for a filename destdir = Config['move_files_destination'] % { 'seriesname': makeValidFilename(issue.seriesname), 'issuenumbers': makeValidFilename( formatIssueNumbers(issue.issuenumbers)) } return destdir
def wrap_validfname(fname): """Wrap the makeValidFilename function as it's called twice and this is slightly long.. """ return makeValidFilename( fname, normalize_unicode=Config['normalize_unicode_filenames'], windows_safe=Config['windows_safe_filenames'], custom_blacklist=Config['custom_filename_character_blacklist'], replace_with=Config['replace_invalid_characters_with'])
def wrap_validfname(fname): """Wrap the makeValidFilename function as it's called twice and this is slightly long.. """ return makeValidFilename( fname, normalize_unicode = Config['normalize_unicode_filenames'], windows_safe = Config['windows_safe_filenames'], custom_blacklist = Config['custom_filename_character_blacklist'], replace_with = Config['replace_invalid_characters_with'])
def getMoveDestination(episode): """Constructs the location to move/copy the file """ #TODO: Write functional test to ensure this valid'ifying works def wrap_validfname(fname): """Wrap the makeValidFilename function as it's called twice and this is slightly long.. """ if Config['move_files_lowercase_destination']: fname = fname.lower() return makeValidFilename( fname, normalize_unicode=Config['normalize_unicode_filenames'], windows_safe=Config['windows_safe_filenames'], custom_blacklist=Config['custom_filename_character_blacklist'], replace_with=Config['replace_invalid_characters_with']) # Calls makeValidFilename on series name, as it must valid for a filename if isinstance(episode, DatedEpisodeInfo): print Config['move_files_destination_date'] destdir = Config['move_files_destination_date'] % { 'seriesname': makeValidFilename(episode.seriesname), 'year': episode.episodenumbers[0].year, 'month': episode.episodenumbers[0].month, 'day': episode.episodenumbers[0].day, 'originalfilename': episode.originalfilename, } elif isinstance(episode, NoSeasonEpisodeInfo): destdir = Config['move_files_destination'] % { 'seriesname': wrap_validfname(episode.seriesname), 'episodenumbers': wrap_validfname(formatEpisodeNumbers(episode.episodenumbers)), 'originalfilename': episode.originalfilename, } else: destdir = Config['move_files_destination'] % { 'seriesname': wrap_validfname(episode.seriesname), 'seasonnumber': episode.seasonnumber, 'episodenumbers': wrap_validfname(formatEpisodeNumbers(episode.episodenumbers)), 'originalfilename': episode.originalfilename, } return destdir
def getMoveDestination(episode): """Constructs the location to move/copy the file """ #TODO: Write functional test to ensure this valid'ifying works def wrap_validfname(fname): """Wrap the makeValidFilename function as it's called twice and this is slightly long.. """ if Config['move_files_lowercase_destination']: fname = fname.lower() return makeValidFilename( fname, normalize_unicode = Config['normalize_unicode_filenames'], windows_safe = Config['windows_safe_filenames'], custom_blacklist = Config['custom_filename_character_blacklist'], replace_with = Config['replace_invalid_characters_with']) # Calls makeValidFilename on series name, as it must valid for a filename if isinstance(episode, DatedEpisodeInfo): print Config['move_files_destination_date'] destdir = Config['move_files_destination_date'] % { 'seriesname': makeValidFilename(episode.seriesname), 'year': episode.episodenumbers[0].year, 'month': episode.episodenumbers[0].month, 'day': episode.episodenumbers[0].day, 'originalfilename': episode.originalfilename, } elif isinstance(episode, NoSeasonEpisodeInfo): destdir = Config['move_files_destination'] % { 'seriesname': wrap_validfname(episode.seriesname), 'episodenumbers': wrap_validfname(formatEpisodeNumbers(episode.episodenumbers)), 'originalfilename': episode.originalfilename, 'seasonnumber': 0, } else: destdir = Config['move_files_destination'] % { 'seriesname': wrap_validfname(episode.seriesname), 'seasonnumber': episode.seasonnumber, 'episodenumbers': wrap_validfname(formatEpisodeNumbers(episode.episodenumbers)), 'originalfilename': episode.originalfilename, } return destdir
def generate_dirname(self): if callable(self._dirname_key): key = self._dirname_key() else: key = self._dirname_key try: formatstr = Config[key] except KeyError: raise NotImplementedError(key) dirname = formatstr % self.__dict__ if Config['move_files_lowercase_destination']: dirname = dirname.lower() if len(Config['move_files_fullpath_replacements']) > 0: log.info("Before custom output replacements: %s" % dirname) dirname = applyCustomFullpathReplacements(dirname) dirname = makeValidFilename(dirname, directory=True) log.debug("Generated path '%s' for %s" % (dirname, self)) return dirname
def populate_from_db(self, force_name=None, uid=None, adult=False): """Queries the moviedb_api 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 """ def fetch_results(results, max_results): fetched = [] for i, result in enumerate(results): log.debug("Search-Result: %s" % result) fetched.append(result) if i >= max_results: break return fetched def searchMovie(query): max_results = Config['max_results'] log.debug("Searching: %s on themoviedb.com" % query) try: search_results = tmdb3.searchMovie(query, language=Config['language'], adult=adult) # paged results, so retrieve them all (max_results) results = [] for i, result in enumerate(search_results): log.debug("Search-Result: %s" % result) results.append(result) if i >= max_results: break except URLError as e: raise DataRetrievalError( "Error connecting to themoviedb.com: %s" % e) # if len(results) == 0: # raise ShowNotFound( # "Movie '%s' not found on themoviedb.com" # % ' '.join(query.split('+'))) try: return self.__selector.select(force_name or self.movietitle, results, candidate_name=operator.attrgetter("title")) except MatchingDataNotFound: raise ShowNotFound( "Movie '%s' not found on themoviedb.com" % ' '.join(query.split('+'))) if uid is not None: # Search By UID try: req = tmdb3.utils.Request("movie/{0}".format(int(uid)), include_adult=adult) movie = tmdb3.utils.MovieSearchResult(req, language=Config['language'])[0] except URLError as e: raise DataRetrievalError( "Error connecting to themoviedb.com: %s" % e) except IndexError: raise ShowNotFound("Movie #%d not found on themoviedb.com" % uid) else: queryend = "+%d" % self.releasedate if self.releasedate else "" query = "%s%s" % (force_name or self.movietitle, queryend) movie = searchMovie(query) #log.debug("Found Series\n\t" + '\n\t'.join(( # "%s: %s" % (attr, getattr(movie, attr)) # for attr in dir(movie) if attr[0] != '_'))) # use corrected series name self.movietitle = makeValidFilename(replaceOutputName(movie.title)) self.releasedate = release_date(movie) self.genres = format_genres(g.name for g in movie.genres) self.userrating = movie.userrating self.id = movie.id