def test_ifempty(self): template = '${ifempty(var, \'test\', \'\')}' files = ['test.mkv'] params = {'var': None} results = new_names(rename_process(template, files, params=params)) self.assertEqual(['test'], results) template = '${ifempty(var, None, var+\'test\')}' files = ['test.mkv'] params = {'var': 'ww'} results = new_names(rename_process(template, files, params=params)) self.assertEqual(['wwtest'], results)
def test_plex_multiepisode(self): template = '{plex}' files = ['file.mkv'] params = {'show': 'TV Show', 'season': 1, 'episode_num': 2, 'episode_name': 'Episode Name', 'episode_num_final': 3} results = new_names(rename_process(template, files, params=params)) self.assertEqual(['TV Show/Season 01/TV Show - S01E02-E03 - Episode Name.mkv'], results) params = {'show': 'TV Show', 'season': 1, 'episode_num': 2, 'episode_name': 'Episode Name', 'episode_num_final': 10} results = new_names(rename_process(template, files, params=params)) self.assertEqual(['TV Show/Season 01/TV Show - S01E02-E10 - Episode Name.mkv'], results)
def test_default_length(self): template = '${i|zpad}' files = [str(x) for x in range(5)] results = new_names(rename_process(template, files)) self.assertEqual('01', results[0]) template = '${i|zpad}' files = [str(x) for x in range(15)] results = new_names(rename_process(template, files)) self.assertEqual('01', results[0]) template = '${i|zpad}' files = [str(x) for x in range(100)] results = new_names(rename_process(template, files)) self.assertEqual('001', results[0])
def test_plex_specials(self): template = '{plex}' output_dir = '/Some/Path' files = ['file.mkv'] params = {'show': 'TV Show', 'season': 0, 'episode_num': 2, 'episode_name': 'Episode Name', 'episode_num_final': None} results = new_names(rename_process(template, files, params=params, output_dir=output_dir)) self.assertEqual(['/Some/Path/TV Show/Specials/TV Show - S00E02 - Episode Name.mkv'], results)
def test_plex(self): template = '{plex}' files = ['file.mkv'] params = {'show': 'TV Show', 'season': 1, 'episode_num': 2, 'episode_name': 'Episode Name', 'episode_num_final': None} results = new_names(rename_process(template, files, params=params)) self.assertEqual(['TV Show/Season 01/TV Show - S01E02 - Episode Name.mkv'], results) params = {'show': 'TV Show', 'season': 1, 'episode_num': 2, 'episode_name': None, 'episode_num_final': None} results = new_names(rename_process(template, files, params=params)) self.assertEqual(['TV Show/Season 01/TV Show - S01E02.mkv'], results) template = '/Some/Path/{plex}' params = {'show': 'TV Show', 'season': 1, 'episode_num': 2, 'episode_name': 'Episode Name', 'episode_num_final': None} results = new_names(rename_process(template, files, params=params)) self.assertEqual(['/Some/Path/TV Show/Season 01/TV Show - S01E02 - Episode Name.mkv'], results)
def _output(self, matched, not_matched, output_dir, dry_run): table = [] for file, params in matched.items(): new_name = rename_process( '{plex}', files=[file], output_dir=output_dir, params=params)[0][1] table.append((file, new_name)) table.sort(key=lambda s: s[1]) header = ('Input', 'Output') self._bulk_move(table, header, src_index=0, dest_index=1, print_table=True) if not_matched: print('Not Matched:') for file in not_matched: print(' {}'.format(file))
def subexecute(self, ns): from texttable import Texttable from media_management_scripts.support.files import list_files from media_management_scripts.renamer import rename_process import os input_to_cmd = ns['input'] template = ns['template'] output = ns['output'] regex = ns['regex'] index_start = ns['index_start'] recursive = ns['recursive'] ignore_missing_regex = ns['ignore_missing_regex'] filter_by_ext = ns['filter_by_ext'] if recursive: if filter_by_ext: file_filter = lambda f: f.endswith(filter_by_ext) else: file_filter = lambda f: True files = [] for f in input_to_cmd: if os.path.isdir(f): files.extend(list_files(f, file_filter=file_filter)) elif file_filter(f): files.append(f) else: for f in input_to_cmd: if os.path.isdir(f): raise Exception('Directory provided without recursive') files = input_to_cmd results = rename_process(template, files, index_start, output, regex, ignore_missing_regex=ignore_missing_regex) if ns['dry_run']: t = Texttable(max_width=0) t.set_deco(Texttable.VLINES | Texttable.HEADER) t.add_rows([('Source', 'Destination')] + results) print(t.draw()) else: for src, dest in results: d = os.path.dirname(dest) if d: os.makedirs(d, exist_ok=True) self._move(src, dest)
def test_regex_missing_ifempty(self): template = '${ifempty(re[1], "Unknown", str(re[1])+" ")}' files = ['S2', 'S'] regex = 'S(\d)' results = new_names(rename_process(template, files, regex=regex, ignore_missing_regex=True)) self.assertEqual(['2 ', 'Unknown'], results)
def test_regex_missing_ignore(self): template = '${re[1]}' files = ['S2', 'S'] regex = 'S(\d)' results = new_names(rename_process(template, files, regex=regex, ignore_missing_regex=True)) self.assertEqual(['2', ''], results)
def test_regex_missing(self): template = '${re[1]}' files = ['S2', 'S'] regex = 'S(\d)' with self.assertRaises(IndexError) as context: new_names(rename_process(template, files, regex=regex))
def test_regex(self): template = '${re[1]}' files = ['S2', 'S1'] regex = 'S(\d)' results = new_names(rename_process(template, files, regex=regex)) self.assertEqual(['2', '1'], results)
def test_concat2(self): template = '${zpad(i)+" "}' files = ['test.mkv', 'test2.mkv'] results = new_names(rename_process(template, files)) self.assertEqual(['01 ', '02 '], results)
def test_nested(self): template = '${lpad(zpad(i), 3)}' files = ['test.mkv', 'test2.mkv'] results = new_names(rename_process(template, files)) self.assertEqual([' 01', ' 02'], results)
def test_function(self): template = '${i | zpad}' files = ['test.mkv', 'test2.mkv'] results = new_names(rename_process(template, files)) self.assertEqual(['01', '02'], results)
def test_output_dir2(self): template = 'Path/${i}' output_dir = '/Some/Path' files = ['test.mkv', 'test2.mkv'] results = new_names(rename_process(template, files, output_dir=output_dir)) self.assertEqual(['/Some/Path/Path/1', '/Some/Path/Path/2'], results)
def test_rename(self): template = '${i}' files = ['test.mkv', 'test2.mkv'] results = new_names(rename_process(template, files)) self.assertEqual(['1', '2'], results)