csc-cia-stne 0.0.43__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.
@@ -0,0 +1,403 @@
1
+ from pydantic import BaseModel, field_validator, model_validator
2
+ from typing import List
3
+
4
+
5
+ class InitParamsValidator(BaseModel):
6
+ """
7
+ Classe responsável por validar os parâmetros de inicialização.
8
+ Atributos:
9
+ - username (str): O nome de usuário.
10
+ - password (str): A senha.
11
+ - env (str): O ambiente.
12
+ Métodos:
13
+ - check_str_input(value, info): Valida se o valor é uma string não vazia.
14
+ """
15
+ username: str
16
+ password: str
17
+ env: str
18
+
19
+ """
20
+ Valida se o valor é uma string não vazia.
21
+ Parâmetros:
22
+ - value: O valor a ser validado.
23
+ - info: Informações sobre o campo.
24
+ Retorna:
25
+ - O valor validado.
26
+ Lança:
27
+ - ValueError: Se o valor não for uma string ou for uma string vazia.
28
+ """
29
+ @field_validator('username', 'password', 'env')
30
+ def check_str_input(cls, value, info):
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)}")
35
+ return value
36
+
37
+
38
+ class RequestValidator(BaseModel):
39
+ """
40
+ Classe para validar os campos de uma requisição.
41
+ Atributos:
42
+ - url (str): A URL da requisição.
43
+ - timeout (int): O tempo limite da requisição em segundos. O valor padrão é 15.
44
+ Métodos:
45
+ - check_str_input(value, info): Valida se o valor é uma string não vazia.
46
+ - check_input_basic(value, info): Valida se o valor é um inteiro.
47
+ """
48
+ url: str
49
+ timeout: int = 15
50
+
51
+
52
+ """
53
+ Valida se o valor é uma string não vazia.
54
+ Parâmetros:
55
+ - value: O valor a ser validado.
56
+ - info: Informações sobre o campo.
57
+ Retorna:
58
+ - O valor validado.
59
+ Lança:
60
+ - ValueError: Se o valor não for uma string ou estiver vazio.
61
+ """
62
+ @field_validator('url')
63
+ def check_str_input(cls, value, info):
64
+ if not isinstance(value, str) or not value.strip():
65
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
66
+ return value
67
+
68
+ """
69
+ Valida se o valor é um inteiro.
70
+ Parâmetros:
71
+ - value: O valor a ser validado.
72
+ - info: Informações sobre o campo.
73
+ Retorna:
74
+ - O valor validado.
75
+ Lança:
76
+ - ValueError: Se o valor não for um inteiro.
77
+ """
78
+ @field_validator('timeout')
79
+ def check_input_basic(cls, value, info):
80
+ if not isinstance(value, int):
81
+ raise ValueError(f"O campo '{info.field_name}' deve ser um inteiro e não um {type(value)}")
82
+
83
+ return value
84
+
85
+
86
+ class PutValidator(BaseModel):
87
+ """
88
+ Classe de validação para requisições PUT.
89
+ Atributos:
90
+ - url (str): A URL da requisição PUT.
91
+ - payload (dict): O payload da requisição PUT.
92
+ - timeout (int): O tempo limite da requisição PUT em segundos. O valor padrão é 15.
93
+ Métodos:
94
+ - check_str_input(value, info): Valida se o valor do atributo 'url' é uma string não vazia.
95
+ - check_input_basic(value, info): Valida se o valor do atributo 'timeout' é um inteiro.
96
+ - check_dict_input(value, info): Valida se o valor do atributo 'payload' é um dicionário.
97
+ """
98
+
99
+ url : str
100
+ payload : dict
101
+ timeout : int = 15
102
+
103
+ """
104
+ Valida se o valor do atributo 'url' é uma string não vazia.
105
+ Parâmetros:
106
+ - value: O valor do atributo 'url'.
107
+ - info: Informações sobre o campo sendo validado.
108
+ Retorna:
109
+ - O valor do atributo 'url' se for válido.
110
+ Lança:
111
+ - ValueError: Se o valor não for uma string ou for uma string vazia.
112
+ """
113
+ @field_validator('url')
114
+ def check_str_input(cls, value, info):
115
+ if not isinstance(value, str) or not value.strip():
116
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
117
+ return value
118
+
119
+ """
120
+ Valida se o valor do atributo 'timeout' é um inteiro.
121
+ Parâmetros:
122
+ - value: O valor do atributo 'timeout'.
123
+ - info: Informações sobre o campo sendo validado.
124
+ Retorna:
125
+ - O valor do atributo 'timeout' se for válido.
126
+ Lança:
127
+ - ValueError: Se o valor não for um inteiro.
128
+ """
129
+ @field_validator('timeout')
130
+ def check_input_basic(cls, value, info):
131
+ if not isinstance(value, int):
132
+ raise ValueError(f"O campo '{info.field_name}' deve ser um inteiro e não um {type(value)}")
133
+ return value
134
+
135
+ """
136
+ Valida se o valor do atributo 'payload' é um dicionário.
137
+ Parâmetros:
138
+ - value: O valor do atributo 'payload'.
139
+ - info: Informações sobre o campo sendo validado.
140
+ Retorna:
141
+ - O valor do atributo 'payload' se for válido.
142
+ Lança:
143
+ - ValueError: Se o valor não for um dicionário.
144
+ """
145
+ @field_validator('payload')
146
+ def check_dict_input(cls, value, info):
147
+ if not isinstance(value, dict):
148
+ raise ValueError(f"O campo '{info.field_name}' deve ser um dicionário e não um {type(value)}")
149
+ return value
150
+
151
+
152
+ class PostValidator(BaseModel):
153
+ """
154
+ Classe responsável por validar os dados de um post.
155
+ Atributos:
156
+ - url (str): A URL do post.
157
+ - variables (dict): As variáveis do post.
158
+ Métodos:
159
+ - check_str_input(value, info): Valida se o valor do campo 'url' é uma string não vazia.
160
+ - check_dict_input(value, info): Valida se o valor do campo 'variables' é um dicionário.
161
+ """
162
+ url : str
163
+ variables : dict
164
+
165
+ @field_validator('url')
166
+ def check_str_input(cls, value, info):
167
+ if not isinstance(value, str) or not value.strip():
168
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
169
+ return value
170
+
171
+ @field_validator('variables')
172
+ def check_dict_input(cls, value, info):
173
+ if not isinstance(value, dict):
174
+ raise ValueError(f"O campo '{info.field_name}' deve ser um dicionário e não um {type(value)}")
175
+ return value
176
+
177
+
178
+ class ListTicketValidator(BaseModel):
179
+ """
180
+ Classe para validar os campos de entrada da lista de tickets.
181
+ Atributos:
182
+ - tabela (str): Nome da tabela.
183
+ - query (str): Consulta a ser realizada.
184
+ - campos (List[str]): Lista de campos.
185
+ - timeout (int): Tempo limite.
186
+ - limit (int): Limite de resultados.
187
+ Métodos:
188
+ - check_str_input(value, info): Valida se o valor é uma string não vazia.
189
+ - check_input_basic(value, info): Valida se o valor é um inteiro.
190
+ - check_list_input(value, info): Valida se o valor é uma lista.
191
+ """
192
+ tabela : str
193
+ query : str
194
+ campos : List[str]
195
+ timeout : int
196
+ limite : int
197
+
198
+ @field_validator('tabela', 'query')
199
+ def check_str_input(cls, value, info):
200
+ if not isinstance(value, str) or not value.strip():
201
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
202
+ return value
203
+
204
+ @field_validator('timeout', 'limite')
205
+ def check_input_basic(cls, value, info):
206
+ if not isinstance(value, int):
207
+ raise ValueError(f"O campo '{info.field_name}' deve ser um inteiro e não um {type(value)}")
208
+ return value
209
+
210
+ @field_validator('campos')
211
+ def check_list_input(cls, value, info):
212
+ if not isinstance(value, list):
213
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma lista e não um {type(value)}")
214
+ return value
215
+
216
+
217
+ class UpdateTicketValidator(BaseModel):
218
+ """
219
+ Classe responsável por validar os campos do ticket de atualização.
220
+ Atributos:
221
+ - sys_id (str): O ID do ticket.
222
+ - tabela (str): A tabela do ticket.
223
+ - payload (List[str]): A carga útil do ticket.
224
+ - timeout (int): O tempo limite para a operação.
225
+ Métodos:
226
+ - check_str_input(value, info): Valida se o valor fornecido é uma string não vazia.
227
+ - check_input_basic(value, info): Valida se o valor fornecido é um inteiro.
228
+ - check_list_input(value, info): Valida se o valor fornecido é uma lista.
229
+ """
230
+
231
+ sys_id : str
232
+ tabela : str
233
+ payload : dict
234
+ timeout : int
235
+
236
+ """
237
+ Valida se o valor fornecido é uma string não vazia.
238
+ Parâmetros:
239
+ - value (Any): O valor a ser validado.
240
+ - info (FieldInfo): Informações sobre o campo.
241
+ Retorna:
242
+ - value (Any): O valor validado.
243
+ Lança:
244
+ - ValueError: Se o valor não for uma string ou estiver vazio.
245
+ """
246
+ @field_validator('sys_id', 'tabela')
247
+ def check_str_input(cls, value, info):
248
+ if not isinstance(value, str) or not value.strip():
249
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
250
+ return value
251
+
252
+ """
253
+ Valida se o valor fornecido é um inteiro.
254
+ Parâmetros:
255
+ - value (Any): O valor a ser validado.
256
+ - info (FieldInfo): Informações sobre o campo.
257
+ Retorna:
258
+ - value (Any): O valor validado.
259
+ Lança:
260
+ - ValueError: Se o valor não for um inteiro.
261
+ """
262
+ @field_validator('timeout')
263
+ def check_input_basic(cls, value, info):
264
+ if not isinstance(value, int):
265
+ raise ValueError(f"O campo '{info.field_name}' deve ser um inteiro e não um {type(value)}")
266
+ return value
267
+
268
+ """
269
+ Valida se o valor fornecido é uma lista.
270
+ Parâmetros:
271
+ - value (Any): O valor a ser validado.
272
+ - info (FieldInfo): Informações sobre o campo.
273
+ Retorna:
274
+ - value (Any): O valor validado.
275
+ Lança:
276
+ - ValueError: Se o valor não for uma lista.
277
+ """
278
+ @field_validator('payload')
279
+ def check_list_input(cls, value, info):
280
+ if not isinstance(value, dict):
281
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma lista e não um {type(value)}")
282
+ return value
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
+
315
+ class AttachFileTicketValidator(BaseModel):
316
+ """
317
+ Classe responsável por validar os campos de entrada do anexo de um ticket no ServiceNow.
318
+ Atributos:
319
+ - header_content_type (dict): O cabeçalho Content-Type da requisição.
320
+ - anexo_path (str): O caminho do anexo a ser enviado.
321
+ - tabela (str): O nome da tabela do ServiceNow.
322
+ - sys_id (str): O ID do registro no ServiceNow.
323
+ - timeout (int): O tempo limite da requisição.
324
+ Métodos:
325
+ - check_str_input(value, info): Valida se o valor do campo é uma string não vazia.
326
+ - check_input_basic(value, info): Valida se o valor do campo é um inteiro.
327
+ - check_dict_input(value, info): Valida se o valor do campo é um dicionário.
328
+ """
329
+ header_content_type : dict
330
+ anexo_path : str
331
+ tabela : str
332
+ sys_id : str
333
+ timeout : int
334
+
335
+ @field_validator('sys_id', 'tabela', 'anexo_path')
336
+ def check_str_input(cls, value, info):
337
+ if not isinstance(value, str) or not value.strip():
338
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
339
+ return value
340
+
341
+ @field_validator('timeout')
342
+ def check_input_basic(cls, value, info):
343
+ if not isinstance(value, int):
344
+ raise ValueError(f"O campo '{info.field_name}' deve ser um inteiro e não um {type(value)}")
345
+ return value
346
+
347
+ @field_validator('header_content_type')
348
+ def check_dict_input(cls, value, info):
349
+ if not isinstance(value, dict):
350
+ raise ValueError(f"O campo '{info.field_name}' deve ser um dicionário e não um {type(value)}")
351
+ return value
352
+
353
+
354
+ class GetAttachValidator(BaseModel):
355
+ """
356
+ Classe responsável por validar os campos de entrada para a obtenção de anexos no ServiceNow.
357
+ Atributos:
358
+ - sys_id (str): O ID do registro no ServiceNow.
359
+ - tabela (str): O nome da tabela no ServiceNow.
360
+ - campo (str): O nome do campo no ServiceNow.
361
+ - download_dir (str): O diretório onde o anexo será salvo.
362
+ - timeout (int): O tempo limite para a operação de obtenção de anexo.
363
+ Métodos:
364
+ - check_str_input(value, info): Valida se os campos sys_id, tabela, campo e download_dir são strings não vazias.
365
+ - check_input_basic(value, info): Valida se o campo timeout é um inteiro.
366
+ """
367
+
368
+ sys_id : str
369
+ tabela : str
370
+ download_dir : str
371
+ timeout : int
372
+
373
+ """
374
+ Valida se os campos sys_id, tabela, campo e download_dir são strings não vazias.
375
+ Parâmetros:
376
+ - value: O valor do campo a ser validado.
377
+ - info: Informações sobre o campo.
378
+ Retorna:
379
+ - O valor do campo, se for válido.
380
+ Lança:
381
+ - ValueError: Se o campo não for uma string ou estiver vazio.
382
+ """
383
+ @field_validator('sys_id', 'tabela','download_dir')
384
+ def check_str_input(cls, value, info):
385
+ if not isinstance(value, str) or not value.strip():
386
+ raise ValueError(f"O campo '{info.field_name}' deve ser uma string e não um {type(value)} e não vazio")
387
+ return value
388
+
389
+ """
390
+ Valida se o campo timeout é um inteiro.
391
+ Parâmetros:
392
+ - value: O valor do campo a ser validado.
393
+ - info: Informações sobre o campo.
394
+ Retorna:
395
+ - O valor do campo, se for válido.
396
+ Lança:
397
+ - ValueError: Se o campo não for um inteiro.
398
+ """
399
+ @field_validator('timeout')
400
+ def check_input_basic(cls, value, info):
401
+ if not isinstance(value, int):
402
+ raise ValueError(f"O campo '{info.field_name}' deve ser um inteiro e não um {type(value)}")
403
+ return value
@@ -0,0 +1,3 @@
1
+ from .GoogleDriveValidator import *
2
+ from .GcpBigQueryValidator import *
3
+ from .ServiceNowValidator import *
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2024 CSC-CIA
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,33 @@
1
+ Metadata-Version: 2.2
2
+ Name: csc_cia_stne
3
+ Version: 0.0.43
4
+ Summary: Biblioteca do time CSC-CIA utilizada no desenvolvimento de RPAs
5
+ License: MIT
6
+ Keywords: karavela,csc,cia,stone,rpa
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENCE
9
+ Requires-Dist: python-json-logger
10
+ Requires-Dist: rich
11
+ Requires-Dist: requests
12
+ Requires-Dist: pydantic
13
+ Requires-Dist: pydantic_settings
14
+ Requires-Dist: zeep
15
+ Requires-Dist: google-cloud-bigquery
16
+ Requires-Dist: google-cloud-storage
17
+ Requires-Dist: google-auth-oauthlib
18
+ Requires-Dist: google-auth-httplib2
19
+ Requires-Dist: google-api-python-client
20
+ Requires-Dist: pyjwt
21
+ Requires-Dist: PyYAML
22
+ Requires-Dist: python-dotenv
23
+ Requires-Dist: slack_sdk
24
+ Requires-Dist: email-validator
25
+
26
+ Essa biblioteca é desenvolvida e atualizada pelo time **CSC-CIA** da **Stone**
27
+
28
+ Utilizada no desenvolvimento dos RPAs, possui classes que são utilizadas com frequência
29
+
30
+ O intuito é não precisar desenvolver, novamente, funcionalidades que são utilizadas com frequência
31
+
32
+ Documentação mais detalhada: [GitHub com acesso restrito](https://github.com/stone-payments/cia-libs)
33
+ Contato: **cia@stone.com.br**
@@ -0,0 +1,29 @@
1
+ csc_cia_stne/__init__.py,sha256=EpmmGz66fgGCdY2HoZtkNG9TRaqhOtjVFkXXI1lLGSk,2435
2
+ csc_cia_stne/bc_correios.py,sha256=pQAnRrcXEMrx3N1MWydZVIhEQLerh3x8-0B045zZIzk,24174
3
+ csc_cia_stne/bc_sta.py,sha256=f75HJ7FLIDSJFLDTvvSvCYo9z0HchzP7rDY5WIdiKXY,16830
4
+ csc_cia_stne/email.py,sha256=RK_TzWBVnUfpP-s5NvjTJJjzhICy8e2fME9EuaiySMY,8162
5
+ csc_cia_stne/gcp_bigquery.py,sha256=jYxvqrWDOPkxc05U4aef7V5lL8ptqsE93lfn0dLFyvc,7385
6
+ csc_cia_stne/google_drive.py,sha256=JcXKlRBSxf5CKM-alT4ZpqWVWLZQfIYIX42_nENoTgU,11896
7
+ csc_cia_stne/karavela.py,sha256=LlpFiDu0ww7eh8F-oREWSQo2mVoQMibx0EGiHR6tznI,4231
8
+ csc_cia_stne/logger_json.py,sha256=UhpRWh9ij7VibxNm1fcTmisRJ_A1RsHE8_FVIWo74Lc,3179
9
+ csc_cia_stne/logger_rich.py,sha256=d3oL96pAH7G1uxFWWWCHfI8MYAkDnnaTblp_KLYBIxM,8137
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=33_UNF7M529eIuWjmzSJFEZ4RmVNkFkuVxvxwsKY1tQ,8126
13
+ csc_cia_stne/stne_admin.py,sha256=vnGSEzcmqWE42vg71oEuoRg6ENaGsZsXFOjxduSH4KU,23561
14
+ csc_cia_stne/utilitarios/__init__.py,sha256=oWxCOFL2wxjs8KBgxoeA6-gVe4ulicVGDgdaw8jzvsY,253
15
+ csc_cia_stne/utilitarios/functions/__init__.py,sha256=iSLKxM8lgPM1lJ51WZ1mwy36IW5iitfMRc_AnEtzpxg,364
16
+ csc_cia_stne/utilitarios/functions/func_b64.py,sha256=XGU34BIQQXWXBS0yM2B4A2wDlcrMl1unIJXjq4lpLnk,1254
17
+ csc_cia_stne/utilitarios/functions/func_converters.py,sha256=EY1zvlBaRX7G1MceVSiRXwwKDQDZwUO9iECBL0fe5iU,481
18
+ csc_cia_stne/utilitarios/functions/func_recriar_pastas.py,sha256=4whZpB3aJQaCPJ3osMAQpKrzEhqYtJbljGWlx_OvKIM,826
19
+ csc_cia_stne/utilitarios/functions/func_settings.py,sha256=rlu4Ec5M-7UzrreiR92L_KLrpBSXv8Hlj4uuRYcPMUc,1709
20
+ csc_cia_stne/utilitarios/functions/func_titulo.py,sha256=bH4tYxovTARF-g2kWUK_GIzzXt8egbVdp6mWD6fc_3I,5345
21
+ csc_cia_stne/utilitarios/validations/GcpBigQueryValidator.py,sha256=PfCeeQquheZkrm07HTIjobleh3QQOjljRFGdxbQ1amQ,4630
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.43.dist-info/LICENCE,sha256=LPGMtgKki2C3KEZP7hDhA1HBrlq5JCHkIeStUCLEMx4,1073
26
+ csc_cia_stne-0.0.43.dist-info/METADATA,sha256=WR_od2PsGPQmlBYzfNDe5n05vKAfGAHzP0jWOihggbY,1121
27
+ csc_cia_stne-0.0.43.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
28
+ csc_cia_stne-0.0.43.dist-info/top_level.txt,sha256=ldo7GVv3tQx5KJvwBzdZzzQmjPys2NDVVn1rv0BOF2Q,13
29
+ csc_cia_stne-0.0.43.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (75.8.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ csc_cia_stne