|
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 |
|
|
|
|