def create_folder(self, path, parents=True): """Create a new folder in your Google drive. Parameters ---------- path : str folder path parents : bool if True, create parent folders as needed (Default value = True) Returns ------- dict information for the created directory """ parent, to_create = folders_to_create(path, self._get_dirs(False)) if len(to_create) > 1 and parents is not True: raise Exception( "If you want to create nested directories pass parents=True") for directory in to_create: parent = self._drive_request( "post", params={"fields": "name,id,parents"}, data={ "mimeType": "application/vnd.google-apps.folder", "name": directory, "parents": [parent["id"]], }, headers={"Content-Type": "application/json"}, ) self.refresh_directories() return parent
def move_file(self, file_id, path, create=False): """ Move a file to the given path. Parameters ---------- file_id : str file id path : str folder path create : bool whether to create any missing folders (Default value = False) Returns ------- """ if path == "/": folder_id = "root" else: parent, missing = folders_to_create(path, self._get_dirs(False)) if missing: if not create: raise Exception("Folder does not exist") parent = self.create_folder(path) folder_id = parent["id"] old_parents = self._drive_request( "get", file_id, params={"fields": "parents"} ).get("parents", []) params = {"addParents": folder_id, "removeParents": ",".join(old_parents)} self._drive_request("patch", file_id, params)
def test_folders_to_create(): dirs = [ {"id": "1", "name": "sub", "parents": ["root"], "path": "/sub"}, {"id": "2", "name": "subsub", "parents": ["1"], "path": "/sub/subsub"}, {"id": "3", "name": "sub1", "parents": ["root"], "path": "/sub1"}, { "id": "4", "name": "subsubsub", "parents": ["2"], "path": "/sub/subsub/subsubsub", }, ] tests = [ ("/does/not/exist", ({"id": "root"}, ["does", "not", "exist"])), ("/sub/does/not/exist", (dirs[0], ["does", "not", "exist"])), ("/sub/subsub", (dirs[1], [])), ] for test in tests: assert util.folders_to_create(test[TEST], dirs) == test[ANSWER]