csc-cia-stne 0.0.37__py3-none-any.whl → 0.0.39__py3-none-any.whl
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/__init__.py +5 -1
- csc_cia_stne/google_drive.py +50 -47
- csc_cia_stne/provio.py +1 -1
- csc_cia_stne/servicenow.py +197 -231
- csc_cia_stne/slack.py +227 -0
- csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py +30 -5
- csc_cia_stne/utilitarios/validations/ServiceNowValidator.py +47 -11
- csc_cia_stne/utilitarios/validations/__init__.py +2 -1
- {csc_cia_stne-0.0.37.dist-info → csc_cia_stne-0.0.39.dist-info}/METADATA +3 -1
- {csc_cia_stne-0.0.37.dist-info → csc_cia_stne-0.0.39.dist-info}/RECORD +13 -12
- {csc_cia_stne-0.0.37.dist-info → csc_cia_stne-0.0.39.dist-info}/WHEEL +1 -1
- {csc_cia_stne-0.0.37.dist-info → csc_cia_stne-0.0.39.dist-info}/LICENCE +0 -0
- {csc_cia_stne-0.0.37.dist-info → csc_cia_stne-0.0.39.dist-info}/top_level.txt +0 -0
csc_cia_stne/slack.py
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
import base64
|
2
|
+
from slack_sdk import WebClient
|
3
|
+
from pydantic import BaseModel, ValidationError, field_validator
|
4
|
+
from typing import Union
|
5
|
+
|
6
|
+
|
7
|
+
class InitParamsValidator(BaseModel):
|
8
|
+
"""
|
9
|
+
Classe para validar os parâmetros de inicialização.
|
10
|
+
Atributos:
|
11
|
+
- token_slack: Union[str, dict] - O token do Slack, que pode ser uma string ou um dicionário.
|
12
|
+
- channel_id: str - O ID do canal do Slack.
|
13
|
+
- on_base64: bool - Indica se o token do Slack está em base64.
|
14
|
+
Métodos:
|
15
|
+
- validate_token_slack(value, info): Valida o token do Slack.
|
16
|
+
- validate_token_slack_dict(value, info): Valida o token do Slack quando é um dicionário.
|
17
|
+
- validate_token_slack(value, info): Valida o valor de on_base64.
|
18
|
+
"""
|
19
|
+
|
20
|
+
token_slack: Union[str, dict]
|
21
|
+
channel_id:str
|
22
|
+
on_base64:bool
|
23
|
+
|
24
|
+
"""
|
25
|
+
Valida o token do Slack.
|
26
|
+
Parâmetros:
|
27
|
+
- value: str - O valor do token do Slack.
|
28
|
+
- info: dict - Informações adicionais sobre o campo.
|
29
|
+
Retorna:
|
30
|
+
- str: O valor do token do Slack, se for válido.
|
31
|
+
Lança:
|
32
|
+
- ValueError: Se o valor não for uma string ou estiver vazio.
|
33
|
+
"""
|
34
|
+
@field_validator('channel_id')
|
35
|
+
def validate_token_slack(cls, value, info):
|
36
|
+
if not isinstance(value, str) or not value.strip():
|
37
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
38
|
+
return value
|
39
|
+
|
40
|
+
"""
|
41
|
+
Valida o token do Slack quando é um dicionário.
|
42
|
+
Parâmetros:
|
43
|
+
- value: dict - O valor do token do Slack.
|
44
|
+
- info: dict - Informações adicionais sobre o campo.
|
45
|
+
Retorna:
|
46
|
+
- dict: O valor do token do Slack, se for válido.
|
47
|
+
Lança:
|
48
|
+
- ValueError: Se o valor não for um dicionário ou uma string vazia.
|
49
|
+
"""
|
50
|
+
@field_validator('token_slack')
|
51
|
+
def validate_token_slack_dict(cls, value, info):
|
52
|
+
if not isinstance(value, dict) or (not isinstance(value, str) or not value.strip()):
|
53
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
54
|
+
return value
|
55
|
+
|
56
|
+
"""
|
57
|
+
Valida o valor de on_base64.
|
58
|
+
Parâmetros:
|
59
|
+
- value: bool - O valor de on_base64.
|
60
|
+
- info: dict - Informações adicionais sobre o campo.
|
61
|
+
Retorna:
|
62
|
+
- bool: O valor de on_base64, se for válido.
|
63
|
+
Lança:
|
64
|
+
- ValueError: Se o valor não for um booleano.
|
65
|
+
"""
|
66
|
+
@field_validator('on_base64')
|
67
|
+
def validate_token_slack(cls, value, info):
|
68
|
+
if not isinstance(value, bool):
|
69
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
70
|
+
return value
|
71
|
+
|
72
|
+
|
73
|
+
class SendSlackMessageParamsValidator(BaseModel):
|
74
|
+
"""
|
75
|
+
Valida os parâmetros para enviar uma mensagem no Slack.
|
76
|
+
Atributos:
|
77
|
+
- message (str): A mensagem a ser enviada.
|
78
|
+
- highlights (list): Uma lista de destaques.
|
79
|
+
- files (list): Uma lista de arquivos.
|
80
|
+
Métodos:
|
81
|
+
- validate_message(value, info): Valida o campo 'message' para garantir que seja uma string não vazia.
|
82
|
+
- validate_list(value, info): Valida os campos 'highlights' e 'files' para garantir que sejam listas.
|
83
|
+
"""
|
84
|
+
|
85
|
+
message:str
|
86
|
+
highlights:list
|
87
|
+
files:list
|
88
|
+
|
89
|
+
@field_validator('message')
|
90
|
+
def validate_message(cls, value, info):
|
91
|
+
if not isinstance(value, str) or not value.strip():
|
92
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
93
|
+
return value
|
94
|
+
|
95
|
+
@field_validator('highlights','files')
|
96
|
+
def validate_list(cls, value, info):
|
97
|
+
if not isinstance(value, list):
|
98
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
99
|
+
return value
|
100
|
+
|
101
|
+
|
102
|
+
class Slack():
|
103
|
+
|
104
|
+
|
105
|
+
def __init__(self, token_slack:Union[str, dict], channel_id, on_base64:bool=False):
|
106
|
+
"""
|
107
|
+
Inicializa a classe Slack.
|
108
|
+
Parâmetros:
|
109
|
+
- token_slack (str): O token de autenticação do Slack.
|
110
|
+
- base64 (bool, opcional): Indica se o token_slack está codificado em base64. O padrão é False.
|
111
|
+
"""
|
112
|
+
|
113
|
+
self.token_slack = token_slack
|
114
|
+
self.on_base64 = on_base64
|
115
|
+
self.channel_id = channel_id
|
116
|
+
|
117
|
+
try:
|
118
|
+
|
119
|
+
InitParamsValidator(token_slack=token_slack, on_base64=on_base64,channel_id=channel_id)
|
120
|
+
|
121
|
+
except ValidationError as e:
|
122
|
+
|
123
|
+
raise ValueError("Erro na validação dos dados de input da inicialização da instância:", e.errors())
|
124
|
+
|
125
|
+
if self.on_base64:
|
126
|
+
|
127
|
+
self.token_slack = base64.b64decode(self.token_slack).decode('utf-8')
|
128
|
+
|
129
|
+
self.client = WebClient(self.token_slack)
|
130
|
+
|
131
|
+
|
132
|
+
def send_message(self, message:str, highlights:list=[] , files:list=[]):
|
133
|
+
"""
|
134
|
+
Envia uma mensagem para o canal do Slack.
|
135
|
+
Parâmetros:
|
136
|
+
- message: str - A mensagem a ser enviada.
|
137
|
+
- highlights: list - Uma lista de destaques (attachments) a serem exibidos junto com a mensagem.
|
138
|
+
- files: list (opcional) - Uma lista de arquivos a serem anexados à mensagem.
|
139
|
+
Retorna:
|
140
|
+
Um dicionário com as seguintes chaves:
|
141
|
+
- status: bool - Indica se o envio da mensagem foi bem-sucedido.
|
142
|
+
- message: dict - A resposta da API do Slack contendo informações sobre a mensagem enviada.
|
143
|
+
- success_attachments: list - Uma lista dos anexos que foram enviados com sucesso.
|
144
|
+
- failed_success_attachments: list - Uma lista dos anexos que falharam ao serem enviados.
|
145
|
+
Caso ocorra algum erro durante o envio da mensagem, o dicionário terá a seguinte estrutura:
|
146
|
+
- status: bool - Indica se ocorreu um erro durante o envio da mensagem.
|
147
|
+
- error: dict - A resposta da API do Slack contendo informações sobre o erro ocorrido.
|
148
|
+
- success_attachments: list - Uma lista dos anexos que foram enviados com sucesso.
|
149
|
+
- failed_attachments: list - Uma lista dos anexos que falharam ao serem enviados.
|
150
|
+
"""
|
151
|
+
|
152
|
+
try:
|
153
|
+
|
154
|
+
SendSlackMessageParamsValidator(message=message, highlights=highlights, files=files)
|
155
|
+
|
156
|
+
except ValidationError as e:
|
157
|
+
|
158
|
+
raise ValueError("Erro na validação dos dados de input da inicialização da instância:", e.errors())
|
159
|
+
|
160
|
+
|
161
|
+
failed_attachments = []
|
162
|
+
|
163
|
+
success_attachments = []
|
164
|
+
|
165
|
+
result_message = self.client.chat_postMessage(
|
166
|
+
channel=self.channel_id,
|
167
|
+
text=message,
|
168
|
+
blocks=[
|
169
|
+
{
|
170
|
+
"type": "section",
|
171
|
+
"text": {
|
172
|
+
"type": "mrkdwn",
|
173
|
+
"text": message
|
174
|
+
}
|
175
|
+
},
|
176
|
+
],
|
177
|
+
attachments=highlights
|
178
|
+
)
|
179
|
+
|
180
|
+
if files is not None and len(files) > 0:
|
181
|
+
|
182
|
+
# validar os arquivos anexados
|
183
|
+
|
184
|
+
for file in files:
|
185
|
+
|
186
|
+
if 'title' in file and 'file' in file:
|
187
|
+
|
188
|
+
if file['title'] is not None and len(str(file['title']).replace(" ","")) > 0 and file['file'] is not None and len(str(files['file']).replace(" ","")) > 0:
|
189
|
+
|
190
|
+
success_attachments.append(file)
|
191
|
+
|
192
|
+
else:
|
193
|
+
|
194
|
+
failed_attachments.append(file)
|
195
|
+
|
196
|
+
else:
|
197
|
+
|
198
|
+
failed_attachments.append(file)
|
199
|
+
|
200
|
+
if len(success_attachments) > 0:
|
201
|
+
|
202
|
+
# Enviar mensagem com anexos
|
203
|
+
|
204
|
+
result_message = self.client.files_upload_v2(
|
205
|
+
channel=self.channel_id,
|
206
|
+
initial_comment="anexos",
|
207
|
+
file_uploads=success_attachments
|
208
|
+
)
|
209
|
+
|
210
|
+
if result_message.get('ok', True):
|
211
|
+
|
212
|
+
return {
|
213
|
+
'status':True,
|
214
|
+
'message':result_message,
|
215
|
+
'success_attachments':success_attachments,
|
216
|
+
'failed_success_attachments':failed_attachments
|
217
|
+
}
|
218
|
+
|
219
|
+
else:
|
220
|
+
|
221
|
+
return {
|
222
|
+
'status':False,
|
223
|
+
'error':result_message,
|
224
|
+
'success_attachments':success_attachments,
|
225
|
+
'failed_attachments':failed_attachments
|
226
|
+
}
|
227
|
+
|
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
from pydantic import BaseModel, field_validator
|
2
|
+
from pydantic import BaseModel, field_validator, EmailStr
|
3
3
|
|
4
4
|
class InitParamsValidator(BaseModel):
|
5
5
|
"""
|
@@ -14,8 +14,8 @@ class InitParamsValidator(BaseModel):
|
|
14
14
|
- check_list_input(cls, value, info): Valida se o valor é uma lista.
|
15
15
|
"""
|
16
16
|
|
17
|
-
|
18
|
-
with_subject:
|
17
|
+
token: dict
|
18
|
+
with_subject: EmailStr
|
19
19
|
scopes : list
|
20
20
|
version : str
|
21
21
|
|
@@ -29,11 +29,17 @@ class InitParamsValidator(BaseModel):
|
|
29
29
|
Lança:
|
30
30
|
- ValueError: Se o valor não for uma string ou estiver vazio.
|
31
31
|
"""
|
32
|
-
@field_validator(
|
32
|
+
@field_validator("version")
|
33
33
|
def check_str_input(cls, value, info):
|
34
34
|
if not isinstance(value, str) or not value.strip():
|
35
35
|
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
36
36
|
return value
|
37
|
+
|
38
|
+
@field_validator('token')
|
39
|
+
def check_dict_input(cls, value, info):
|
40
|
+
if not isinstance(value, dict):
|
41
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser um dicionário e não {type(value)}")
|
42
|
+
return value
|
37
43
|
|
38
44
|
"""
|
39
45
|
Valida se o valor é uma lista.
|
@@ -116,4 +122,23 @@ class ListFolderValidator(BaseModel):
|
|
116
122
|
def check_str_input(cls, value, info):
|
117
123
|
if not isinstance(value, str) or not value.strip():
|
118
124
|
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
119
|
-
return value
|
125
|
+
return value
|
126
|
+
|
127
|
+
class UploadValidator(BaseModel):
|
128
|
+
"""
|
129
|
+
Validador para upload de arquivo no Google Drive.
|
130
|
+
|
131
|
+
Atributos:
|
132
|
+
- file_path (str): Caminho do arquivo a ser enviado.
|
133
|
+
|
134
|
+
"""
|
135
|
+
folder_id: str
|
136
|
+
name: str
|
137
|
+
file_path: str
|
138
|
+
mimetype: str
|
139
|
+
|
140
|
+
@field_validator('folder_id','name','file_path', 'mimetype')
|
141
|
+
def check_str_input(cls, value, info):
|
142
|
+
if not isinstance(value, str) or not value.strip():
|
143
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
|
144
|
+
return value
|
@@ -28,23 +28,24 @@ class InitParamsValidator(BaseModel):
|
|
28
28
|
"""
|
29
29
|
@field_validator('username', 'password', 'env')
|
30
30
|
def check_str_input(cls, value, info):
|
31
|
-
if not
|
32
|
-
|
31
|
+
if not value.strip():
|
32
|
+
raise ValueError(f"O campo '{info.field_name}' não pode ser vazio")
|
33
|
+
if not isinstance(value, str):
|
34
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser string e não ser do tipo: {type(value)}")
|
33
35
|
return value
|
34
36
|
|
37
|
+
|
35
38
|
class RequestValidator(BaseModel):
|
36
39
|
"""
|
37
40
|
Classe para validar os campos de uma requisição.
|
38
41
|
Atributos:
|
39
42
|
- url (str): A URL da requisição.
|
40
|
-
- params (str): Os parâmetros da requisição.
|
41
43
|
- timeout (int): O tempo limite da requisição em segundos. O valor padrão é 15.
|
42
44
|
Métodos:
|
43
45
|
- check_str_input(value, info): Valida se o valor é uma string não vazia.
|
44
46
|
- check_input_basic(value, info): Valida se o valor é um inteiro.
|
45
47
|
"""
|
46
48
|
url: str
|
47
|
-
params: str
|
48
49
|
timeout: int = 15
|
49
50
|
|
50
51
|
|
@@ -58,7 +59,7 @@ class RequestValidator(BaseModel):
|
|
58
59
|
Lança:
|
59
60
|
- ValueError: Se o valor não for uma string ou estiver vazio.
|
60
61
|
"""
|
61
|
-
@field_validator('url'
|
62
|
+
@field_validator('url')
|
62
63
|
def check_str_input(cls, value, info):
|
63
64
|
if not isinstance(value, str) or not value.strip():
|
64
65
|
raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
|
@@ -81,6 +82,7 @@ class RequestValidator(BaseModel):
|
|
81
82
|
|
82
83
|
return value
|
83
84
|
|
85
|
+
|
84
86
|
class PutValidator(BaseModel):
|
85
87
|
"""
|
86
88
|
Classe de validação para requisições PUT.
|
@@ -146,6 +148,7 @@ class PutValidator(BaseModel):
|
|
146
148
|
raise ValueError(f"O campo '{info.field_name}' deve ser um dicionário e não um {type(value)}")
|
147
149
|
return value
|
148
150
|
|
151
|
+
|
149
152
|
class PostValidator(BaseModel):
|
150
153
|
"""
|
151
154
|
Classe responsável por validar os dados de um post.
|
@@ -171,6 +174,7 @@ class PostValidator(BaseModel):
|
|
171
174
|
raise ValueError(f"O campo '{info.field_name}' deve ser um dicionário e não um {type(value)}")
|
172
175
|
return value
|
173
176
|
|
177
|
+
|
174
178
|
class ListTicketValidator(BaseModel):
|
175
179
|
"""
|
176
180
|
Classe para validar os campos de entrada da lista de tickets.
|
@@ -189,7 +193,7 @@ class ListTicketValidator(BaseModel):
|
|
189
193
|
query : str
|
190
194
|
campos : List[str]
|
191
195
|
timeout : int
|
192
|
-
|
196
|
+
limite : int
|
193
197
|
|
194
198
|
@field_validator('tabela', 'query')
|
195
199
|
def check_str_input(cls, value, info):
|
@@ -197,7 +201,7 @@ class ListTicketValidator(BaseModel):
|
|
197
201
|
raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
|
198
202
|
return value
|
199
203
|
|
200
|
-
@field_validator('timeout', '
|
204
|
+
@field_validator('timeout', 'limite')
|
201
205
|
def check_input_basic(cls, value, info):
|
202
206
|
if not isinstance(value, int):
|
203
207
|
raise ValueError(f"O campo '{info.field_name}' deve ser um inteiro e não um {type(value)}")
|
@@ -209,6 +213,7 @@ class ListTicketValidator(BaseModel):
|
|
209
213
|
raise ValueError(f"O campo '{info.field_name}' deve ser uma lista e não um {type(value)}")
|
210
214
|
return value
|
211
215
|
|
216
|
+
|
212
217
|
class UpdateTicketValidator(BaseModel):
|
213
218
|
"""
|
214
219
|
Classe responsável por validar os campos do ticket de atualização.
|
@@ -225,7 +230,7 @@ class UpdateTicketValidator(BaseModel):
|
|
225
230
|
|
226
231
|
sys_id : str
|
227
232
|
tabela : str
|
228
|
-
payload :
|
233
|
+
payload : dict
|
229
234
|
timeout : int
|
230
235
|
|
231
236
|
"""
|
@@ -272,10 +277,41 @@ class UpdateTicketValidator(BaseModel):
|
|
272
277
|
"""
|
273
278
|
@field_validator('payload')
|
274
279
|
def check_list_input(cls, value, info):
|
275
|
-
if not isinstance(value,
|
280
|
+
if not isinstance(value, dict):
|
276
281
|
raise ValueError(f"O campo '{info.field_name}' deve ser uma lista e não um {type(value)}")
|
277
282
|
return value
|
278
283
|
|
284
|
+
|
285
|
+
class DownloadFileValidator(BaseModel):
|
286
|
+
"""
|
287
|
+
Classe responsável por validar os campos do ticket de download.
|
288
|
+
Atributos:
|
289
|
+
- sys_id_file (str): O ID do anexo dentro do formulário aberto.
|
290
|
+
- file_path (str): URL onde será salvo o arquivo.
|
291
|
+
Métodos:
|
292
|
+
- check_str_input(value, info): Valida se o valor fornecido é uma string não vazia.
|
293
|
+
"""
|
294
|
+
sys_id_file : str
|
295
|
+
file_path : str
|
296
|
+
|
297
|
+
|
298
|
+
"""
|
299
|
+
Valida se o valor fornecido é uma string não vazia.
|
300
|
+
Parâmetros:
|
301
|
+
- value (Any): O valor a ser validado.
|
302
|
+
- info (FieldInfo): Informações sobre o campo.
|
303
|
+
Retorna:
|
304
|
+
- value (Any): O valor validado.
|
305
|
+
Lança:
|
306
|
+
- ValueError: Se o valor não for uma string ou estiver vazio.
|
307
|
+
"""
|
308
|
+
@field_validator('sys_id_file', 'file_path')
|
309
|
+
def check_str_input(cls, value, info):
|
310
|
+
if not isinstance(value, str) or not value.strip():
|
311
|
+
raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
|
312
|
+
return value
|
313
|
+
|
314
|
+
|
279
315
|
class AttachFileTicketValidator(BaseModel):
|
280
316
|
"""
|
281
317
|
Classe responsável por validar os campos de entrada do anexo de um ticket no ServiceNow.
|
@@ -314,6 +350,7 @@ class AttachFileTicketValidator(BaseModel):
|
|
314
350
|
raise ValueError(f"O campo '{info.field_name}' deve ser um dicionário e não um {type(value)}")
|
315
351
|
return value
|
316
352
|
|
353
|
+
|
317
354
|
class GetAttachValidator(BaseModel):
|
318
355
|
"""
|
319
356
|
Classe responsável por validar os campos de entrada para a obtenção de anexos no ServiceNow.
|
@@ -330,7 +367,6 @@ class GetAttachValidator(BaseModel):
|
|
330
367
|
|
331
368
|
sys_id : str
|
332
369
|
tabela : str
|
333
|
-
campo :str
|
334
370
|
download_dir : str
|
335
371
|
timeout : int
|
336
372
|
|
@@ -344,7 +380,7 @@ class GetAttachValidator(BaseModel):
|
|
344
380
|
Lança:
|
345
381
|
- ValueError: Se o campo não for uma string ou estiver vazio.
|
346
382
|
"""
|
347
|
-
@field_validator('sys_id', 'tabela',
|
383
|
+
@field_validator('sys_id', 'tabela','download_dir')
|
348
384
|
def check_str_input(cls, value, info):
|
349
385
|
if not isinstance(value, str) or not value.strip():
|
350
386
|
raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: csc_cia_stne
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.39
|
4
4
|
Summary: Biblioteca do time CSC-CIA utilizada no desenvolvimento de RPAs
|
5
5
|
License: MIT
|
6
6
|
Keywords: karavela,csc,cia,stone,rpa
|
@@ -16,9 +16,11 @@ Requires-Dist: google-cloud-bigquery
|
|
16
16
|
Requires-Dist: google-cloud-storage
|
17
17
|
Requires-Dist: google-auth-oauthlib
|
18
18
|
Requires-Dist: google-auth-httplib2
|
19
|
+
Requires-Dist: google-api-python-client
|
19
20
|
Requires-Dist: pyjwt
|
20
21
|
Requires-Dist: PyYAML
|
21
22
|
Requires-Dist: python-dotenv
|
23
|
+
Requires-Dist: slack_sdk
|
22
24
|
|
23
25
|
Essa biblioteca é desenvolvida e atualizada pelo time **CSC-CIA** da **Stone**
|
24
26
|
|
@@ -1,14 +1,15 @@
|
|
1
|
-
csc_cia_stne/__init__.py,sha256=
|
1
|
+
csc_cia_stne/__init__.py,sha256=EpmmGz66fgGCdY2HoZtkNG9TRaqhOtjVFkXXI1lLGSk,2435
|
2
2
|
csc_cia_stne/bc_correios.py,sha256=pQAnRrcXEMrx3N1MWydZVIhEQLerh3x8-0B045zZIzk,24174
|
3
3
|
csc_cia_stne/bc_sta.py,sha256=f75HJ7FLIDSJFLDTvvSvCYo9z0HchzP7rDY5WIdiKXY,16830
|
4
4
|
csc_cia_stne/email.py,sha256=RK_TzWBVnUfpP-s5NvjTJJjzhICy8e2fME9EuaiySMY,8162
|
5
5
|
csc_cia_stne/gcp_bigquery.py,sha256=yNCx0yD1peoxOKEiu2Ml6FfDtXUTzcJGcypjWPH8QqE,7449
|
6
|
-
csc_cia_stne/google_drive.py,sha256=
|
6
|
+
csc_cia_stne/google_drive.py,sha256=JcXKlRBSxf5CKM-alT4ZpqWVWLZQfIYIX42_nENoTgU,11896
|
7
7
|
csc_cia_stne/karavela.py,sha256=LlpFiDu0ww7eh8F-oREWSQo2mVoQMibx0EGiHR6tznI,4231
|
8
8
|
csc_cia_stne/logger_json.py,sha256=W6Fj0G1-TWXHdHoLLX5SbVV7BSpVvjHm1fkKI5Q69YQ,3129
|
9
9
|
csc_cia_stne/logger_rich.py,sha256=FYO9tG-tEJJDP2EDYFTQYS8GayvbRMgRbKI9FcXvRCs,7812
|
10
|
-
csc_cia_stne/provio.py,sha256=
|
11
|
-
csc_cia_stne/servicenow.py,sha256=
|
10
|
+
csc_cia_stne/provio.py,sha256=yTRX4YJ6RdNc2ZCVPgsIEgsxe3wQgwnXns4bPX4plAI,3955
|
11
|
+
csc_cia_stne/servicenow.py,sha256=3eifPWOIGv2udGpI3cr2SkMMKcQR4xHlA_fiOdw_fmg,32136
|
12
|
+
csc_cia_stne/slack.py,sha256=QtF3zsHldDbsqJKT206jQ2EWTdvVg9FcZ1EhM_YVJWw,8071
|
12
13
|
csc_cia_stne/stne_admin.py,sha256=vnGSEzcmqWE42vg71oEuoRg6ENaGsZsXFOjxduSH4KU,23561
|
13
14
|
csc_cia_stne/utilitarios/__init__.py,sha256=oWxCOFL2wxjs8KBgxoeA6-gVe4ulicVGDgdaw8jzvsY,253
|
14
15
|
csc_cia_stne/utilitarios/functions/__init__.py,sha256=iSLKxM8lgPM1lJ51WZ1mwy36IW5iitfMRc_AnEtzpxg,364
|
@@ -18,11 +19,11 @@ csc_cia_stne/utilitarios/functions/func_recriar_pastas.py,sha256=4whZpB3aJQaCPJ3
|
|
18
19
|
csc_cia_stne/utilitarios/functions/func_settings.py,sha256=rlu4Ec5M-7UzrreiR92L_KLrpBSXv8Hlj4uuRYcPMUc,1709
|
19
20
|
csc_cia_stne/utilitarios/functions/func_titulo.py,sha256=bH4tYxovTARF-g2kWUK_GIzzXt8egbVdp6mWD6fc_3I,5345
|
20
21
|
csc_cia_stne/utilitarios/validations/GcpBigQueryValidator.py,sha256=PfCeeQquheZkrm07HTIjobleh3QQOjljRFGdxbQ1amQ,4630
|
21
|
-
csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py,sha256=
|
22
|
-
csc_cia_stne/utilitarios/validations/ServiceNowValidator.py,sha256=
|
23
|
-
csc_cia_stne/utilitarios/validations/__init__.py,sha256=
|
24
|
-
csc_cia_stne-0.0.
|
25
|
-
csc_cia_stne-0.0.
|
26
|
-
csc_cia_stne-0.0.
|
27
|
-
csc_cia_stne-0.0.
|
28
|
-
csc_cia_stne-0.0.
|
22
|
+
csc_cia_stne/utilitarios/validations/GoogleDriveValidator.py,sha256=PBo-AV2bjR__4o9jYxuXO-UyxjAZvVwYgMbtsrFK2sI,4537
|
23
|
+
csc_cia_stne/utilitarios/validations/ServiceNowValidator.py,sha256=yleKUIo1ZfyloP9fDPNjv3JJXdLcocT81WIgRSYmqEA,14423
|
24
|
+
csc_cia_stne/utilitarios/validations/__init__.py,sha256=O_qyEU2ji3u6LHUXZCXvUFsMpoMWL625qqHTXyXivTA,106
|
25
|
+
csc_cia_stne-0.0.39.dist-info/LICENCE,sha256=LPGMtgKki2C3KEZP7hDhA1HBrlq5JCHkIeStUCLEMx4,1073
|
26
|
+
csc_cia_stne-0.0.39.dist-info/METADATA,sha256=x1jtu3_EK2rUxyVrLC8MtgddEFC0y8KDVLnNK8LorqU,1090
|
27
|
+
csc_cia_stne-0.0.39.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
|
28
|
+
csc_cia_stne-0.0.39.dist-info/top_level.txt,sha256=ldo7GVv3tQx5KJvwBzdZzzQmjPys2NDVVn1rv0BOF2Q,13
|
29
|
+
csc_cia_stne-0.0.39.dist-info/RECORD,,
|
File without changes
|
File without changes
|