Example #1
0
    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
Example #2
0
    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)
Example #3
0
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]