csc-cia-stne 0.0.67__tar.gz → 0.0.68__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/PKG-INFO +1 -1
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/pyproject.toml +1 -1
- csc_cia_stne-0.0.68/src/csc_cia_stne/google_drive.py +319 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne.egg-info/PKG-INFO +1 -1
- csc_cia_stne-0.0.67/src/csc_cia_stne/google_drive.py +0 -289
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/LICENCE +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/README.md +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/README_PYPI.md +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/setup.cfg +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/__init__.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/bc_correios.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/bc_sta.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/email.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/gcp_bigquery.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/karavela.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/logger_json.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/logger_rich.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/provio.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/servicenow.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/slack.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/stne_admin.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/__init__.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/__init__.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_b64.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_converters.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_get_secret.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_rdp.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_recriar_pastas.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_settings.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_titulo.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/validations/GcpBigQueryValidator.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/validations/ServiceNowValidator.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/validations/__init__.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/validations/web_validator.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/web.py +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne.egg-info/SOURCES.txt +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne.egg-info/dependency_links.txt +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne.egg-info/requires.txt +0 -0
- {csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne.egg-info/top_level.txt +0 -0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "csc_cia_stne"
|
7
|
-
version = "0.0.
|
7
|
+
version = "0.0.68"
|
8
8
|
license = { text = "MIT" }
|
9
9
|
description = "Biblioteca do time CSC-CIA utilizada no desenvolvimento de RPAs"
|
10
10
|
keywords = ["karavela", "csc", "cia", "stone", "rpa", "botcity", "stne"]
|
@@ -0,0 +1,319 @@
|
|
1
|
+
import os
|
2
|
+
from googleapiclient.discovery import build
|
3
|
+
from googleapiclient.http import MediaFileUpload
|
4
|
+
from googleapiclient.errors import HttpError
|
5
|
+
from io import BytesIO
|
6
|
+
from google.oauth2 import service_account
|
7
|
+
from .utilitarios.validations.GoogleDriveValidator import (
|
8
|
+
InitParamsValidator,
|
9
|
+
CreateFolderValidator,
|
10
|
+
ListFolderValidator,
|
11
|
+
UploadValidator,
|
12
|
+
)
|
13
|
+
from pydantic import ValidationError
|
14
|
+
|
15
|
+
|
16
|
+
class GoogleDrive:
|
17
|
+
"""
|
18
|
+
Classe responsável por gerenciar operações no Google Drive, como upload de arquivos, criação de pastas
|
19
|
+
e listagem de conteúdo. Utiliza a API do Google Drive para realizar essas operações.
|
20
|
+
|
21
|
+
Args:
|
22
|
+
key (str): Chave de autenticação para acessar a API do Google Drive.
|
23
|
+
"""
|
24
|
+
|
25
|
+
_instance = None # Atributo de classe para armazenar a única instância.
|
26
|
+
|
27
|
+
def __new__(cls, *args, **kwargs):
|
28
|
+
# Verifica se já existe uma instância da classe.
|
29
|
+
if cls._instance is None:
|
30
|
+
# Cria e armazena a instância na primeira chamada.
|
31
|
+
cls._instance = super().__new__(cls)
|
32
|
+
return cls._instance
|
33
|
+
|
34
|
+
def __init__(
|
35
|
+
self,
|
36
|
+
token: dict,
|
37
|
+
with_subject: str,
|
38
|
+
scopes: list = ["https://www.googleapis.com/auth/drive"],
|
39
|
+
version: str = "v3",
|
40
|
+
):
|
41
|
+
"""
|
42
|
+
Inicializa uma instância da classe GoogleDrive.
|
43
|
+
Parâmetros:
|
44
|
+
- key (str): A chave para acessar o segredo necessário para autenticação.
|
45
|
+
- with_subject (str): O assunto para o qual a autenticação será realizada.
|
46
|
+
- scopes (list): Uma lista de escopos de permissão para acesso ao Google Drive. O valor padrão é ["https://www.googleapis.com/auth/drive"].
|
47
|
+
- version (str): A versão da API do Google Drive a ser utilizada. O valor padrão é "v3".
|
48
|
+
Raises:
|
49
|
+
- ValueError: Se ocorrer um erro na validação dos dados de input da inicialização da instância.
|
50
|
+
Exemplo de uso:
|
51
|
+
```
|
52
|
+
google_drive = GoogleDrive(key="chave_secreta", with_subject="assunto", scopes=["https://www.googleapis.com/auth/drive"], version="v3")
|
53
|
+
```
|
54
|
+
"""
|
55
|
+
|
56
|
+
try:
|
57
|
+
InitParamsValidator(
|
58
|
+
token=token, with_subject=with_subject, scopes=scopes, version=version
|
59
|
+
)
|
60
|
+
except ValidationError as e:
|
61
|
+
raise ValueError(
|
62
|
+
"Erro na validação dos dados de input da inicialização da instância:",
|
63
|
+
e.errors(),
|
64
|
+
)
|
65
|
+
self.__token = token
|
66
|
+
self.version = version
|
67
|
+
self.scopes = scopes
|
68
|
+
self.with_subject = with_subject
|
69
|
+
self.page_size = 1000
|
70
|
+
self.service = self.__create_service()
|
71
|
+
|
72
|
+
def __create_service(self):
|
73
|
+
"""
|
74
|
+
Cria um serviço do Google Drive.
|
75
|
+
Returns:
|
76
|
+
cred: Objeto de credenciais do Google Drive.
|
77
|
+
False: Caso ocorra algum erro ao criar o serviço.
|
78
|
+
Raises:
|
79
|
+
Exception: Caso ocorra algum erro ao criar o serviço do Google Drive.
|
80
|
+
Exemplo de uso:
|
81
|
+
service = create_service()
|
82
|
+
if service:
|
83
|
+
# Fazer algo com o serviço do Google Drive
|
84
|
+
else:
|
85
|
+
# Tratar o erro de criação do serviço
|
86
|
+
"""
|
87
|
+
|
88
|
+
try:
|
89
|
+
auth = self.__autentica(self.with_subject)
|
90
|
+
service = build(f"drive", f"{self.version}", credentials=auth)
|
91
|
+
return service
|
92
|
+
except Exception as e:
|
93
|
+
return False
|
94
|
+
|
95
|
+
def __autentica(self, with_subject: str):
|
96
|
+
"""
|
97
|
+
Autentica o usuário com as credenciais fornecidas e retorna as credenciais delegadas para o assunto especificado.
|
98
|
+
Args:
|
99
|
+
with_subject (str): O assunto para o qual as credenciais serão delegadas.
|
100
|
+
Returns:
|
101
|
+
google.auth.credentials.Credentials: As credenciais delegadas para o assunto especificado.
|
102
|
+
Raises:
|
103
|
+
Exception: Se ocorrer um erro durante a autenticação.
|
104
|
+
Example:
|
105
|
+
# Autenticar com o assunto "user@example.com"
|
106
|
+
credentials = self.__autentica("user@example.com")
|
107
|
+
"""
|
108
|
+
|
109
|
+
try:
|
110
|
+
credentials = service_account.Credentials.from_service_account_info(
|
111
|
+
self.__token, scopes=self.scopes
|
112
|
+
)
|
113
|
+
delegated_credencial = credentials.with_subject(with_subject)
|
114
|
+
return delegated_credencial
|
115
|
+
|
116
|
+
except Exception as e:
|
117
|
+
return False
|
118
|
+
|
119
|
+
def upload(self, folder_id: str, name: str, file_path: str, mimetype: str):
|
120
|
+
"""
|
121
|
+
Faz o upload de um arquivo para o Google Drive em uma pasta especificada.
|
122
|
+
|
123
|
+
Args:
|
124
|
+
folder_id (str): ID da pasta no Google Drive onde o arquivo será armazenado.
|
125
|
+
name (str): Nome do arquivo que será carregado.
|
126
|
+
file_path (str): Caminho completo do arquivo no sistema local.
|
127
|
+
mimetype (str): Tipo MIME do arquivo a ser carregado.
|
128
|
+
exemplos: text/plain
|
129
|
+
text/html
|
130
|
+
image/jpeg
|
131
|
+
image/png
|
132
|
+
audio/mpeg
|
133
|
+
audio/ogg
|
134
|
+
audio/*
|
135
|
+
video/mp4
|
136
|
+
application/octet-stream
|
137
|
+
|
138
|
+
Returns:
|
139
|
+
dict: Informações sobre o arquivo carregado, incluindo o ID do arquivo.
|
140
|
+
None: Caso o caminho do arquivo não seja encontrado.
|
141
|
+
"""
|
142
|
+
try:
|
143
|
+
UploadValidator(
|
144
|
+
folder_id=folder_id, name=name, file_path=file_path, mimetype=mimetype
|
145
|
+
)
|
146
|
+
except ValidationError as e:
|
147
|
+
raise ValueError(
|
148
|
+
"Erro na validação dos dados para realizar o upload do arquivo",
|
149
|
+
e.errors(),
|
150
|
+
)
|
151
|
+
|
152
|
+
file_metadata = {"name": name, "parents": [folder_id]}
|
153
|
+
if not os.path.exists(file_path):
|
154
|
+
return {
|
155
|
+
"success": False,
|
156
|
+
"result": None,
|
157
|
+
"error": "Diretório ou arquivo não encontrado",
|
158
|
+
}
|
159
|
+
|
160
|
+
try:
|
161
|
+
media = MediaFileUpload(file_path, mimetype=mimetype, resumable=True)
|
162
|
+
file = (
|
163
|
+
self.service.files()
|
164
|
+
.create(
|
165
|
+
body=file_metadata,
|
166
|
+
media_body=media,
|
167
|
+
fields="id",
|
168
|
+
supportsAllDrives=True,
|
169
|
+
)
|
170
|
+
.execute()
|
171
|
+
)
|
172
|
+
|
173
|
+
return {"success": True, "result": file}
|
174
|
+
except Exception as e:
|
175
|
+
|
176
|
+
return {"success": False, "result": None, "error": str(e)}
|
177
|
+
|
178
|
+
def create_folder(self, name: str, parent_folder_id: str):
|
179
|
+
"""
|
180
|
+
Cria uma pasta no Google Drive dentro de uma pasta existente.
|
181
|
+
|
182
|
+
Args:
|
183
|
+
name (str): Nome da pasta a ser criada.
|
184
|
+
parent_folder_id (int): ID da pasta pai onde a nova pasta será criada.
|
185
|
+
|
186
|
+
Returns:
|
187
|
+
str: ID da pasta criada.
|
188
|
+
"""
|
189
|
+
try:
|
190
|
+
CreateFolderValidator(name=name, parent_folder_id=parent_folder_id)
|
191
|
+
except ValidationError as e:
|
192
|
+
raise ValueError(
|
193
|
+
"Erro na validação dos dados de input da inicialização da instância:",
|
194
|
+
e.errors(),
|
195
|
+
)
|
196
|
+
|
197
|
+
try:
|
198
|
+
folder_metadata = {
|
199
|
+
"name": name,
|
200
|
+
"parents": [parent_folder_id],
|
201
|
+
"mimeType": "application/vnd.google-apps.folder",
|
202
|
+
}
|
203
|
+
folder = (
|
204
|
+
self.service.files()
|
205
|
+
.create(body=folder_metadata, fields="id", supportsAllDrives=True)
|
206
|
+
.execute()
|
207
|
+
)
|
208
|
+
return {"success": True, "result": folder}
|
209
|
+
except Exception as e:
|
210
|
+
return {"success": False, "result": None, "error": str(e)}
|
211
|
+
|
212
|
+
def list_items_folder(
|
213
|
+
self,
|
214
|
+
query: str = "",
|
215
|
+
spaces: str = "drive",
|
216
|
+
fields: str = "nextPageToken, files(id, name)",
|
217
|
+
):
|
218
|
+
"""
|
219
|
+
Lista os arquivos e pastas no Google Drive com base nos critérios fornecidos.
|
220
|
+
|
221
|
+
Args:
|
222
|
+
query (str, optional): Critério de busca para os arquivos ou pastas no Google Drive.
|
223
|
+
Consulte https://developers.google.com/drive/api/v3/ref-search-terms.
|
224
|
+
Defaults to "".
|
225
|
+
exemplo: query = 'ID_DA_PASTA_NO_GOOGLE_DRIVE' in parents and trashed=false"
|
226
|
+
spaces (str, optional): Especifica os locais de armazenamento a serem consultados. Pode ser 'drive',
|
227
|
+
'appDataFolder', ou 'photos'. Defaults to 'drive'.
|
228
|
+
fields (str, optional): Campos a serem retornados na resposta. Consulte a documentação para os campos disponíveis.
|
229
|
+
Defaults to "nextPageToken, files(id, name)".
|
230
|
+
|
231
|
+
Returns:
|
232
|
+
dict: Dicionário contendo o resultado da busca.
|
233
|
+
"""
|
234
|
+
try:
|
235
|
+
ListFolderValidator(query=query, fields=fields, spaces=spaces)
|
236
|
+
except ValidationError as e:
|
237
|
+
raise ValueError(
|
238
|
+
"Erro na validação dos dados de input da lista:", e.errors()
|
239
|
+
)
|
240
|
+
try:
|
241
|
+
results = (
|
242
|
+
self.service.files()
|
243
|
+
.list(
|
244
|
+
q=query,
|
245
|
+
spaces=spaces,
|
246
|
+
pageSize=self.page_size,
|
247
|
+
fields=fields,
|
248
|
+
supportsAllDrives=True,
|
249
|
+
includeItemsFromAllDrives=True,
|
250
|
+
)
|
251
|
+
.execute()
|
252
|
+
)
|
253
|
+
return {"success": True, "result": results}
|
254
|
+
except HttpError as hr:
|
255
|
+
return {"success": False, "result": None, "error": str(hr)}
|
256
|
+
except Exception as e:
|
257
|
+
return {"success": False, "result": None, "error": str(e)}
|
258
|
+
|
259
|
+
def download_file(self, file: str, mimeType: str):
|
260
|
+
"""
|
261
|
+
Obtém o conteúdo de um arquivo armazenado no Google Drive.
|
262
|
+
|
263
|
+
Esta função acessa o Google Drive usando a API e lê os dados do arquivo especificado, retornando-os como um objeto binário de memória (`BytesIO`).
|
264
|
+
|
265
|
+
Parâmetros:
|
266
|
+
- file (str): Dicionário contendo informações do arquivo no Google Drive, incluindo as chaves:
|
267
|
+
- `"name"`: Nome do arquivo.
|
268
|
+
- `"id"`: ID do arquivo.
|
269
|
+
|
270
|
+
Retorna:
|
271
|
+
- BytesIO: Objeto em memória contendo os dados do arquivo.
|
272
|
+
- None: Caso ocorra um erro ao tentar abrir ou ler o arquivo.
|
273
|
+
|
274
|
+
Logs:
|
275
|
+
- Registra mensagens indicando o início e o término da leitura do arquivo.
|
276
|
+
- Em caso de falha, registra o erro ocorrido.
|
277
|
+
|
278
|
+
Exceções:
|
279
|
+
- Qualquer erro durante o processo será capturado e registrado no log. A função retornará `None` nesses casos.
|
280
|
+
|
281
|
+
Dependências:
|
282
|
+
- A função assume a existência de um atributo `self.service` configurado para interagir com a API do Google Drive.
|
283
|
+
"""
|
284
|
+
try:
|
285
|
+
request = self.service.files().export_media(
|
286
|
+
fileId=file.get("id"), mimeType=mimeType
|
287
|
+
)
|
288
|
+
with open(file["name"], "wb") as f:
|
289
|
+
f.write(request.execute())
|
290
|
+
return {
|
291
|
+
"success": True,
|
292
|
+
"result": f"Arquivo baixado com sucesso. Diretório: {file}",
|
293
|
+
}
|
294
|
+
|
295
|
+
except Exception as e:
|
296
|
+
return {"success": False, "result": None}
|
297
|
+
|
298
|
+
def get_base_data(self, id_sheet: str, page: str) -> list:
|
299
|
+
"""
|
300
|
+
Retorna os dados da planilha especificada.
|
301
|
+
Parâmetros:
|
302
|
+
- drive_client: Cliente do Google Drive.
|
303
|
+
- id_sheet: ID da planilha.
|
304
|
+
- page: Nome da página da planilha.
|
305
|
+
Retorna:
|
306
|
+
- Uma lista contendo os valores da planilha.
|
307
|
+
Exemplo de uso:
|
308
|
+
>>> drive_client = ...
|
309
|
+
>>> id_sheet = "abc123"
|
310
|
+
>>> page = "Sheet1"
|
311
|
+
>>> data = get_base_data(drive_client, id_sheet, page)
|
312
|
+
"""
|
313
|
+
try:
|
314
|
+
sheet = self.service.spreadsheets()
|
315
|
+
result = sheet.values().get(spreadsheetId=id_sheet, range=page).execute()
|
316
|
+
values = result.get("values", [])
|
317
|
+
return {"success": True, "result": values}
|
318
|
+
except Exception as e:
|
319
|
+
return {"success": False, "result": None, "error": str(e)}
|
@@ -1,289 +0,0 @@
|
|
1
|
-
import os, logging
|
2
|
-
from googleapiclient.discovery import build
|
3
|
-
from googleapiclient.http import MediaFileUpload
|
4
|
-
from googleapiclient.errors import HttpError
|
5
|
-
from io import BytesIO
|
6
|
-
from google.oauth2 import service_account
|
7
|
-
from .utilitarios.validations.GoogleDriveValidator import InitParamsValidator, CreateFolderValidator, ListFolderValidator, UploadValidator
|
8
|
-
from pydantic import ValidationError
|
9
|
-
|
10
|
-
|
11
|
-
class GoogleDrive():
|
12
|
-
|
13
|
-
"""
|
14
|
-
Classe responsável por gerenciar operações no Google Drive, como upload de arquivos, criação de pastas
|
15
|
-
e listagem de conteúdo. Utiliza a API do Google Drive para realizar essas operações.
|
16
|
-
|
17
|
-
Args:
|
18
|
-
key (str): Chave de autenticação para acessar a API do Google Drive.
|
19
|
-
"""
|
20
|
-
_instance = None # Atributo de classe para armazenar a única instância.
|
21
|
-
|
22
|
-
def __new__(cls, *args, **kwargs):
|
23
|
-
# Verifica se já existe uma instância da classe.
|
24
|
-
if cls._instance is None:
|
25
|
-
# Cria e armazena a instância na primeira chamada.
|
26
|
-
cls._instance = super().__new__(cls)
|
27
|
-
return cls._instance
|
28
|
-
|
29
|
-
def __init__(self, token : dict, with_subject : str, scopes : list = ["https://www.googleapis.com/auth/drive"], version : str = "v3"):
|
30
|
-
"""
|
31
|
-
Inicializa uma instância da classe GoogleDrive.
|
32
|
-
Parâmetros:
|
33
|
-
- key (str): A chave para acessar o segredo necessário para autenticação.
|
34
|
-
- with_subject (str): O assunto para o qual a autenticação será realizada.
|
35
|
-
- scopes (list): Uma lista de escopos de permissão para acesso ao Google Drive. O valor padrão é ["https://www.googleapis.com/auth/drive"].
|
36
|
-
- version (str): A versão da API do Google Drive a ser utilizada. O valor padrão é "v3".
|
37
|
-
Raises:
|
38
|
-
- ValueError: Se ocorrer um erro na validação dos dados de input da inicialização da instância.
|
39
|
-
Exemplo de uso:
|
40
|
-
```
|
41
|
-
google_drive = GoogleDrive(key="chave_secreta", with_subject="assunto", scopes=["https://www.googleapis.com/auth/drive"], version="v3")
|
42
|
-
```
|
43
|
-
"""
|
44
|
-
|
45
|
-
try:
|
46
|
-
InitParamsValidator(token=token, with_subject=with_subject, scopes=scopes, version=version)
|
47
|
-
except ValidationError as e:
|
48
|
-
raise ValueError("Erro na validação dos dados de input da inicialização da instância:", e.errors())
|
49
|
-
self.__token = token
|
50
|
-
self.version = version
|
51
|
-
self.scopes = scopes
|
52
|
-
self.with_subject = with_subject
|
53
|
-
self.page_size = 1000
|
54
|
-
self.service = self.__create_service()
|
55
|
-
|
56
|
-
|
57
|
-
def __create_service(self):
|
58
|
-
"""
|
59
|
-
Cria um serviço do Google Drive.
|
60
|
-
Returns:
|
61
|
-
cred: Objeto de credenciais do Google Drive.
|
62
|
-
False: Caso ocorra algum erro ao criar o serviço.
|
63
|
-
Raises:
|
64
|
-
Exception: Caso ocorra algum erro ao criar o serviço do Google Drive.
|
65
|
-
Exemplo de uso:
|
66
|
-
service = create_service()
|
67
|
-
if service:
|
68
|
-
# Fazer algo com o serviço do Google Drive
|
69
|
-
else:
|
70
|
-
# Tratar o erro de criação do serviço
|
71
|
-
"""
|
72
|
-
|
73
|
-
try:
|
74
|
-
auth = self.__autentica(self.with_subject)
|
75
|
-
service = build(f"drive", f"{self.version}", credentials=auth)
|
76
|
-
logging.info(f"Serviço do Google drive criado")
|
77
|
-
return service
|
78
|
-
except Exception as e:
|
79
|
-
logging.info(f"Erro ao criar o serviço do Google drive: Error: {e}")
|
80
|
-
return False
|
81
|
-
|
82
|
-
|
83
|
-
def __autentica(self, with_subject : str):
|
84
|
-
"""
|
85
|
-
Autentica o usuário com as credenciais fornecidas e retorna as credenciais delegadas para o assunto especificado.
|
86
|
-
Args:
|
87
|
-
with_subject (str): O assunto para o qual as credenciais serão delegadas.
|
88
|
-
Returns:
|
89
|
-
google.auth.credentials.Credentials: As credenciais delegadas para o assunto especificado.
|
90
|
-
Raises:
|
91
|
-
Exception: Se ocorrer um erro durante a autenticação.
|
92
|
-
Example:
|
93
|
-
# Autenticar com o assunto "user@example.com"
|
94
|
-
credentials = self.__autentica("user@example.com")
|
95
|
-
"""
|
96
|
-
|
97
|
-
|
98
|
-
try:
|
99
|
-
credentials = service_account.Credentials.from_service_account_info(self.__token, scopes=self.scopes)
|
100
|
-
delegated_credencial = credentials.with_subject(with_subject)
|
101
|
-
return delegated_credencial
|
102
|
-
|
103
|
-
except Exception as e:
|
104
|
-
logging.debug(f"Erro ao tentar autenticar. Verifique o erro: {e}")
|
105
|
-
return False
|
106
|
-
|
107
|
-
|
108
|
-
def upload(self, folder_id: str, name: str, file_path: str, mimetype: str):
|
109
|
-
"""
|
110
|
-
Faz o upload de um arquivo para o Google Drive em uma pasta especificada.
|
111
|
-
|
112
|
-
Args:
|
113
|
-
folder_id (str): ID da pasta no Google Drive onde o arquivo será armazenado.
|
114
|
-
name (str): Nome do arquivo que será carregado.
|
115
|
-
file_path (str): Caminho completo do arquivo no sistema local.
|
116
|
-
mimetype (str): Tipo MIME do arquivo a ser carregado.
|
117
|
-
exemplos: text/plain
|
118
|
-
text/html
|
119
|
-
image/jpeg
|
120
|
-
image/png
|
121
|
-
audio/mpeg
|
122
|
-
audio/ogg
|
123
|
-
audio/*
|
124
|
-
video/mp4
|
125
|
-
application/octet-stream
|
126
|
-
|
127
|
-
Returns:
|
128
|
-
dict: Informações sobre o arquivo carregado, incluindo o ID do arquivo.
|
129
|
-
None: Caso o caminho do arquivo não seja encontrado.
|
130
|
-
"""
|
131
|
-
try:
|
132
|
-
UploadValidator(folder_id=folder_id, name=name, file_path=file_path, mimetype=mimetype)
|
133
|
-
except ValidationError as e:
|
134
|
-
raise ValueError("Erro na validação dos dados para realizar o upload do arquivo", e.errors())
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
file_metadata = {"name": name, "parents": [folder_id]}
|
139
|
-
if not os.path.exists(file_path):
|
140
|
-
logging.debug(f"Pasta {file_path} não encontrada")
|
141
|
-
return {"success" : False, "result" : None, "error" : "Diretório ou arquivo não encontrado"}
|
142
|
-
|
143
|
-
try:
|
144
|
-
logging.debug(f"Realizando o upload do arquivo")
|
145
|
-
media = MediaFileUpload(file_path, mimetype=mimetype, resumable=True)
|
146
|
-
file = (
|
147
|
-
self.service.files()
|
148
|
-
.create(body=file_metadata, media_body=media, fields="id", supportsAllDrives=True)
|
149
|
-
.execute()
|
150
|
-
)
|
151
|
-
|
152
|
-
logging.debug(f"Upload realizado com sucesso")
|
153
|
-
return {"success" : True, "result" : file}
|
154
|
-
except Exception as e:
|
155
|
-
logging.debug(f"Erro ao realizar o upload do arquivo {name} no google drive. Erro: {e}")
|
156
|
-
return {"success" : False, "result" : None, "error" : str(e)}
|
157
|
-
|
158
|
-
|
159
|
-
def create_folder(self, name: str, parent_folder_id: str):
|
160
|
-
"""
|
161
|
-
Cria uma pasta no Google Drive dentro de uma pasta existente.
|
162
|
-
|
163
|
-
Args:
|
164
|
-
name (str): Nome da pasta a ser criada.
|
165
|
-
parent_folder_id (int): ID da pasta pai onde a nova pasta será criada.
|
166
|
-
|
167
|
-
Returns:
|
168
|
-
str: ID da pasta criada.
|
169
|
-
"""
|
170
|
-
try:
|
171
|
-
CreateFolderValidator(name=name, parent_folder_id=parent_folder_id)
|
172
|
-
except ValidationError as e:
|
173
|
-
raise ValueError("Erro na validação dos dados de input da inicialização da instância:", e.errors())
|
174
|
-
|
175
|
-
try:
|
176
|
-
folder_metadata = {
|
177
|
-
"name": name,
|
178
|
-
"parents": [parent_folder_id],
|
179
|
-
"mimeType": "application/vnd.google-apps.folder",
|
180
|
-
}
|
181
|
-
folder = (
|
182
|
-
self.service.files().create(body=folder_metadata, fields="id", supportsAllDrives=True).execute()
|
183
|
-
)
|
184
|
-
return {"success" : True, "result": folder}
|
185
|
-
except Exception as e:
|
186
|
-
logging.debug(f"Não foi possível criar a pasta {name}")
|
187
|
-
return {"success" : False, "result": None, "error" : str(e)}
|
188
|
-
|
189
|
-
|
190
|
-
def list_items_folder(self, query: str = "", spaces: str = "drive", fields: str = "nextPageToken, files(id, name)"):
|
191
|
-
"""
|
192
|
-
Lista os arquivos e pastas no Google Drive com base nos critérios fornecidos.
|
193
|
-
|
194
|
-
Args:
|
195
|
-
query (str, optional): Critério de busca para os arquivos ou pastas no Google Drive.
|
196
|
-
Consulte https://developers.google.com/drive/api/v3/ref-search-terms.
|
197
|
-
Defaults to "".
|
198
|
-
exemplo: query = 'ID_DA_PASTA_NO_GOOGLE_DRIVE' in parents and trashed=false"
|
199
|
-
spaces (str, optional): Especifica os locais de armazenamento a serem consultados. Pode ser 'drive',
|
200
|
-
'appDataFolder', ou 'photos'. Defaults to 'drive'.
|
201
|
-
fields (str, optional): Campos a serem retornados na resposta. Consulte a documentação para os campos disponíveis.
|
202
|
-
Defaults to "nextPageToken, files(id, name)".
|
203
|
-
|
204
|
-
Returns:
|
205
|
-
dict: Dicionário contendo o resultado da busca.
|
206
|
-
"""
|
207
|
-
try:
|
208
|
-
ListFolderValidator(query=query, fields=fields, spaces=spaces)
|
209
|
-
except ValidationError as e:
|
210
|
-
raise ValueError("Erro na validação dos dados de input da lista:", e.errors())
|
211
|
-
try:
|
212
|
-
results = (
|
213
|
-
self.service.files()
|
214
|
-
.list(q=query,
|
215
|
-
spaces=spaces,
|
216
|
-
pageSize=self.page_size,
|
217
|
-
fields=fields,
|
218
|
-
supportsAllDrives=True,
|
219
|
-
includeItemsFromAllDrives=True)
|
220
|
-
.execute()
|
221
|
-
)
|
222
|
-
return {"success" : True, "result" : results}
|
223
|
-
except HttpError as hr:
|
224
|
-
logging.debug(f"Ocorreu um de http. Erro: {hr}")
|
225
|
-
return {"success" : False, "result" : None, "error" : str(hr)}
|
226
|
-
except Exception as e:
|
227
|
-
logging.error(f"Ocorreu um erro ao fazer a requisição. Error: {e}")
|
228
|
-
|
229
|
-
|
230
|
-
def download_file(self, file : str, mimeType : str):
|
231
|
-
"""
|
232
|
-
Obtém o conteúdo de um arquivo armazenado no Google Drive.
|
233
|
-
|
234
|
-
Esta função acessa o Google Drive usando a API e lê os dados do arquivo especificado, retornando-os como um objeto binário de memória (`BytesIO`).
|
235
|
-
|
236
|
-
Parâmetros:
|
237
|
-
- file (str): Dicionário contendo informações do arquivo no Google Drive, incluindo as chaves:
|
238
|
-
- `"name"`: Nome do arquivo.
|
239
|
-
- `"id"`: ID do arquivo.
|
240
|
-
|
241
|
-
Retorna:
|
242
|
-
- BytesIO: Objeto em memória contendo os dados do arquivo.
|
243
|
-
- None: Caso ocorra um erro ao tentar abrir ou ler o arquivo.
|
244
|
-
|
245
|
-
Logs:
|
246
|
-
- Registra mensagens indicando o início e o término da leitura do arquivo.
|
247
|
-
- Em caso de falha, registra o erro ocorrido.
|
248
|
-
|
249
|
-
Exceções:
|
250
|
-
- Qualquer erro durante o processo será capturado e registrado no log. A função retornará `None` nesses casos.
|
251
|
-
|
252
|
-
Dependências:
|
253
|
-
- A função assume a existência de um atributo `self.service` configurado para interagir com a API do Google Drive.
|
254
|
-
"""
|
255
|
-
try:
|
256
|
-
request = self.service.files().export_media(fileId=file.get("id"), mimeType=mimeType)
|
257
|
-
with open (file["name"], "wb") as f:
|
258
|
-
f.write(request.execute())
|
259
|
-
return {"success" : True, "result" : f"Arquivo baixado com sucesso. Diretório: {file}"}
|
260
|
-
|
261
|
-
except Exception as e:
|
262
|
-
logging.debug(f"Erro ao tentar abrir o arquivo. Erro {e}")
|
263
|
-
return {"success" : False, "result" : None}
|
264
|
-
|
265
|
-
|
266
|
-
def get_base_data(self, id_sheet:str,page:str) -> list:
|
267
|
-
"""
|
268
|
-
Retorna os dados da planilha especificada.
|
269
|
-
Parâmetros:
|
270
|
-
- drive_client: Cliente do Google Drive.
|
271
|
-
- id_sheet: ID da planilha.
|
272
|
-
- page: Nome da página da planilha.
|
273
|
-
Retorna:
|
274
|
-
- Uma lista contendo os valores da planilha.
|
275
|
-
Exemplo de uso:
|
276
|
-
>>> drive_client = ...
|
277
|
-
>>> id_sheet = "abc123"
|
278
|
-
>>> page = "Sheet1"
|
279
|
-
>>> data = get_base_data(drive_client, id_sheet, page)
|
280
|
-
"""
|
281
|
-
try:
|
282
|
-
sheet = self.service.spreadsheets()
|
283
|
-
result = sheet.values().get(spreadsheetId=id_sheet, range=page).execute()
|
284
|
-
values = result.get('values', [])
|
285
|
-
return {"success" : True, "result" : values}
|
286
|
-
except Exception as e:
|
287
|
-
return {"success" : False, "result" : None, "error" : str(e)}
|
288
|
-
|
289
|
-
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/__init__.py
RENAMED
File without changes
|
{csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_b64.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_rdp.py
RENAMED
File without changes
|
File without changes
|
{csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_settings.py
RENAMED
File without changes
|
{csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/functions/func_titulo.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{csc_cia_stne-0.0.67 → csc_cia_stne-0.0.68}/src/csc_cia_stne/utilitarios/validations/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|