gdrive-python
gdrive-python is a wrapping module in python of gdrive made by @prasmussen.
Installation
First of all to install the package you can execute:
pip install gdrive-python
Than you have to login inside your Google account with the command and than follow the instructions:
python -m gdrive about [options]
options:
--version Version of the gdrive script to download
--os-name Operating system name, by default it gets current os. Options: ['windows', 'linux', 'darwin']
--arch Architecture. Options: ['amd64', '386']
--url Url of the gdrive script
Example output:
vpippi$ python -m gdrive about
CMD: gdrive_folder/gdrive --config gdrive_folder about
Authentication needed
Go to the following url in your browser:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=############.apps.googleusercontent.com&redirect_uri=#########&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=state
Enter verification code:
# paste here the code and press enter
FileNotFoundError
Somethimes it can happen that the command python -m gdrive about returns the FileNotFoundError
vpippi$ python -m gdrive about
CMD: gdrive_folder/gdrive --config gdrive_folder about
Traceback (most recent call last):
...
FileNotFoundError: [Errno 2] No such file or directory: 'gdrive_folder/gdrive'
In my case it happened because the current system architecture is amd64 but this version don't works in that system. You can avoid that problem by installing the 386 architecture.
python -m gdrive about --arch 386
Usage
import the gdrive classes in that way:
form gdrive import GDrive, GDrivePath, GDriveThread
GDrive
drive = GDrive()
If you whant you can also enable the printing commands setting:
drive.print_output = True
__init__(self, gdrive_path=None)
gdrive_pathdefines the gdrive script location path. If not specified it gets the default locationgdrive_folder/gdrive
@staticmethod download_script(version='2.1.1', os_name=None, arch=None, url=None)
versionis the version of the gdrive script to downloados_nameis the operating system name, by default it gets current os. Options:['windows', 'linux', 'darwin']archis the architecture. Options:['amd64', '386']urlis the url of the gdrive script. If an url is provided the other fields are ignored.
The script download the specified version in the current directory (eg. gdrive_2.1.1_windows_amd64.tar.gz) and than extract the archive inside the directory gdrive_folder.
Returns None.
upload(self, filename, parent_id=None, parent=None, recursive=True, name=None, description=None, mime=None, share=None, timeout=None, chunksize=None, delete=False, thread=False)
filenamepath of the file/folder to uploadparentparent directory by name (eg./path/foldername)parent_idparent id, used to upload file to a specific directory, if specifiedparentfolder is ignored.recursiveupload directory recursivelynamefilenamedescriptionfile descriptionmimeforce mime typeshareshare filetimeoutset timeout in seconds, use 0 for no timeout. Timeout is reached when no data is transferred in set amount of seconds, default: 300chunksizeset chunk size in bytes, default: 8388608deletedelete local file when upload is successfulthreaddefines if you want to upload the file in a separate thread (see the thread section)
While uploading a large file could be useful set print_output = True
Example:
>>> drive.print_output = True
>>> drive.upload('File99.mp4')
CMD: gdrive_folder\gdrive.exe --config gdrive_folder upload --recursive checkpoint_042.pth
Uploading checkpoint_042.pth
1.1 GB / 2.0 GB, Rate: 13.7 MB/s
thread
When thead=True the methods return a GDriveThread(threading.Thread) object.
Usage:
>>> thread = drive.upload('File99.mp4', thread=True)
>>> thread.start()
>>> # do whatever you want
>>> thread.join()
about(self)
Returns a dictionary that shows the account info.
Example:
>>> drive.about()
{
'User': 'name username, [email protected]',
'Used': '51 GB',
'Free': '9 GB',
'Total': '60 GB',
'Max upload size': '60 GB',
}
logout(self)
The logout function delete the file gdrive_folder/token_v2.json which contains the google info. After this command the login is required again (see installation procedure).
list(self, max=30, querys=[], sort_order=None, name_width=0, absolute=False, bytes=None, parent=None)
maxmax files to listquerysquery list to execute. See https://developers.google.com/drive/search-parameterssort_ordersort order. See https://godoc.org/google.golang.org/api/drive/v3#FilesListCall.OrderByname_widthwidth of name column, minimum: 9, use 0 for full widthabsoluteshow absolute path to file (will only show path from first parent)bytesreturn size in bytesparentlist files inside the given parent folder. By default it uses the root directory.
Returns a list of dictionaries. Example:
>>> drive.list()
[
{'Id': '######', 'Name': 'File01.mp4', 'Type': 'bin', 'Size': '196.1 MB', 'Created': '2022-01-13 19:42:00'},
{'Id': '######', 'Name': 'File02.mp4', 'Type': 'bin', 'Size': '210.7 MB', 'Created': '2022-01-13 19:42:00'},
{'Id': '######', 'Name': 'File03.mp4', 'Type': 'bin', 'Size': '197.5 MB', 'Created': '2022-01-13 19:42:00'},
{'Id': '######', 'Name': 'File04.mp4', 'Type': 'bin', 'Size': '191.5 MB', 'Created': '2022-01-13 19:42:00'},
{'Id': '######', 'Name': 'File05.mp4', 'Type': 'bin', 'Size': '176.1 MB', 'Created': '2022-01-13 19:42:00'},
{'Id': '######', 'Name': 'File06.mp4', 'Type': 'bin', 'Size': '178.0 MB', 'Created': '2022-01-13 19:42:00'},
...
]
list_dirs(self, *args, **kwargs)
Same parameters as the list method.
Returns only the a list of dirs.
list_files(self, *args, **kwargs)
Same parameters as the list method.
Returns only the a list of files.
get_id(self, name)
namename of the file/folder that you want the id
Since Google Drive allows different files/directories with the same name, the function returns:
stringif only one element is foundlistof the ids if more than one file is returnedNoneif only no one element is found
Example:
>>> drive.get_id('File01.mp4')
'BWoSkGeDNbYqyumaRXtQvzgHndUMET'
>>> drive.get_id('File00.mp4')
['BWoSkGeDNbYqyumaRXtQvzgHndUMET', 'vzgHndUMETscKflCxpVOwhjrAiPLFI']
>>> drive.get_id('File99.mp4')
None
info(self, id)
idid of the file/folder
Returns a dictionary of all info values of the given element.