csc-cia-stne 0.0.43__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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