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/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
- key: str
18
- with_subject: str
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('key','with_subject', "version")
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 isinstance(value, str) or not value.strip():
32
- raise ValueError(f"O campo '{info.field_name}' deve ser strings e não {type(value)}")
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', 'params')
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
- limit : int
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', 'limit')
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 : List[str]
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, list):
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', 'campo', 'download_dir')
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,2 +1,3 @@
1
1
  from .GoogleDriveValidator import *
2
- from .GcpBigQueryValidator import *
2
+ from .GcpBigQueryValidator import *
3
+ from .ServiceNowValidator import *
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: csc_cia_stne
3
- Version: 0.0.37
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=Btr1EaCLDdKc8zRXX__Jz-Sf2yrhw67f80gr2CibEIU,2339
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=yLfaAWcrOKk9YuI1qcOTkZEqyrSSEF68RmzYgC7dq-g,11569
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=HU31l134U58wag3fx3A1X4pZxfubF5VoO4D-LQi6-Yg,3957
11
- csc_cia_stne/servicenow.py,sha256=QN7R49Bb8HcqfGT9iytbPaqwV2rtH4N7Nhvb_kfTsHU,36400
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=cNuqQyQifxx3zIqDCljfcUhWCty9SyT9oGTVUKp-uWw,3752
22
- csc_cia_stne/utilitarios/validations/ServiceNowValidator.py,sha256=Vg4i9P7PV_qQ-gUDtSbSK4wOybt3deKG0OcotpufT7Y,13391
23
- csc_cia_stne/utilitarios/validations/__init__.py,sha256=VE49g8ExrBUyyUzhOUjsP9880L1PWCKPHckd848MQeo,71
24
- csc_cia_stne-0.0.37.dist-info/LICENCE,sha256=LPGMtgKki2C3KEZP7hDhA1HBrlq5JCHkIeStUCLEMx4,1073
25
- csc_cia_stne-0.0.37.dist-info/METADATA,sha256=KG5dCQwIri5BpfPPvxVMiG4pF786BNU-0DMrd8IV7ps,1025
26
- csc_cia_stne-0.0.37.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
27
- csc_cia_stne-0.0.37.dist-info/top_level.txt,sha256=ldo7GVv3tQx5KJvwBzdZzzQmjPys2NDVVn1rv0BOF2Q,13
28
- csc_cia_stne-0.0.37.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (75.7.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5