Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion pysorter/core/pysorter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
12 changes: 11 additions & 1 deletion pysorter/core/sorter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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`
Expand Down Expand Up @@ -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):
"""
Expand Down Expand Up @@ -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))
4 changes: 3 additions & 1 deletion pysorter/filesystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,18 +97,20 @@ 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)


# --------------------------------------------------------------------------
# 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):
Expand Down
18 changes: 18 additions & 0 deletions pysorter/tests/test_sorter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down