Skip to main content

A lightweight module to download and upload data to Google Drive contents

Project description

GitHub license PyPI PyPI - Python Version Monthly downloads

A lightweight and easy to use Python library to upload and download contents from Google Drive.

Author:

Abhinav Anand

1 What is it

[back to top]

Google Drive is the most used cloud storage platform. A need for some minimal yet effective tool to transfer contents to and from Drive is important!

There is a number of such libraries already present with Pydrive being the most amazing. Pydrive has a lot of functionalities but there are certain major things that it lacks. The goal of this library is to address the bulk uploading/downloading functionality in a way that is easy-to-use and yet covers the users’ requirements.

2 Features

[back to top]

  • Upload folders anywhere in the Drive maintaining the same directory structure as present locally.

  • Download folders from anywhere in the Drive to anywhere in the PC maintaining the same directory structure as present in the Drive.

  • Download or Upload whole directory in less than 5 lines of code.

  • Can sustain minor network interruptions.

  • Bulk upload/download made easy.

  • Minimal dependencies.

  • Easy to use.

  • Fast!

  • Returns JSON objects

  • Support
    • OS Support: Linux, Windows, Mac

    • Language Support: Python 2.x, 3.x

3 Installation

[back to top]

3.2 Option 2: Installing from source (Only if you must)

$ git clone https://github.com/ab-anand/ZDrive.git
$ cd ZDrive/
$ pip install -r requirements.txt
$ python setup.py install

Note: If you get permission denied then $ sudo python setup.py install should fix that

4 Usage

[back to top]

4.1 Initial Setup

  • Follow the article to get your drive-api credentials.

  • Once you have the clients-secret.json, rename it to credentials.json and place it in the same folder where you’ll be running the script.

4.2 Downloader

  • Downloader() allows you to download folder/files from the Drive.

  • The output location where the files will get downloaded can be specified too.

  • Downloader() maintains the same directory tree structure while downloading from the Drive thus making it convenient to read.

  • Google Drive is a semantic (also called tag-based) file system meaning it stores files not based on their location, but based on an ID.

  • Semantic file systems allow you to have multiple files with the same name and to have one file appearing in multiple places.

  • Thus for performing any action related to a file/folder in Drive, we would need the IDs of the file/folder.

  • ZDrive allows you to retrieve a list of files/folders present inside the Drive along with their IDs.

  • Downloader() also uses multiprocessing for speeding up the download process.

  • Using the Downloader()

>>> from zdrive import Downloader
>>> output_directory = "/home/abhinav/Documents"
>>> d = Downloader()
>>> folder_id = 'XXXX-YYYY-ZZZZ'
>>> d.downloadFolder(folder_id, destinationFolder=output_directory)
  • If no destinationFolder is specified, then Downloader() would create a default folder named drive_content and it would download the contents there.

  • Also, if the specified destinationFolder doesn’t already exist, Downloader() would create the folder first and the perform the downloading.

4.3 Uploader

  • Uploader() allows you to upload folder/files from the local PC to drive.

  • Uploading can be done from any specified location inside the local PC.

  • Data can be uploaded at the ROOT level of the Drive or inside any specific folder in the Drive.

  • In case of a minor internet interruption(~10-15 secs) the upload would be paused and once the internet connection is stable. The uploading will get resumed.

  • Uploader() also maintains the exact same directory tree structure while uploading from the local PC to Drive.

  • The level of child directories to be uploaded is decided by max_depth parameter as shown in the example below.

  • By default, max_depth = 5

  • Using Uploader()

>>> from zdrive import Uploader
>>> input_directory = "/home/abhinav/Downloads"
>>> u = Uploader()
>>> parent_folder_id = u.createFolder(name="Data")
>>> result = u.uploadFolder(input_directory, max_depth=3, parentId=parent_folder_id)
>>> print(result)

'{
    "files":
        {
            "/Users/abhinavanand/Downloads/test/def.pdf": "1pJNIu-0oyzaUgjLvnf6-3mk81iwLBXyS"
        },
    "folders":
        {
        "/Users/abhinavanand/Downloads/test/test-level-1":
            {
                "files":
                {
                    "/Users/abhinavanand/Downloads/test/test-level-1/abc.pdf": "1YwZs__92yzWdM2e7Nc2atF5lzLnyYV9i"
                },
                "folders": {},
                "id": "1zzh_hGImg94SnzrMC8LdH1vgbO3LMksD"
            }
        }
}'
  • If no parentId is specified, then Uploader() would upload the contents from local PC to the ROOT level in Drive.

5 Contributing

[back to top]

Please refer Contributing page for details

6 Bugs

[back to top]

Please report the bugs at the issue tracker

7 License

[back to top]

Built with ♥ by Abhinav Anand under the MIT License ©

You can find a copy of the License at http://abhinav.mit-license.org/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ZDrive-2.1.3.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ZDrive-2.1.3-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file ZDrive-2.1.3.tar.gz.

File metadata

  • Download URL: ZDrive-2.1.3.tar.gz
  • Upload date:
  • Size: 8.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.10.6

File hashes

Hashes for ZDrive-2.1.3.tar.gz
Algorithm Hash digest
SHA256 41bfc1f400eb8f015156f7b389cec521c9599315329996362db58e2761489e25
MD5 085e7bd263587d52c5ea65e895832116
BLAKE2b-256 d569f108c47992b4e5f996b1ad416d61a364e76d741de56c12240a3a5e8972df

See more details on using hashes here.

File details

Details for the file ZDrive-2.1.3-py3-none-any.whl.

File metadata

  • Download URL: ZDrive-2.1.3-py3-none-any.whl
  • Upload date:
  • Size: 9.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.10.6

File hashes

Hashes for ZDrive-2.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7cdbac6333b35137850571d410a4cd58a64c45a803c979fdc4fb87d6b69be0b0
MD5 0bb1fbc44851ce2b6c9ffba65f69fef6
BLAKE2b-256 6d8d75b96cf5e4e3b6390a51f5a0d06432c1266fc181aae779b92af9dfab22c1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page