everysk-lib 1.9.9__cp312-cp312-win_amd64.whl → 1.10.0__cp312-cp312-win_amd64.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,373 @@
1
+ ###############################################################################
2
+ #
3
+ # (C) Copyright 2026 EVERYSK TECHNOLOGIES
4
+ #
5
+ # This is an unpublished work containing confidential and proprietary
6
+ # information of EVERYSK TECHNOLOGIES. Disclosure, use, or reproduction
7
+ # without authorization of EVERYSK TECHNOLOGIES is prohibited.
8
+ #
9
+ ###############################################################################
10
+ import random
11
+ import re
12
+ import string
13
+
14
+ from everysk.core.fields import IntField, TupleField
15
+
16
+ ###############################################################################
17
+ # Globals
18
+ ###############################################################################
19
+
20
+ CNPJ_LENGTH: IntField = IntField(default=14, readonly=True)
21
+ CNPJ_BASE_LENGTH: IntField = IntField(default=12, readonly=True)
22
+
23
+ WEIGHTS_DV1: TupleField = TupleField(default=(5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2), readonly=True)
24
+ WEIGHTS_DV2: TupleField = TupleField(default=(6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2), readonly=True)
25
+
26
+ BASE_VALUES = string.ascii_uppercase + string.digits
27
+ BASE_VALUES_REGEX = r'[A-Z0-9]'
28
+
29
+
30
+ class CNPJError(ValueError):
31
+ """
32
+ Exception raised for errors encountered during the parsing or validation of a CNPJ (Cadastro Nacional da Pessoa Jurídica).
33
+
34
+ Attributes:
35
+ message (str): Explanation of the error.
36
+ """
37
+
38
+
39
+ class CNPJ:
40
+ """
41
+ Base class for handling Brazilian CNPJ (Cadastro Nacional da Pessoa Jurídica) documents.
42
+
43
+ This class provides methods for sanitizing, normalizing, validating, formatting, and generating CNPJ numbers,
44
+ including support for the new alphanumeric base format and the updated verification digit (DV) calculation rules.
45
+
46
+ cnpj : str | int | float | None
47
+ The CNPJ value to be processed. Can be a string, integer, float, or None.
48
+
49
+ Attributes
50
+ ----------
51
+ firm : str
52
+ The main firm identifier portion of the CNPJ (first 8 digits).
53
+ subsidiary : str
54
+ The branch/subsidiary identifier portion of the CNPJ (next 4 digits).
55
+ dv : str
56
+ The verification digits (last 2 digits) of the CNPJ.
57
+ """
58
+
59
+ def __init__(self, cnpj: str | int | float | None):
60
+ """
61
+ Initialize the instance with a CNPJ value.
62
+
63
+ Args:
64
+ cnpj (str | int | float | None): The CNPJ value, which can be a string, integer, float, or None.
65
+ """
66
+ self._input_cnpj = cnpj
67
+ self.cnpj = cnpj
68
+
69
+ def __str__(self) -> str:
70
+ """
71
+ Returns a string representation of the object by formatting it.
72
+ If formatting fails or returns None, an empty string is returned.
73
+
74
+ Returns:
75
+ str: The formatted string representation of the object, or an empty string if formatting fails.
76
+ """
77
+ return self.cnpj
78
+
79
+ def __repr__(self) -> str:
80
+ """
81
+ Return a string representation of the object, displaying the class name and the value of the 'cnpj' attribute.
82
+
83
+ Returns:
84
+ str: A string in the format "<ClassName>(cnpj='<cnpj_value>')".
85
+ """
86
+ return f"{self.__class__.__name__}('{self.cnpj}')"
87
+
88
+ @property
89
+ def firm(self) -> str:
90
+ """
91
+ Returns the base part of the firm's CNPJ (Cadastro Nacional da Pessoa Jurídica) as a string.
92
+ The CNPJ is sanitized and zero-filled if necessary, then truncated to exclude the last 4 digits.
93
+
94
+ Returns:
95
+ str: The base CNPJ string, excluding the branch identifier.
96
+ """
97
+ if self.is_valid():
98
+ return self.cnpj[: CNPJ_BASE_LENGTH.default - 4]
99
+ return None
100
+
101
+ @property
102
+ def subsidiary(self) -> str:
103
+ """
104
+ Returns the subsidiary portion of the CNPJ number as a string.
105
+
106
+ This property sanitizes the CNPJ value (optionally zero-filling it), then extracts and returns the last 4 digits, which represent the subsidiary code according to the CNPJ format.
107
+
108
+ Returns:
109
+ str: The 4-digit subsidiary code from the CNPJ.
110
+ """
111
+ if self.is_valid():
112
+ return self.cnpj[CNPJ_BASE_LENGTH.default - 4 : CNPJ_BASE_LENGTH.default]
113
+ return None
114
+
115
+ @property
116
+ def dv(self) -> str:
117
+ """
118
+ Returns the 'dv' (check digit) portion of the sanitized identifier string.
119
+
120
+ The method first sanitizes the identifier (optionally zero-filling it), then slices
121
+ the string from the position defined by `CNPJ_BASE_LENGTH.default` to extract the check digit(s).
122
+
123
+ Returns:
124
+ str: The check digit(s) of the sanitized identifier.
125
+ """
126
+ if self.is_valid():
127
+ return self.cnpj[CNPJ_BASE_LENGTH.default :]
128
+ return None
129
+
130
+ def sanitize(self, zfill: bool = True) -> str | None:
131
+ """
132
+ Sanitize a CNPJ string.
133
+
134
+ - Removes non-alphanumeric characters
135
+ - Uppercases letters
136
+ - If zfill=True, left-pads with zeros until length == 14
137
+
138
+ Parameters
139
+ ----------
140
+ zfill : bool, default=True
141
+ Whether to left-pad the sanitized value to length 14.
142
+
143
+ Returns
144
+ -------
145
+ str | None
146
+ Sanitized CNPJ or None if input is None.
147
+
148
+ Raises
149
+ ------
150
+ TypeError
151
+ If `cnpj` is not str|None.
152
+ """
153
+ sanitized = self._input_cnpj
154
+
155
+ if sanitized in {None, True, False, ''}:
156
+ self.cnpj = None
157
+
158
+ else:
159
+ if isinstance(sanitized, float):
160
+ sanitized = int(sanitized)
161
+
162
+ if isinstance(sanitized, int):
163
+ sanitized = str(sanitized)
164
+
165
+ if not isinstance(sanitized, str):
166
+ raise TypeError('CNPJ must be a string, integer, float, or None')
167
+
168
+ sanitized = ''.join(ch for ch in sanitized.strip() if ch.isalnum()).upper()
169
+
170
+ if zfill:
171
+ sanitized = sanitized.zfill(CNPJ_LENGTH.default)
172
+
173
+ self.cnpj = sanitized
174
+
175
+ return self.cnpj
176
+
177
+ def normalize(self, zfill: bool = False, errors: str = 'raise') -> str | None:
178
+ """
179
+ Normalize a CNPJ with structural validation only (no DV check).
180
+
181
+ Always:
182
+ - sanitizes input
183
+ - applies zfill to reach length 14
184
+
185
+ Structural rules:
186
+ - first 12 chars: alphanumeric
187
+ - last 2 chars: digits
188
+
189
+ Parameters
190
+ ----------
191
+ zfill : bool, default=False
192
+ Whether to left-pad the sanitized value to length 14.
193
+ errors : {'raise', 'coerce', 'ignore'}, default='raise'
194
+ Behavior when parsing fails while normalizing ``self.cnpj``.
195
+
196
+ Returns
197
+ -------
198
+ str | None
199
+ Sanitized 14-character CNPJ, None, or original input.
200
+ """
201
+ if errors not in {'raise', 'coerce', 'ignore'}:
202
+ raise ValueError("errors must be one of: 'raise', 'coerce', 'ignore'")
203
+
204
+ try:
205
+ self.sanitize(zfill=zfill)
206
+
207
+ if self.cnpj is None:
208
+ raise CNPJError('CNPJ is None.')
209
+
210
+ if not self.is_valid(check_dv=False):
211
+ raise CNPJError('CNPJ validation failed.')
212
+
213
+ except CNPJError as err:
214
+ if errors == 'coerce':
215
+ self.cnpj = None
216
+ if errors == 'raise':
217
+ raise err
218
+
219
+ return self.cnpj
220
+
221
+ def _ascii48_value(self, ch: str) -> int:
222
+ """
223
+ Converts a single alphanumeric character to its ASCII code minus 48.
224
+
225
+ This method is used internally for mapping characters according to the new DV rule.
226
+ It validates that the input is a single alphanumeric character and raises a CNPJError
227
+ if the input is invalid.
228
+
229
+ Args:
230
+ ch (str): A single character string to be converted.
231
+
232
+ Returns:
233
+ int: The ASCII value of the uppercase version of `ch`, minus 48.
234
+
235
+ Raises:
236
+ CNPJError: If `ch` is not a single character or is not alphanumeric.
237
+ """
238
+ if len(ch) != 1:
239
+ raise CNPJError(f'Invalid character {ch!r}: must be a single character')
240
+ if not ch.isalnum():
241
+ raise CNPJError(f'Invalid character {ch!r}: must be alphanumeric')
242
+ return ord(ch.upper()) - 48
243
+
244
+ def _calc_dv(self, payload: str, weights: tuple[int, ...]) -> str:
245
+ """
246
+ Calculates a single check digit (DV) using the modulo 11 algorithm.
247
+
248
+ Args:
249
+ payload (str): The input string for which the check digit is to be calculated.
250
+ weights (tuple[int, ...]): A tuple of integer weights to be applied to each character in the payload.
251
+
252
+ Returns:
253
+ str: The calculated check digit as a string. Returns '0' if the result is less than 2, otherwise returns (11 - result) as a string.
254
+
255
+ Note:
256
+ This is an internal method used for check digit calculation in Brazilian document validation.
257
+ """
258
+ total = sum(self._ascii48_value(ch) * w for ch, w in zip(payload, weights))
259
+ result = total % 11
260
+ return '0' if result < 2 else str(11 - result)
261
+
262
+ def _calc_dvs_from_base(self, base: str) -> str:
263
+ """
264
+ Calculates and returns the two check digits (DVs) for a given 12-character CNPJ base string.
265
+
266
+ Args:
267
+ base (str): A 12-character alphanumeric string representing the CNPJ base.
268
+
269
+ Returns:
270
+ str: The two calculated check digits concatenated as a string.
271
+
272
+ Raises:
273
+ CNPJError: If the base is not exactly 12 alphanumeric characters.
274
+ """
275
+ if len(base) != CNPJ_BASE_LENGTH.default or not all(ch.isalnum() for ch in base):
276
+ raise CNPJError('Base must be exactly 12 alphanumeric characters')
277
+ dv1 = self._calc_dv(base, WEIGHTS_DV1.default)
278
+ dv2 = self._calc_dv(f'{base}{dv1}', WEIGHTS_DV2.default)
279
+ return f'{dv1}{dv2}'
280
+
281
+ def is_valid(self, check_dv: bool = False) -> bool:
282
+ """
283
+ Validate a *sanitized* CNPJ (14 chars).
284
+ If instantiated with an unsanitized CNPJ, call self.sanitize() first.
285
+
286
+ Parameters
287
+ ----------
288
+ check_dv : bool, default=False
289
+ If False, only structural checks are performed.
290
+ If True, structural + DV check (módulo 11 with ASCII-48 mapping).
291
+
292
+ Returns
293
+ -------
294
+ bool
295
+ True if valid, else False.
296
+ """
297
+ if not isinstance(self.cnpj, str) or len(self.cnpj) != CNPJ_LENGTH.default:
298
+ return False
299
+
300
+ base, dvs = self.cnpj[: CNPJ_BASE_LENGTH.default], self.cnpj[CNPJ_BASE_LENGTH.default :]
301
+
302
+ if not dvs.isdigit():
303
+ return False
304
+
305
+ if not re.fullmatch(rf'{BASE_VALUES_REGEX}{{{CNPJ_BASE_LENGTH.default}}}', base):
306
+ return False
307
+
308
+ if not check_dv:
309
+ return True
310
+
311
+ try:
312
+ return dvs == self._calc_dvs_from_base(base)
313
+ except CNPJError:
314
+ return False
315
+
316
+ def format(self, errors: str = 'raise') -> str | None:
317
+ """
318
+ Format a CNPJ as 'AA.AAA.AAA/AAAA-DD'.
319
+
320
+ Delegates parsing to cls.normalize().
321
+
322
+ Parameters
323
+ ----------
324
+ errors : {'raise', 'coerce', 'ignore'}, default='raise'
325
+ Normalization error behavior.
326
+
327
+ Returns
328
+ -------
329
+ str | None
330
+ Formatted CNPJ, None, or original input.
331
+ """
332
+ self.normalize(zfill=True, errors=errors)
333
+ if self.cnpj is None or not isinstance(self.cnpj, str):
334
+ return self.cnpj
335
+ return f'{self.cnpj[0:2]}.{self.cnpj[2:5]}.{self.cnpj[5:8]}/{self.cnpj[8:12]}-{self.cnpj[12:]}'
336
+
337
+ @staticmethod
338
+ def generate_random(valid_dv: bool = True) -> str:
339
+ """
340
+ Generate a random CNPJ using the new alphanumeric base format.
341
+
342
+ Parameters
343
+ ----------
344
+ valid_dv : bool, default=True
345
+ If True, generate a DV-valid CNPJ.
346
+ If False, generate a structurally valid but DV-invalid CNPJ.
347
+
348
+ Returns
349
+ -------
350
+ str
351
+ Sanitized 14-character CNPJ.
352
+ """
353
+ base = ''.join(random.choice(BASE_VALUES) for _ in range(CNPJ_BASE_LENGTH.default))
354
+
355
+ # To avoid calling cls from a staticmethod, compute using local helpers:
356
+ # We'll re-use the module-level logic through a lightweight inline calc.
357
+ def ascii48_value(ch: str) -> int:
358
+ return ord(ch.upper()) - 48
359
+
360
+ def calc_dv(payload: str, weights: tuple[int, ...]) -> str:
361
+ total = sum(ascii48_value(ch) * w for ch, w in zip(payload, weights))
362
+ rest = total % 11
363
+ return '0' if rest < 2 else str(11 - rest)
364
+
365
+ dv1 = calc_dv(base, WEIGHTS_DV1.default)
366
+ dv2 = calc_dv(f'{base}{dv1}', WEIGHTS_DV2.default)
367
+ dvs = f'{dv1}{dv2}'
368
+
369
+ if valid_dv:
370
+ return CNPJ(f'{base}{dvs}')
371
+
372
+ invalid_second_dv = str((int(dvs[1]) + random.randint(1, 9)) % 10)
373
+ return CNPJ(f'{base}{dvs[0]}{invalid_second_dv}')
@@ -0,0 +1,42 @@
1
+ ###############################################################################
2
+ #
3
+ # (C) Copyright 2026 EVERYSK TECHNOLOGIES
4
+ #
5
+ # This is an unpublished work containing confidential and proprietary
6
+ # information of EVERYSK TECHNOLOGIES. Disclosure, use, or reproduction
7
+ # without authorization of EVERYSK TECHNOLOGIES is prohibited.
8
+ #
9
+ ################################################################################
10
+ import pandas as pd
11
+
12
+ from everysk.sdk.brutils.cnpj import CNPJ
13
+
14
+
15
+ @pd.api.extensions.register_series_accessor('cnpj')
16
+ class CNPJAccessor:
17
+ """
18
+ A pandas accessor class for handling CNPJ (Cadastro Nacional da Pessoa Jurídica) operations on pandas Series.
19
+
20
+ Parameters
21
+ ----------
22
+ pandas_obj : pandas.Series
23
+ The pandas Series object containing CNPJ values.
24
+ """
25
+
26
+ def __init__(self, pandas_obj):
27
+ self._obj = pandas_obj
28
+
29
+ def sanitize(self, zfill: bool = True):
30
+ return self._obj.apply(lambda x: CNPJ(x).sanitize(zfill=zfill))
31
+
32
+ def normalize(self, zfill: bool = False, errors: str = 'raise'):
33
+ return self._obj.apply(lambda x: CNPJ(x).normalize(zfill=zfill, errors=errors))
34
+
35
+ def is_valid(self, check_dv: bool = False):
36
+ return self._obj.apply(lambda x: CNPJ(x).is_valid(check_dv=check_dv))
37
+
38
+ def format(self, errors: str = 'raise'):
39
+ return self._obj.apply(lambda x: CNPJ(x).format(errors=errors))
40
+
41
+ def generate(self, valid_dv: bool = True):
42
+ return self._obj.apply(lambda x: str(CNPJ.generate_random(valid_dv=valid_dv)))
everysk/tests.py CHANGED
@@ -17,6 +17,7 @@ except ModuleNotFoundError as error:
17
17
  raise
18
18
 
19
19
  from everysk.core.tests import *
20
+ from everysk.sdk.brutils.tests import *
20
21
  from everysk.sdk.tests import *
21
22
  from everysk.server.tests import *
22
23
  from everysk.sql.tests import *
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: everysk-lib
3
- Version: 1.9.9
3
+ Version: 1.10.0
4
4
  Summary: Generic lib to share python code on Everysk.
5
5
  License-Expression: LicenseRef-Proprietary
6
6
  Project-URL: Homepage, https://everysk.com/
@@ -19,13 +19,13 @@ Provides-Extra: requests
19
19
  Requires-Dist: certifi==2025.10.5; extra == "requests"
20
20
  Requires-Dist: charset_normalizer==3.4.4; extra == "requests"
21
21
  Requires-Dist: idna==3.11; extra == "requests"
22
- Requires-Dist: urllib3==2.5.0; extra == "requests"
22
+ Requires-Dist: urllib3==2.6.3; extra == "requests"
23
23
  Requires-Dist: requests==2.32.5; extra == "requests"
24
24
  Provides-Extra: firestore
25
25
  Requires-Dist: certifi==2025.10.5; extra == "firestore"
26
26
  Requires-Dist: charset-normalizer==3.3.2; extra == "firestore"
27
27
  Requires-Dist: idna==3.6; extra == "firestore"
28
- Requires-Dist: urllib3==2.5.0; extra == "firestore"
28
+ Requires-Dist: urllib3==2.6.3; extra == "firestore"
29
29
  Requires-Dist: requests==2.32.4; extra == "firestore"
30
30
  Requires-Dist: pyasn1==0.5.1; extra == "firestore"
31
31
  Requires-Dist: pyasn1-modules==0.3.0; extra == "firestore"
@@ -47,7 +47,7 @@ Provides-Extra: tasks
47
47
  Requires-Dist: certifi==2025.10.5; extra == "tasks"
48
48
  Requires-Dist: charset-normalizer==3.3.2; extra == "tasks"
49
49
  Requires-Dist: idna==3.6; extra == "tasks"
50
- Requires-Dist: urllib3==2.5.0; extra == "tasks"
50
+ Requires-Dist: urllib3==2.6.3; extra == "tasks"
51
51
  Requires-Dist: requests==2.32.4; extra == "tasks"
52
52
  Requires-Dist: pyasn1==0.5.1; extra == "tasks"
53
53
  Requires-Dist: pyasn1-modules==0.3.0; extra == "tasks"
@@ -2,7 +2,7 @@ everysk/__init__.py,sha256=JeZGK9kmTaBRR6H4et-3UYE6x8D7xsFtrTnJ_tQXG_Q,1039
2
2
  everysk/_version.py,sha256=_OPcym8X5j0fiafJLlKp8ADhMP5pHKqD2YySbH9f1PY,24501
3
3
  everysk/config.py,sha256=PKwYhzgBUIQ2m_cS5muBRWssZa4I3B6D5Qa9eSqAu18,16653
4
4
  everysk/settings.py,sha256=Z_wPLDcAxjd6gW2lH6J8n6Q2j-x3V_AJGJmR5NapzBo,4008
5
- everysk/tests.py,sha256=-btpbhDDF2CGIIDr4vra38HrSu7kXrV3o9Hgci90lNc,844
5
+ everysk/tests.py,sha256=MlZ4_IXk639-tyTtmdWWMJD98bPK0eunRFCPZopj2fs,884
6
6
  everysk/utils.py,sha256=nejrDn5n75YBk3BinEiDY5JhhdB7BaHX_9wpJ20RvXs,2654
7
7
  everysk/version.py,sha256=q8j2yDrdm4lEtGtOIt4tY4TUlctwQYJJcVqscDabikA,617
8
8
  everysk/api/__init__.py,sha256=nD4G5flQ8gbgmIVk7Ap-dktnJdiIMj45QnKxMKAPeAA,2250
@@ -68,13 +68,15 @@ everysk/sdk/base.py,sha256=aOhguqj-WfyHYm_qO5G675JdF5iJKf6x0Abt4jYKb_8,3668
68
68
  everysk/sdk/settings.py,sha256=S9l3ZwC6jZwTvr_bnQtvwXJSKFsRF7yKj2btptd3abs,3147
69
69
  everysk/sdk/tests.py,sha256=pZPSxu2roMCLFWHhnZFCSlA4nv_mFkwqNBkDsVfZ8GU,7611
70
70
  everysk/sdk/worker_base.py,sha256=31zDyLtttU25h2kNbwk4yn0tTxHaIc_Ysq5Grm9A9d8,1555
71
+ everysk/sdk/brutils/cnpj.py,sha256=Dh3zcBiQoWm8gI5mV_-dv4a35Z0D8lSMGDcbCkdk3DE,12852
72
+ everysk/sdk/brutils/cnpj_pd.py,sha256=7NwIbIq2zupneAblxs2caspzNcdQcwdkDMyAGvgw7SU,1524
71
73
  everysk/sdk/engines/__init__.py,sha256=1v06RoWC4qfxkfUdbQGF3yCuskXjrvbb_yF_6XCpO5E,1153
72
74
  everysk/sdk/engines/cache.py,sha256=uCFfBVfEyjHRxTNiPXMFehPWaq8k0DbQ50f40JHt4Qg,6580
73
75
  everysk/sdk/engines/compliance.py,sha256=Kd2buYlcKfUHEGmeZrGgT2JOnC7p12UOlDwFS69ssEM,1432
74
76
  everysk/sdk/engines/cryptography.py,sha256=y07mfKbNDK86j4CnfmqqdL2KWBf0s6WN7xjuL-iS6g4,2111
75
- everysk/sdk/engines/expression.cp312-win_amd64.pyd,sha256=RifAHQfZTCKFBlZVnRNMYRHy3_2DJ1IC7zfxg-F2ssk,3871232
77
+ everysk/sdk/engines/expression.cp312-win_amd64.pyd,sha256=9sB990zC-eAuff0x8ZC3l5uCA_osv7IGolW4iasijFU,3871232
76
78
  everysk/sdk/engines/expression.pyi,sha256=ghE_B4tua8hqo7IahSWxl_5fJ_ONF8RVMgSM4Hf_NpU,1265
77
- everysk/sdk/engines/helpers.cp312-win_amd64.pyd,sha256=T9YoMuEy3QS_esLPL-n2aQ_W7BMp79gO_7qSvvTcuy4,1008128
79
+ everysk/sdk/engines/helpers.cp312-win_amd64.pyd,sha256=BF3lAXt7ofk_OWdcwm0Uw_j0Z_RzK2nF5HuFTIrHwwg,1008128
78
80
  everysk/sdk/engines/helpers.pyi,sha256=CIcomtg79QWisRscba-Trs0X4tOlMT1gxykZjM90KYA,482
79
81
  everysk/sdk/engines/lock.py,sha256=rPFY3e2hrKiRyFE0iHAuMad7Cv0KQBJsF9SbZcx43D0,4709
80
82
  everysk/sdk/engines/market_data.py,sha256=lyMl_IOAEobFzzo6Jrtxa9ht95BJEmTUR6bXkLGaZLM,9426
@@ -127,9 +129,9 @@ everysk/sql/query.py,sha256=yO2EoGoUoGace_9BNKN8jeyFV30yCrAhefAvGHqIFE4,14174
127
129
  everysk/sql/row_factory.py,sha256=FEtB4d12ACT3Bp6g2k_Ty2p2HpTkPoVqODUS1_kSXys,1936
128
130
  everysk/sql/settings.py,sha256=g5ZVm4Y3fhWGeXgTW6D309waGRBx2S6Ima4nY6ByTZw,2103
129
131
  everysk/sql/utils.py,sha256=Hbk9INEcz12FoBeDvHh9qh0dTSmTCWAn_S1anJOJb1o,4327
130
- everysk_lib-1.9.9.dist-info/licenses/LICENSE.txt,sha256=Q5YxWA62m0TsmpEmHeoRHg4oPu_8ektkZ3FWWm1pQWo,311
131
- everysk_lib-1.9.9.dist-info/.gitignore,sha256=0A1r9HzLhR7IQ1rGPjbaW5HC6oIQ7xzVYZ1z1ZaVfmw,183
132
- everysk_lib-1.9.9.dist-info/METADATA,sha256=Utqr_mw3nu2te_oDJd01j7XEwULl03T2_VT6GjNi27Y,13406
133
- everysk_lib-1.9.9.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
134
- everysk_lib-1.9.9.dist-info/top_level.txt,sha256=1s1Lfhd4gXolqzkh-ay3yy-EZKPiKnJfbZwx2fybxyk,14
135
- everysk_lib-1.9.9.dist-info/RECORD,,
132
+ everysk_lib-1.10.0.dist-info/licenses/LICENSE.txt,sha256=Q5YxWA62m0TsmpEmHeoRHg4oPu_8ektkZ3FWWm1pQWo,311
133
+ everysk_lib-1.10.0.dist-info/.gitignore,sha256=0A1r9HzLhR7IQ1rGPjbaW5HC6oIQ7xzVYZ1z1ZaVfmw,183
134
+ everysk_lib-1.10.0.dist-info/METADATA,sha256=D9ce4vT0AE0HhRR973hNbOfp0QKx31RQIJCtOZzSSEU,13407
135
+ everysk_lib-1.10.0.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
136
+ everysk_lib-1.10.0.dist-info/top_level.txt,sha256=1s1Lfhd4gXolqzkh-ay3yy-EZKPiKnJfbZwx2fybxyk,14
137
+ everysk_lib-1.10.0.dist-info/RECORD,,