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_path
defines 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)
version
is the version of the gdrive script to downloados_name
is the operating system name, by default it gets current os. Options:['windows', 'linux', 'darwin']
arch
is the architecture. Options:['amd64', '386']
url
is 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)
filename
path of the file/folder to uploadparent
parent directory by name (eg./path/foldername
)parent_id
parent id, used to upload file to a specific directory, if specifiedparent
folder is ignored.recursive
upload directory recursivelyname
filenamedescription
file descriptionmime
force mime typeshare
share filetimeout
set timeout in seconds, use 0 for no timeout. Timeout is reached when no data is transferred in set amount of seconds, default: 300chunksize
set chunk size in bytes, default: 8388608delete
delete local file when upload is successfulthread
defines 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)
max
max files to listquerys
query list to execute. See https://developers.google.com/drive/search-parameterssort_order
sort order. See https://godoc.org/google.golang.org/api/drive/v3#FilesListCall.OrderByname_width
width of name column, minimum: 9, use 0 for full widthabsolute
show absolute path to file (will only show path from first parent)bytes
return size in bytesparent
list 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)
name
name of the file/folder that you want the id
Since Google Drive allows different files/directories with the same name, the function returns:
string
if only one element is foundlist
of the ids if more than one file is returnedNone
if 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)
id
id of the file/folder
Returns a dictionary of all info values of the given element.