Create new folder on Gdrive using pydrive module

Question:

Trying to create folder on google drive using pydrive:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth() 
drive = GoogleDrive(gauth)

Authentication works, I can download some files from my drive, etc.

But can’t figure out, how to create new folder. I’m trying:

folder_id = 'parent_folder_id'

file_metadata = {
  'name': 'test_folder',
  'parents': [folder_id],
  'mimeType': 'application/vnd.google-apps.folder'
}
file = drive.files().create(body=file_metadata, fields='id').execute()

This gives error: 'GoogleDrive' object has no attribute 'files'

Seems i missing something from docs, not sure what exactly though.

Any help appreciated.

Asked By: Oto Shavadze

||

Answers:

The python sample code that is used in the create folder example uses google-api-python-client based on the Python Quickstart, You can refer to this Drive API documentation for the list of methods available in google-api-python-client.

pydrive has a different methods used for Creating and updating file. You need to use CreateFile(metadata) to create an instance of GoogleDriveFile then use Upload()

Sample Code:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive

gauth = GoogleAuth()
gauth.LocalWebserverAuth() 
drive = GoogleDrive(gauth)
folder_id = 'parent_folder_id'

file_metadata = {
  'name': 'test_folder',
  'parents': [folder_id],
  'mimeType': 'application/vnd.google-apps.folder'
}

folder = drive.CreateFile(file_metadata)
folder.Upload()

Additional Reference:

TO CREATE A NEW FOLDER IN GOOGLE DRIVE THROUGH PYTHON SCRIPT USING PYDRIVE MODULE

Answered By: Ron M
class Google_Drive:

    def __init__(self, folder_id):
        self.gauth = GoogleAuth()
        self.gauth.LocalWebserverAuth()
        self.drive = GoogleDrive(self.gauth)
        self.folder_id = folder_id

    def create_folder(self, folderName):
        file_metadata = {
            'title': folderName,
            'parents': [{'id': self.folder_id}], #parent folder
            'mimeType': 'application/vnd.google-apps.folder'
        }

        folder = self.drive.CreateFile(file_metadata)
        folder.Upload()
Answered By: Barga