def test_windowsfilenames(): """Tests makeValidFilename windows_safe flag makes Windows-safe filenames """ assertEquals(makeValidFilename("Test/File.avi", windows_safe = True), "Test_File.avi") assertEquals(makeValidFilename("\\/:*?<Evil>|\"", windows_safe = True), "______Evil___") assertEquals(makeValidFilename("COM2.txt", windows_safe = True), "_COM2.txt") assertEquals(makeValidFilename("COM2", windows_safe = True), "_COM2")
def test_dotfilenames(): """Tests makeValidFilename on filenames only consisting of . """ assertEquals(makeValidFilename("."), "_.") assertEquals(makeValidFilename(".."), "_..") assertEquals(makeValidFilename("..."), "_...") assertEquals(makeValidFilename(".test.rc"), "_.test.rc")
def _test_truncation(max_len, windows_safe): """Tests truncation works correctly. Called with different parameters for both Windows and Darwin/Linux. """ assertEquals(makeValidFilename("a" * 300, windows_safe = windows_safe), "a" * max_len) assertEquals(makeValidFilename("a" * 255 + ".avi", windows_safe = windows_safe), "a" * (max_len-4) + ".avi") assertEquals(makeValidFilename("a" * 251 + "b" * 10 + ".avi", windows_safe = windows_safe), "a" * (max_len-4) + ".avi") assertEquals(makeValidFilename("test." + "a" * 255, windows_safe = windows_safe), "test." + "a" * (max_len-5))
def test_replacewith(): """Tests replacing blacklisted character with custom characters """ assertEquals( makeValidFilename("My Test File.avi", custom_blacklist=" ", replace_with="."), "My.Test.File.avi")
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'])
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'])
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): 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, 'seasonnumber': 0, } 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 movienamer(movie): directory = '/'.join(movie.split('/')[:-1]) filename, extension = os.path.splitext(os.path.basename(movie)) results = identify(filename, directory) if len(results) == 0: print movie + ': No results found. Skipping movie file\n' return False action = confirm(results, filename, extension) if action == 'SKIP': print 'Skipping movie file\n' return False elif action == 'QUIT': print 'Exiting movienamer' sys.exit() else: i = int(action) result = results[i - 1] if directory == '': directory = '.' title = makeValidFilename(result['title'], False, True, "", "_") dest = (directory + '/' + title + ' (' + result['year'] + ')' + extension) if os.path.isfile(dest): print 'File already exists: ' + dest print 'Overwrite?' final_confirmation = raw_input('([y]/n/q)'.encode('utf-8')).lower() if final_confirmation == '': final_confirmation = 'y' if final_confirmation not in ['y', 'n', 'q']: final_confirmation = raw_input( '([y]/n/q)'.encode('utf-8')).lower() if final_confirmation == '': final_confirmation = 'y' if final_confirmation == 'n': print 'Skipping movie file\n' return False elif final_confirmation == 'q': print 'Exiting movienamer' sys.exit() return movie, dest
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): 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 test_customblacklist(): """Test makeValidFilename custom_blacklist feature """ assertEquals(makeValidFilename("Test.avi", custom_blacklist="e"), "T_st.avi")
def test_replacewith(): """Tests replacing blacklisted character with custom characters """ assertEquals(makeValidFilename("My Test File.avi", custom_blacklist=" ", replace_with="."), "My.Test.File.avi")
def test_basic(): """Test makeValidFilename does not mess up simple filenames """ assertEquals(makeValidFilename("test.avi"), "test.avi") assertEquals(makeValidFilename("Test File.avi"), "Test File.avi") assertEquals(makeValidFilename("Test"), "Test")
def test_dirseperators(): """Tests makeValidFilename removes directory separators """ assertEquals(makeValidFilename("Test/File.avi"), "Test_File.avi") assertEquals(makeValidFilename("Test/File"), "Test_File")