def find_files_from_name(name, drive_id=None, parent_folder_id=None, service_account_string=None): query = "name = '{}' and trashed = false".format(name) if parent_folder_id: query = "{} and parents = '{}'".format(query, parent_folder_id) drive_id_kwargs = {} if drive_id: drive_id_kwargs = { "corpora": 'drive', "driveId": drive_id, "includeItemsFromAllDrives": True, "supportsAllDrives": True } response = create_google_service('drive', service_account_string).files() \ .list( fields='files(id,modifiedTime,name,parents)', q=query, spaces='drive', **drive_id_kwargs) \ .execute() return response['files']
def delete_file_or_folder(file_or_folder_id, service_account_string=None): body = {'trashed': True} return create_google_service('drive', service_account_string).files() \ .update( body=body, fileId=file_or_folder_id, supportsAllDrives=True) \ .execute()
def get_file_media(file_id, service_account_string=None): request = create_google_service('drive', service_account_string).files() \ .get_media(fileId=file_id) file_media = BytesIO() media_request = MediaIoBaseDownload(file_media, request) is_done = False while is_done is False: status, is_done = media_request.next_chunk() file_media.seek(0) return file_media
def touch(file_id, date=None, service_account_string=None): if date is None: date = datetime.utcnow() return create_google_service('drive', service_account_string).files() \ .update( body={ "modifiedTime": strftime(date) }, fileId=file_id, supportsAllDrives=True) \ .execute()
def modify_file(file_media, drive_id=None, parent_folder_id=None, service_account_string=None): filename = secure_filename(file_media.filename) media_body = MediaIoBaseUpload(file_media, mimetype=file_media.mimetype) return create_google_service('drive', service_account_string).files() \ .update( body={ "mimeType": file_media.mimetype, "name": filename, }, fileId=file.get('id'), media_body=media_body) \ .execute()
def create_file(file_media, drive_id=None, parent_folder_id=None, service_account_string=None): if not parent_folder_id: parent_folder_id = drive_id filename = secure_filename(file_media.filename) media_body = MediaIoBaseUpload(file_media, mimetype=file_media.mimetype) return create_google_service('drive', service_account_string).files() \ .create( body={ "mimeType": file_media.mimetype, "name": filename, 'parents': [parent_folder_id] }, media_body=media_body, supportsAllDrives=True) \ .execute()
def _find_folder_from_name(name, drive_id=None, force_create=False, parent_folder_id=None, service_account_string=None): body = {'mimeType': 'application/vnd.google-apps.folder', 'name': name} if not parent_folder_id: parent_folder_id = drive_id body['parents'] = [parent_folder_id] folders = find_folders_from_name( name, drive_id=drive_id, parent_folder_id=parent_folder_id, service_account_string=service_account_string) folders_count = len(folders) if folders_count == 1: return folders[0] if folders_count > 1: errors = ApiErrors() errors.add_error('name', 'Found several folders for this name') raise errors if force_create: return create_google_service('drive', service_account_string).files() \ .create( body=body, fields='id', supportsAllDrives=True) \ .execute() errors = ApiErrors() errors.add_error('folder', '{} folder was not found.'.format(name)) raise errors