Spaces:
Runtime error
Runtime error
import os | |
import json | |
from pydrive2.auth import GoogleAuth | |
from pydrive2.drive import GoogleDrive | |
from oauth2client.service_account import ServiceAccountCredentials | |
def login_with_service_account(): | |
scope = ["https://www.googleapis.com/auth/drive"] | |
gauth = GoogleAuth() | |
gauth.auth_method = 'service' | |
cred_dict = json.load(open('evreal_cred.json', 'r')) | |
cred_dict['private_key_id'] = os.environ['PRIVATE_KEY_ID'] | |
cred_dict['private_key'] = os.environ['PRIVATE_KEY'].replace('\\n', '\n') | |
gauth.credentials = ServiceAccountCredentials.from_json_keyfile_dict(cred_dict, scope) | |
return gauth | |
gauth = login_with_service_account() | |
drive = GoogleDrive(gauth) | |
def get_file_id_inside_folder(drive, folder_id, file_name): | |
file_list = drive.ListFile({'q': "'{}' in parents and trashed=false".format(folder_id)}).GetList() | |
for file in file_list: | |
if file['title'] == file_name: | |
return file['id'] | |
return None | |
def get_file_id_for_file_path(drive, file_path): | |
# file_parts = os.path.split(file_path) | |
path = os.path.normpath(file_path) | |
file_parts = path.split(os.sep) | |
file_id = '1-5zmRu3Od9s2dYu1S01u4aC2ihAmo1K2' | |
for file_part in file_parts: | |
if file_part == '': | |
continue | |
file_id = get_file_id_inside_folder(drive, file_id, file_part) | |
if file_id is None: | |
return None | |
return file_id | |
def download_file(file_path, local_path): | |
file_id = get_file_id_for_file_path(drive, file_path) | |
if file_id is None: | |
return False | |
file = drive.CreateFile({'id': file_id}) | |
os.makedirs(os.path.dirname(local_path), exist_ok=True) | |
file.GetContentFile(local_path) | |
return True | |
# test if main | |
if __name__ == "__main__": | |
drive_file_path = "0000_000000/ECD_calibration/videos/recon.mp4" | |
# drive_file_path = "test.txt" | |
local_file_path = os.path.join("temp_data", drive_file_path) | |
# gauth = login_with_service_account() | |
# drive = GoogleDrive(gauth) | |
os.makedirs(os.path.dirname(local_file_path), exist_ok=True) | |
download_file(drive_file_path, local_file_path) | |