Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
 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'])
Пример #6
0
 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'])
Пример #7
0
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
Пример #8
0
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
Пример #9
0
    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
Пример #10
0
    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