Skip to content

Google Drive API Python wrapper library. Maintained fork of PyDrive.

License

Notifications You must be signed in to change notification settings

iterative/PyDrive2

Repository files navigation

GHA TestsConda-forgePyPI

PyDrive2

PyDrive2 is a wrapper library of google-api-python-client that simplifies many common Google Drive API V2 tasks. It is an actively maintained fork of https://pypi.python.org/pypi/PyDrive. By the authors and maintainers of the Git for Data - DVC project.

Project Info

Features of PyDrive2

  • Simplifies OAuth2.0 into just few lines with flexible settings.
  • Wraps Google Drive API V2 into classes of each resource to make your program more object-oriented.
  • Helps common operations else than API calls, such as content fetching and pagination control.
  • Provides fsspec filesystem implementation.

How to install

You can install PyDrive2 with regular pip command.

$ pip install PyDrive2 

To install the current development version from GitHub, use:

$ pip install git+https://github.com/iterative/PyDrive2.git#egg=PyDrive2 

OAuth made easy

Download client_secrets.json from Google API Console and OAuth2.0 is done in two lines. You can customize behavior of OAuth2 in one settings file settings.yaml.

frompydrive2.authimportGoogleAuthfrompydrive2.driveimportGoogleDrivegauth=GoogleAuth() gauth.LocalWebserverAuth() drive=GoogleDrive(gauth)

File management made easy

Upload/update the file with one method. PyDrive2 will do it in the most efficient way.

file1=drive.CreateFile({'title': 'Hello.txt'}) file1.SetContentString('Hello') file1.Upload() # Files.insert()file1['title'] ='HelloWorld.txt'# Change title of the filefile1.Upload() # Files.patch()content=file1.GetContentString() # 'Hello'file1.SetContentString(content+' World!') # 'Hello World!'file1.Upload() # Files.update()file2=drive.CreateFile() file2.SetContentFile('hello.png') file2.Upload() print('Created file %s with mimeType %s'% (file2['title'], file2['mimeType'])) # Created file hello.png with mimeType image/pngfile3=drive.CreateFile({'id': file2['id']}) print('Downloading file %s from Google Drive'%file3['title']) # 'hello.png'file3.GetContentFile('world.png') # Save Drive file as a local file# or download Google Docs files in an export format provided.# downloading a docs document as an html file:docsfile.GetContentFile('test.html', mimetype='text/html')

File listing pagination made easy

PyDrive2 handles file listing pagination for you.

# Auto-iterate through all files that matches this queryfile_list=drive.ListFile({'q': "'root' in parents"}).GetList() forfile1infile_list: print('title:{}, id:{}'.format(file1['title'], file1['id'])) # Paginate file lists by specifying number of max resultsforfile_listindrive.ListFile({'maxResults': 10}): print('Received{} files from Files.list()'.format(len(file_list))) # <= 10forfile1infile_list: print('title:{}, id:{}'.format(file1['title'], file1['id']))

Fsspec filesystem

PyDrive2 provides easy way to work with your files through fsspec compatible GDriveFileSystem.

Install PyDrive2 with the required dependencies

$ pip install PyDrive2[fsspec] 
frompydrive2.fsimportGDriveFileSystem# replace `root` with ID of a drive or directory and give service account access to itfs=GDriveFileSystem("root", client_id=my_id, client_secret=my_secret) forroot, dnames, fnamesinfs.walk("root"): ...

Concurrent access made easy

All API functions made to be thread-safe.

Contributors

Thanks to all our contributors!

https://contrib.rocks/image?repo=iterative/PyDrive2