Exemple #1
0
def test_the_return_of_a_formatted_show_name(tv):
    _file = File('The Big Bang Theory', '3', ['01'], '.mp4')
    with mock.patch('requests.get', side_effect=mock_get):
        tv.retrieve_episode_title(_file.episodes[0])
    method = partial(tv.format_show_name, _file.show_name)
    assert method(the=False) == 'The Big Bang Theory'
    assert method(the=True) == 'Big Bang Theory, The'
Exemple #2
0
def test_searching_with_an_ambiguous_name_returns_the_correct_show(tv):
    _file = File('The O.C.', '3', ['04'], 'mp4')
    with mock.patch('requests.get', side_effect=mock_get):
        tv.retrieve_episode_title(_file.episodes[0])
    method = partial(tv.format_show_name, _file.show_name)
    assert method(the=False) == 'The O.C.'
    assert method(the=True) == 'O.C., The'
Exemple #3
0
 def test_passing_in_a_show_name_renames_a_file_using_that_name(self):
     show_name = 'Doctor Who (2005)'
     _file = File('doctor who', '5', ['10'], 'mp4')
     _file.show_name = show_name
     _file.episodes[0].title = ''
     path = self.tv.build_path(_file, rename_dir=self.files, organise=False)
     assert os.path.split(path.split('-')[0].strip())[1] == show_name
Exemple #4
0
 def test_passing_in_a_season_number_to_retrieve_episode_name_returns_the_correct_episode_name_from_that_season(
         self):
     _file = File('chuck', '1', ['08'], 'mp4')
     _file.season = '2'
     _file.episodes[0].title = ''
     title = self.tv.retrieve_episode_title(_file.episodes[0])
     assert title == 'Chuck Versus the Gravitron'
Exemple #5
0
    def setup(self):
        # absolute path to the file is pretty useful
        self.path = os.path.abspath(os.path.dirname(__file__))

        def build_path(path):
            if not os.path.exists(path):
                os.mkdir(path)

            return path

        def join_path(path):
            return os.path.join(self.path, path)

        self.files = build_path(join_path('files'))
        self.subfolder = build_path(join_path('subfolder'))
        self.organised = build_path(join_path('organised'))
        self.renamed = join_path('renamed')

        for path in (self.files, self.subfolder):
            self.build_files(path)

        # instantiate tvr
        self.config = Config()
        self.config.config['defaults']['renamed'] = self.files
        self.tv = TvRenamr(self.files, self.config, cache=False)

        self._file = File('The Big Bang Theory', '3', ['01'], '.mp4')
        self._file.episodes[0].title = 'The Electric Can Opener Fluctuation'
Exemple #6
0
 def test_searching_with_an_ambiguous_name_returns_the_correct_show(self):
     _file = File('The O.C.', '3', ['04'], 'mp4')
     for library in self.libs:
         self.tv.retrieve_episode_title(_file.episodes[0], library=library)
         method = partial(self.tv.format_show_name, _file.show_name)
         assert method(the=False) == 'The O.C.'
         assert method(the=True) == 'O.C., The'
Exemple #7
0
 def test_missing_episode_raises_missing_information_exception(self):
     with raises(MissingInformationException):
         File(
             show_name='foo',
             season=1,
         ).safety_check()
Exemple #8
0
 def test_missing_show_name_raises_missing_information_exception(self):
     with raises(MissingInformationException):
         File(season=1, episodes=[1]).safety_check()
Exemple #9
0
def rename(
    config,
    canonical,
    debug,
    dry_run,
    episode,  # pylint: disable-msg=too-many-arguments
    ignore_filelist,
    log_file,
    log_level,
    name,  # pylint: disable-msg=too-many-arguments
    no_cache,
    output_format,
    organise,
    partial,  # pylint: disable-msg=too-many-arguments
    quiet,
    recursive,
    rename_dir,
    regex,
    season,  # pylint: disable-msg=too-many-arguments
    show,
    show_override,
    specials,
    symlink,
    the,  # pylint: disable-msg=too-many-arguments
    paths):  # pylint: disable-msg=too-many-arguments

    logger = functools.partial(log.log, 26)

    if dry_run or debug:
        start_dry_run(logger)

    if not paths:
        paths = [os.getcwd()]

    for current_dir, filename in build_file_list(paths, recursive,
                                                 ignore_filelist):
        try:
            tv = TvRenamr(current_dir, debug, dry_run, symlink, no_cache)

            _file = File(**tv.extract_details_from_file(
                filename,
                user_regex=regex,
                partial=partial,
            ))
            # TODO: Warn setting season & episode will override *all* episodes
            _file.user_overrides(show, season, episode)
            _file.safety_check()

            conf = get_config(config)

            for ep in _file.episodes:
                canonical = conf.get('canonical',
                                     _file.show_name,
                                     default=ep.file_.show_name,
                                     override=canonical)

                # TODO: Warn setting name will override *all* episodes
                ep.title = tv.retrieve_episode_title(
                    ep,
                    canonical=canonical,
                    override=name,
                )

                # TODO: make this a sanitisation method on ep?
                ep.title = ep.title.replace('/', '-')

            show = conf.get_output(_file.show_name, override=show_override)
            the = conf.get('the', show=_file.show_name, override=the)
            _file.show_name = tv.format_show_name(show, the=the)

            _file.set_output_format(
                conf.get('format',
                         _file.show_name,
                         default=_file.output_format,
                         override=output_format))

            organise = conf.get('organise',
                                _file.show_name,
                                default=False,
                                override=organise)
            rename_dir = conf.get('renamed',
                                  _file.show_name,
                                  default=current_dir,
                                  override=rename_dir)
            specials_folder = conf.get(
                'specials_folder',
                _file.show_name,
                default='Season 0',
                override=specials,
            )
            path = tv.build_path(
                _file,
                rename_dir=rename_dir,
                organise=organise,
                specials_folder=specials_folder,
            )

            tv.rename(filename, path)
        except errors.NetworkException:
            if dry_run or debug:
                stop_dry_run(logger)
            sys.exit(1)
        except (AttributeError, errors.EmptyEpisodeTitleException,
                errors.EpisodeNotFoundException,
                errors.IncorrectRegExpException, errors.InvalidXMLException,
                errors.MissingInformationException,
                errors.OutputFormatMissingSyntaxException,
                errors.PathExistsException, errors.ShowNotFoundException,
                errors.UnexpectedFormatException) as e:
            continue
        except Exception as e:
            if debug:
                # In debug mode, show the full traceback.
                raise
            for msg in e.args:
                log.critical('Error: %s', msg)
            sys.exit(1)

        # if we're not doing a dry run add a blank line for clarity
        if not (debug and dry_run):
            log.info('')

    if dry_run or debug:
        stop_dry_run(logger)
Exemple #10
0
def test_searching_for_a_specific_episode_returns_the_correct_episode(tv):
    _file = File('The Big Bang Theory', '3', ['01'], '.mp4')
    with mock.patch('requests.get', side_effect=mock_get):
        title = tv.retrieve_episode_title(episode=_file.episodes[0])
    assert title == 'The Electric Can Opener Fluctuation'
Exemple #11
0
def test_searching_for_an_episode_that_does_not_exist_returns_an_exception(tv):
    _file = File('chuck', '1', ['99'], '.mp4')
    with mock.patch('requests.get', side_effect=mock_get), raises(EpisodeNotFoundException):
        tv.retrieve_episode_title(_file.episodes[0])
Exemple #12
0
def test_searching_for_an_incorrect_name_returns_an_exception(tv):
    _file = File('west, wing', '4', ['01'], '.mp4')
    with mock.patch('requests.get', side_effect=mock_get), raises(ShowNotFoundException):
        tv.retrieve_episode_title(_file.episodes[0])
Exemple #13
0
 def setup(self):
     self._file = File('The Big Bang Theory', '3', ['01'], '.mp4')
     self._file.episodes[0].title = 'The Electric Can Opener Fluctuation'
Exemple #14
0
 def test_searching_for_an_episode_that_does_not_exist_returns_an_exception(
         self):
     _file = File('chuck', '1', ['99'], '.mp4')
     for library in self.libs:
         with raises(NoMoreLibrariesException):
             self.tv.retrieve_episode_title(_file.episodes[0], library)
Exemple #15
0
 def test_searching_for_an_incorrect_name_returns_an_exception(self):
     _file = File('west, wing', '4', ['01'], '.mp4')
     for library in self.libs:
         with raises(NoMoreLibrariesException):
             self.tv.retrieve_episode_title(_file.episodes[0], library)