예제 #1
0
 def test_pull_dir_client_to_server(self):
     """Copy dir from client to server"""
     h_register_dummy_user_device_client()
     client_folder = gen_paths.normalize_path(
         client_paths.LOCAL_CLIENT_DATA, "folder1")
     h_fill_dummy_dir(client_folder)
     actions = [
         c_sync.create_action(gen_paths.normalize_path("folder1"),
                              gen_paths.normalize_path(""),
                              gen_json.ACTION_PULL,
                              remote_abs_path=client_folder,
                              is_directory=True)
     ]
     net_interface.server.execute_actions(actions)
     self.assertTrue(
         os.path.exists((path_utils.rel_user_path_to_abs("folder1", 1))))
     self.assertTrue(
         os.path.exists(
             (path_utils.rel_user_path_to_abs("folder1/inner1", 1))))
     self.assertTrue(
         os.path.exists(
             (path_utils.rel_user_path_to_abs("folder1/inner2", 1))))
     self.assertTrue(
         os.path.exists((path_utils.rel_user_path_to_abs(
             "folder1/inner1/test_inner.txt", 1))))
     self.assertTrue(
         os.path.exists(
             (path_utils.rel_user_path_to_abs("folder1/test.txt", 1))))
예제 #2
0
def move(rel_src_path: str, rel_dest_path: str) -> None:
    """paths are relative to users root folder (ROOT/user_X/).
    Folders that don't exist are created"""
    client_logger_sync().info(
        f"Move file: rel_src_path={rel_src_path}, rel_dest_path={rel_dest_path}"
    )
    abs_src_path = path_utils.rel_user_path_to_abs(rel_src_path)
    abs_dest_path = path_utils.rel_user_path_to_abs(rel_dest_path)
    return gen_file_exchanges.move(abs_src_path, abs_dest_path)
예제 #3
0
def remove_file_dir(rel_path: str, only_empty: bool = False):
    client_logger_sync().info(
        f"Remove file/dir: rel_path={rel_path}, only_empty={only_empty}")
    abs_path = path_utils.rel_user_path_to_abs(rel_path)
    if os.path.isdir(abs_path):
        gen_file_exchanges.remove_dir(abs_path, only_empty)
    else:
        gen_file_exchanges.remove_file(abs_path)
예제 #4
0
def get_dir(rel_src_path: str, abs_dest_path: str) -> None:
    client_logger_sync().info(
        f"Get dir: rel_src_path={rel_src_path}, abs_dest_path={abs_dest_path}")
    abs_src_path = path_utils.rel_user_path_to_abs(rel_src_path)
    return gen_file_exchanges.get_dir(
        abs_src_path, abs_dest_path,
        net_interface.get_user().remote_functions.pull_file,
        net_interface.get_user().remote_functions.make_dirs)
예제 #5
0
def generate_content_of_folder(folder_name: str,
                               only_files_list=False,
                               user_id: int = -1):
    if user_id == -1:
        user_id = net_interface.get_user_id()
    abs_path = path_utils.rel_user_path_to_abs(folder_name, user_id)
    return gen_merge_folders.generate_content_of_folder(
        abs_path, only_files_list, folder_name)
예제 #6
0
def pull_dir(abs_client_path: str, rel_server_path: str) -> None:
    """Pulls a folder with all it files and subfolders from the client."""
    client_logger_sync().info(
        f"Pull dir: abs_client_path={abs_client_path}, rel_server_path={rel_server_path}"
    )
    client = net_interface.get_user()
    abs_server_path = path_utils.rel_user_path_to_abs(rel_server_path,
                                                      client.user_id)
    os.makedirs(abs_server_path, exist_ok=True)
    client.remote_functions.get_dir(abs_client_path, abs_server_path)
예제 #7
0
def pull_file(abs_client_path: str, rel_server_path: str) -> None:
    """Pulls a file from the client and saves it at the server. The server path is relative to the users root folder.
    Folders that don't exist are created."""
    client_logger_sync().info(
        f"Pull file: abs_client_path={abs_client_path}, rel_server_path={rel_server_path}"
    )
    client = net_interface.get_user()
    abs_server_path = path_utils.rel_user_path_to_abs(rel_server_path,
                                                      client.user_id)
    os.makedirs(os.path.split(abs_server_path)[0], exist_ok=True)
    file = client.remote_functions.get_file(abs_client_path, abs_server_path)
예제 #8
0
    def test_merge_folders(self):
        c_json.init_file(empty=True)
        h_register_dummy_user_device_client()
        abs_local_path = normalize_path(c_paths.LOCAL_CLIENT_DATA, "folder1")
        h_create_empty(abs_local_path)
        dummy_content = {"folder_name": "folder1", "files": ["test.txt", "test2.txt"], "folders": [
            {"folder_name": "inner1", "files": ["inner1_test.txt", "inner1_test2.txt"], "folders": []},
            {"folder_name": "inner2", "files": ["inner2_test.txt", "inner2_test2.txt"], "folders": []}
        ]}
        h_create_files_folders(abs_local_path, dummy_content)

        interface.add_sync_folder(abs_local_path, "folder1")

        server_path = path_utils.rel_user_path_to_abs("folder1", 1)
        current_structure = gen_merge_folders.generate_content_of_folder(server_path, only_files_list=True,
                                                                         top_folder_name="folder1")
        expected_structure = dummy_content
        self.assertEqual(expected_structure, current_structure)
예제 #9
0
    def test_prioritize_latest(self):
        f1_content = {"folder_name": "folder1", "files": ["f1.txt", "f2.txt"], "folders": []}
        f2_content = {"folder_name": "folder1", "files": ["f1.txt", "f2.txt", "f3.txt"], "folders": []}
        f1_path = os.path.join(c_paths.LOCAL_CLIENT_DATA, "folder1")
        f2_path = path_utils.rel_user_path_to_abs("folder1", 1)

        generator = self.h_test_merge_method(merge_folders.MergeMethods.PRIORITIZE_LATEST, f1_content, f2_content,
                                             f2_content)
        next(generator)
        with open(os.path.join(f1_path, "f1.txt"), "w") as f:
            f.write("New content in f1")
        with open(os.path.join(f2_path, "f2.txt"), "w") as f:
            f.write("New content in f2")
        next(generator)
        with open(os.path.join(f1_path, "f2.txt"), "r") as f:
            self.assertEqual("New content in f2", f.read().strip())
        with open(os.path.join(f2_path, "f1.txt"), "r") as f:
            self.assertEqual("New content in f1", f.read().strip())
예제 #10
0
 def test_pull_dir_server_to_client(self):
     """Copy dir from server to client"""
     h_register_dummy_user_device_client()
     server_folder = gen_paths.normalize_path(
         path_utils.rel_user_path_to_abs("folder1", 1))
     client_folder = gen_paths.normalize_path(
         client_paths.LOCAL_CLIENT_DATA, "folder1")
     h_fill_dummy_dir(server_folder)
     net_interface.server.get_dir("folder1", client_folder)
     self.assertTrue(os.path.exists((os.path.join(client_folder))))
     self.assertTrue(os.path.exists((os.path.join(client_folder,
                                                  "inner1"))))
     self.assertTrue(os.path.exists((os.path.join(client_folder,
                                                  "inner2"))))
     self.assertTrue(
         os.path.exists((os.path.join(client_folder,
                                      "inner1/test_inner.txt"))))
     self.assertTrue(
         os.path.exists((os.path.join(client_folder, "test.txt"))))
예제 #11
0
    def h_test_merge_method(self, merge_method, f1_init_content, f2_init_content, expected_content):
        c_json.init_file(empty=True)
        h_register_dummy_user_device_client()
        abs_local_path = normalize_path(c_paths.LOCAL_CLIENT_DATA, "folder1")
        h_create_empty(abs_local_path)
        f1_path = os.path.join(c_paths.LOCAL_CLIENT_DATA, "folder1")
        f2_path = path_utils.rel_user_path_to_abs("folder1", 1)
        net_interface.server.add_folder(f2_init_content["folder_name"])

        h_create_files_folders(f1_path, f1_init_content)
        h_create_files_folders(f2_path, f2_init_content)

        yield

        interface.add_sync_folder(abs_local_path, "folder1", merge_method=merge_method)

        f1_structure = gen_merge_folders.generate_content_of_folder(f1_path, only_files_list=True,
                                                                    top_folder_name=f1_init_content["folder_name"])
        f2_structure = gen_merge_folders.generate_content_of_folder(f2_path, only_files_list=True,
                                                                    top_folder_name=f2_init_content["folder_name"])
        self.assertEqual(expected_content, f2_structure)
        self.assertEqual(expected_content, f1_structure)
        yield
예제 #12
0
def make_dirs(rel_path: str, exist_ok: bool = True):
    client_logger_sync().info(
        f"Make dirs: rel_path={rel_path}, exist_ok={exist_ok}")
    abs_path = path_utils.rel_user_path_to_abs(rel_path)
    return gen_file_exchanges.make_dirs(abs_path, exist_ok)
예제 #13
0
def get_file(rel_src_path: str, abs_file_dest_path: str) -> net.File:
    client_logger_sync().info(
        f"Get file: rel_src_path={rel_src_path}, abs_file_dest_path={abs_file_dest_path}"
    )
    abs_file_src_path = path_utils.rel_user_path_to_abs(rel_src_path)
    return gen_file_exchanges.get_file(abs_file_src_path, abs_file_dest_path)