def possible_new_dirs(file_path, memory): """ @type file_path: str, unicode @type memory: Memory """ if file_path is None: raise Exception("file_path is None") possible_new_dir_list = [] file_dir = os.path.dirname(file_path) rel_unix_path = path_to_relative_path_unix_style(memory, file_dir) unix_paths = rel_unix_path.split("/") tmp_dir = "" for up in unix_paths: if len(up.strip()) > 0: tmp_dir += "/" + up possible_new_dir_list.append(tmp_dir) return tuple(set(possible_new_dir_list))
def upload_files(memory, options, serverindex, file_uploads): """ upload_files @type memory: Memory @type options: optparse.Values, instance @type serverindex: dict @type file_uploads: tuple """ path_guid_cache = {} cnt = 0 for uf in file_uploads: try: parent_path = uf["local_path"].replace(options.dir, "") parent_path = os.path.dirname(parent_path) uf["parent_path"] = parent_path if parent_path in path_guid_cache: uf["parent_short_id"] = path_guid_cache[parent_path] else: uf["parent_short_id"], memory = path_to_server_guid(memory, options, serverindex, parent_path) path_guid_cache[parent_path] = uf["parent_short_id"] update_progress(cnt, len(file_uploads), "checking path " + parent_path) cnt += 1 except NoParentFound: uf["parent_short_id"] = uf["parent_path"] = "" files_uploaded = [] file_uploads = sorted(file_uploads, key=lambda k: k["size"]) for uf in file_uploads: update_progress(len(files_uploaded) + 1, len(file_uploads), "uploading " + os.path.basename(uf["local_path"])) if os.path.exists(uf["local_path"]): file_path = upload_file(memory.get("session"), options.server, options.cryptobox, uf["local_path"], path_to_relative_path_unix_style(memory, uf["local_path"]), uf["parent_short_id"]) files_uploaded.append(file_path) output_json({"item_progress": 0}) return memory, tuple(files_uploaded)
def dirs_on_local(memory, options, localindex, dirname_hashes_server, serverindex): """ @type memory: Memory @param dirname_hashes_server: folders on server @type dirname_hashes_server: dict @type serverindex: dict @param options: options @type options: optparse.Values, instance @type localindex: dict @return: list of dirs on server or to remove locally @rtype: tuple """ if "tree_timestamp" not in serverindex: raise Exception("dirs_on_local needs a tree timestamp") tree_timestamp = int(serverindex["tree_timestamp"]) local_dirs_not_on_server = [] for dirhashlocal in localindex["dirnames"]: found = False for dirhashserver in dirname_hashes_server: if strcmp(dirhashserver, localindex["dirnames"][dirhashlocal]["dirnamehash"]): found = True if not found: if localindex["dirnames"][dirhashlocal]["dirname"] != options.dir: local_dirs_not_on_server.append(localindex["dirnames"][dirhashlocal]) dirs_make_server = [] dirs_del_local = [] server_dir_history = [] if memory.has("serverpath_history"): server_dir_history = [path_to_relative_path_unix_style(memory, x[0]) for x in memory.get("serverpath_history")] for node in local_dirs_not_on_server: if os.path.exists(node["dirname"]): rel_dirname = path_to_relative_path_unix_style(memory, node["dirname"]) node["relname"] = rel_dirname if rel_dirname not in serverindex["dirlist"]: folder_timestamp = os.stat(node["dirname"]).st_mtime if int(folder_timestamp) >= int(tree_timestamp): dirs_make_server.append(node) else: if node["dirname"].replace(options.dir, "") not in server_dir_history: dirs_make_server.append(node) else: dirs_del_local.append(node) else: dirs_del_local.append(node) dirs_make_server_unique = [] key_set = set([k["dirnamehash"] for k in dirs_make_server]) for k in key_set: for i in dirs_make_server: if strcmp(i["dirnamehash"], k): dirs_make_server_unique.append(i) break return dirs_make_server_unique, dirs_del_local