diff --git a/acd_cli.py b/acd_cli.py index 8092959..90f64fd 100755 --- a/acd_cli.py +++ b/acd_cli.py @@ -476,7 +476,7 @@ def create_dl_jobs(node_id: str, local_path: str, preserve_mtime: bool, return 0 if node.is_folder: - return traverse_dl_folder(node_id, local_path, preserve_mtime, exclude, jobs) + return traverse_dl_folder(node, local_path, preserve_mtime, exclude, jobs) loc_name = node.name @@ -500,15 +500,13 @@ def create_dl_jobs(node_id: str, local_path: str, preserve_mtime: bool, return 0 -def traverse_dl_folder(node_id: str, local_path: str, preserve_mtime: bool, +def traverse_dl_folder(node: 'Node', local_path: str, preserve_mtime: bool, exclude: 'List[re._pattern_type', jobs: list) -> int: """Duplicates remote folder structure.""" if not local_path: local_path = os.getcwd() - node = cache.get_node(node_id) - if node.name is None: curr_path = os.path.join(local_path, 'acd') else: @@ -521,9 +519,13 @@ def traverse_dl_folder(node_id: str, local_path: str, preserve_mtime: bool, return ERR_CR_FOLDER ret_val = 0 - children = sorted(cache.list_children(node.id)) - for child in children: - ret_val |= create_dl_jobs(child.id, curr_path, preserve_mtime, exclude, jobs) + folders, files = cache.list_children(node.id) + folders, files = sorted(folders), sorted(files) + + for file in files: + ret_val |= create_dl_jobs(file.id, curr_path, preserve_mtime, exclude, jobs) + for folder in folders: + ret_val |= traverse_dl_folder(folder, curr_path, preserve_mtime, exclude, jobs) return ret_val diff --git a/acdcli/cache/query.py b/acdcli/cache/query.py index fc87239..47aa1da 100644 --- a/acdcli/cache/query.py +++ b/acdcli/cache/query.py @@ -93,6 +93,9 @@ def __init__(self, row): except IndexError: self.size = 0 + def __lt__(self, other): + return self.name < other.name + def __hash__(self): return hash(self.id) diff --git a/python-requirements.txt b/python-requirements.txt new file mode 100644 index 0000000..d9558d9 --- /dev/null +++ b/python-requirements.txt @@ -0,0 +1,13 @@ +appdirs==1.4.3 +certifi==2017.11.5 +chardet==3.0.4 +colorama==0.3.9 +dateutils==0.6.6 +idna==2.6 +python-dateutil==2.6.1 +pytz==2017.3 +requests==2.18.4 +requests-toolbelt==0.8.0 +six==1.11.0 +urllib3==1.22 +