diff --git a/pysorter/core/pysorter.py b/pysorter/core/pysorter.py index 0e8e40f..2b9cbce 100644 --- a/pysorter/core/pysorter.py +++ b/pysorter/core/pysorter.py @@ -73,12 +73,17 @@ def parse_args(args=None): action='store_true', dest='do_remove_empty_dirs') + parser.add_argument('-l', '--log', + help='Print all the actions that were taken to stdout.', + action='store_true', + dest='do_print_log') + parser.add_argument('-V', '--version', action='version', version=__version__, help='Prints out the current version of pysorter') - return validate_arguments(parser.parse_args(args)) + return validate_arguments(parser.parse_args(args)) def main(args=None): diff --git a/pysorter/core/sorter.py b/pysorter/core/sorter.py index dcf7f9d..37be85a 100644 --- a/pysorter/core/sorter.py +++ b/pysorter/core/sorter.py @@ -21,7 +21,8 @@ def __init__(self, do_process_dirs=False, do_recurse=False, - do_remove_empty_dirs=False): + do_remove_empty_dirs=False, + do_print_log=False): """ Construct a new instance of PySorter for organizing some directory using certain parameters @@ -43,6 +44,9 @@ def __init__(self, do_remove_empty_dirs : boolean toggles recursive empty directory removal + do_print_log : boolean + print all the actions that were taken to stdout + dest_dir: string the directory to organize your files into, instead of doing it in-place, if not set, it will be set to `source_dir` @@ -74,6 +78,8 @@ def __init__(self, self.do_recurse = do_recurse self.do_process_dirs = do_process_dirs + self.do_print_log = do_print_log + @fs.save_cwd def sortrule_destination(self, path): """ @@ -156,5 +162,9 @@ def process(self, path): if fs.is_file(path): fs.move_file(path, dst) + if self.do_print_log: + print("mv {} --> {}".format(path, dst)) else: fs.move_dir(path, dst) + if self.do_print_log: + print("mvd {} --> {}".format(src, dst)) diff --git a/pysorter/filesystem.py b/pysorter/filesystem.py index cc8e14f..643b3fa 100644 --- a/pysorter/filesystem.py +++ b/pysorter/filesystem.py @@ -97,6 +97,7 @@ def move_file(src, dst): if not os.path.isfile(src): raise OSError("Source path is not a file: {}".format(src)) #print "mv {} --> {}".format(src, dst) + shutil.move(src, dst) @@ -104,11 +105,12 @@ def move_file(src, dst): # Directory related # -------------------------------------------------------------------------- -def move_dir(src, dst): +def move_dir(src, dst, do_print_log=False): """Moves the source directory INTO the destination""" if not os.path.isdir(src): raise OSError("Source path is not a directory: {}".format(src)) #print "mvd {} --> {}".format(src, dst) + shutil.move(src, dst) def remove_empty_dirs(path): diff --git a/pysorter/tests/test_sorter.py b/pysorter/tests/test_sorter.py index c9d1dfc..2c35910 100644 --- a/pysorter/tests/test_sorter.py +++ b/pysorter/tests/test_sorter.py @@ -187,6 +187,24 @@ def test_print_version(capsys): except AssertionError: assert out.strip() == __version__ +@pytest.mark.xfail +def test_do_print_log(d): + filetypes = { + r'\.pdf$': 'docs/' + } + + files = ['file_test.pdf'] + to_sort = 'files/' + + helper.initialize_dir(d, filetypes, helper.build_path_tree(files, to_sort)) + + args = [to_sort, '-l', '--log', 'filetypes.py'] + + try: + pysorter.main(args) + except SystemExit: + out, err = capsys.readouterr() + assert out == 'mv files/file_test.pdf --> files/pdf/file_test.pdf' @helper.tempdir def test_write_unknown_types_correct(d):