Exemplo n.º 1
0
def _download_ftp_dir(ftp_con, ftp_src, dest):
    print('Downloading dir: "{}" to: {}'.format(ftp_src, dest))
    if not prepare_ftp_and_os_indexes(ftp_con, ftp_src, dest):
        return False

    file_list = get_file_list(ftp_con)
    if file_list is None or file_list is False:
        return False

    ftp_src_dir_name = MyGlobals.get_dir_name(ftp_src)
    print('Dir {} Files:\n  -- {}\n\n'.format(ftp_src_dir_name,
                                              '\n  -- '.join(file_list)))

    cur_ind = 0
    end_ind = len(file_list)
    download_process_ok = True
    while (download_process_ok and cur_ind < end_ind):
        MyGlobals.sleep_for_a_while(MyGlobals.sleepBetweenDownloads_Default)
        cur_target_name = file_list[cur_ind]

        # Testing if it's a directory - then recurse
        try:
            target_path = ftp_src + "/" + cur_target_name
            # Check if a directory - if so then ftp-cd to it:
            if MyGlobals.isVerbose:
                print("Checking if {} is a directory".format(target_path))
            is_dir = ftp_check_is_dir(ftp_con, target_path)
            if is_dir is None:
                print(
                    'Failed checking if {} is a directory'.format(target_path))
                return False
            elif is_dir:
                if not change_ftp_dir(ftp_con, target_path):
                    return False
            else:
                raise ftplib.error_perm(
                    "target_path={} is a file".format(target_path))

            download_process_ok = download_process_ok and _download_ftp_dir(
                ftp_con, target_path, dest + '/' + cur_target_name)
            if download_process_ok and not change_ftp_dir(ftp_con, ftp_src):
                return False

            # If got flag: --remove_src then Attempt to remove the dir after downloading it successfully
            if download_process_ok and MyGlobals.isRemoveSrc:
                download_process_ok = download_process_ok and ftp_delete_dir(
                    ftp_con, target_path)

        except ftplib.error_perm:
            # It's a file:
            download_process_ok = download_process_ok and download_ftp_file(
                ftp_con, cur_target_name, dest)

        cur_ind += 1

    return download_process_ok
Exemplo n.º 2
0
def download_ftp_dir(ftp_con, ftp_src, dest):
    dest = MyGlobals.remove_trailing_slash(dest)
    ftp_src = MyGlobals.remove_trailing_slash(ftp_src)
    src_path_dir_name = MyGlobals.get_dir_name(ftp_src)

    download_result = _download_ftp_dir(ftp_con, ftp_src,
                                        dest + '/' + src_path_dir_name)

    if download_result and MyGlobals.isRemoveSrc:
        return download_result and ftp_delete_dir(ftp_con, ftp_src)
    return download_result