from googleapiclient.http import MediaFileUpload, MediaIoBaseUpload import json import os from io import BytesIO import time import io file_metadata = { "name": "Fake", "mimeType": "application/vnd.google-apps.folder", } file_result = { "name": "Result", "mimeType": "application/vnd.google-apps.folder", } file_report = { "name": "Report", "mimeType": "application/vnd.google-apps.folder", } def checkFake(service, path="root", Folder_Name="Fake"): resource = service.files() result = resource.list( q=f"mimeType = 'application/vnd.google-apps.folder' and '{path}' in parents", fields="nextPageToken, files(id, name)", ).execute() list_folders = result.get("files") fake_folder_id = None result_folder_id = None report_folder_id = None for folder in list_folders: if folder["name"] == Folder_Name: fake_folder_id = folder["id"] break if not fake_folder_id: fake_folder = service.files().create(body=file_metadata, fields="id").execute() fake_folder_id = fake_folder["id"] result_folder = ( service.files() .create( body={ "name": "Result", "mimeType": "application/vnd.google-apps.folder", "parents": [fake_folder_id], "type": "anyone", "role": "reader", }, fields="id", ) .execute() ) result_folder_id = result_folder["id"] report_folder = ( service.files() .create( body={ "name": "Report", "mimeType": "application/vnd.google-apps.folder", "parents": [fake_folder_id], }, fields="id", ) .execute() ) report_folder_id = report_folder["id"] return fake_folder_id, result_folder_id, report_folder_id def checkRespectiveFolder(service, path="root", Folder_Name="Fake"): resource = service.files() result = resource.list( q=f"mimeType = 'application/vnd.google-apps.folder' and '{path}' in parents", fields="nextPageToken, files(id, name)", ).execute() list_folders = result.get("files") fake_folder_id = None for folder in list_folders: if folder["name"] == Folder_Name: fake_folder_id = folder["id"] break return fake_folder_id def CheckFolders(service): fake_folder_id = checkFake(service) return "Folders created or already existed." def AddReport(service, fileName, file): fake_folder_id = checkRespectiveFolder(service) report_folder_id = checkRespectiveFolder( service, path=fake_folder_id, Folder_Name="Report" ) file_metadata = {"name": fileName, "parents": [report_folder_id]} media = MediaFileUpload(file, mimetype="application/pdf") newFile = ( service.files() .create(body=file_metadata, media_body=media, fields="id") .execute() ) return newFile.get("id") def DeleteReport(service, fileName): fake_folder_id = checkRespectiveFolder(service) report_folder_id = checkRespectiveFolder( service, path=fake_folder_id, Folder_Name="Report" ) response = ( service.files() .list( q="mimeType='application/pdf' and '" + report_folder_id + "' in parents", spaces="drive", fields="files(id, name)", pageToken=None, ) .execute() ) for i in response["files"]: if i["name"] == fileName: file_id = i["id"] service.files().delete(fileId=file_id).execute() break