File size: 3,806 Bytes
c87f53a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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