everysk-lib 1.9.8__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.
everysk/sql/query.py CHANGED
@@ -8,12 +8,29 @@
8
8
  #
9
9
  ###############################################################################
10
10
  import hashlib
11
+ from functools import partial
11
12
 
12
- from psqlpy.extra_types import JSONB, Text
13
+ from psycopg.types.json import Jsonb, set_json_dumps, set_json_loads
13
14
 
14
15
  from everysk.core.object import BaseDict
16
+ from everysk.core.serialize import dumps, loads
15
17
  from everysk.sql.utils import ConditionOperator
16
18
 
19
+ # https://www.psycopg.org/psycopg3/docs/basic/adapt.html#json-adaptation
20
+ set_json_dumps(
21
+ partial(
22
+ dumps,
23
+ add_class_path=True,
24
+ date_format='%Y-%m-%d',
25
+ datetime_format='%Y-%m-%dT%H:%M:%S',
26
+ indent=None,
27
+ separators=(',', ':'),
28
+ use_undefined=True,
29
+ )
30
+ )
31
+ set_json_loads(partial(loads, use_undefined=True, instantiate_object=True))
32
+
33
+
17
34
  ## Constants
18
35
  _SQL_FIELDS = {
19
36
  'bool': 'BOOLEAN',
@@ -42,7 +59,7 @@ _SQL_CREATE_SCHEMA = 'CREATE SCHEMA IF NOT EXISTS "{schema}"'
42
59
  _SQL_CREATE_TABLE = 'CREATE TABLE IF NOT EXISTS "{schema}"."{table}" ({fields})'
43
60
 
44
61
  # https://www.postgresqltutorial.com/postgresql-delete/
45
- _SQL_DELETE = 'DELETE FROM "{schema}"."{table}" WHERE "{primary_key}" = ANY($(ids)p)'
62
+ _SQL_DELETE = 'DELETE FROM "{schema}"."{table}" WHERE "{primary_key}" = ANY(%(ids)s)'
46
63
 
47
64
  # https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-upsert/
48
65
  # https://stackoverflow.com/a/30917361
@@ -201,11 +218,13 @@ class Query:
201
218
 
202
219
  try:
203
220
  offset = int(offset)
204
- except (ValueError, TypeError):
205
- raise TypeError('Offset must be an integer or a string representing it.')
221
+ except (ValueError, TypeError) as error:
222
+ msg = 'Offset must be an integer or a string representing it.'
223
+ raise TypeError(msg) from error
206
224
 
207
225
  if offset < 0:
208
- raise TypeError('Offset must not be negative.')
226
+ msg = 'Offset must not be negative.'
227
+ raise TypeError(msg)
209
228
 
210
229
  if offset == 0:
211
230
  return ''
@@ -296,7 +315,7 @@ class Query:
296
315
  """
297
316
  # Create the values string
298
317
  # We do not use " here because we are using the values as placeholders
299
- values = ', '.join(f'$({field})p' for field in fields)
318
+ values = ', '.join(f'%({field})s' for field in fields)
300
319
 
301
320
  # Create the SQL query
302
321
  update = ', '.join(f'"{field}" = EXCLUDED."{field}"' for field in fields)
@@ -320,17 +339,14 @@ class Query:
320
339
  Args:
321
340
  params (dict): A dictionary of parameters to prepare.
322
341
  """
323
- # https://psqlpy-python.github.io/usage/types/extra_types.html
342
+ # https://www.psycopg.org/psycopg3/docs/basic/adapt.html#json-adaptation
324
343
  for key, value in params.items():
325
344
  if isinstance(value, (set, tuple)):
326
- params[key] = JSONB(list(value))
327
- elif isinstance(value, list):
328
- params[key] = JSONB(value)
345
+ params[key] = Jsonb(list(value))
346
+ elif isinstance(value, (dict, list)):
347
+ params[key] = Jsonb(value)
329
348
  elif isinstance(value, BaseDict):
330
- params[key] = JSONB(value.to_dict())
331
- elif isinstance(value, str):
332
- # Text is needed to differentiate between VARCHAR and TEXT
333
- params[key] = Text(value)
349
+ params[key] = Jsonb(value.to_dict())
334
350
 
335
351
  return params
336
352
 
@@ -0,0 +1,63 @@
1
+ ###############################################################################
2
+ #
3
+ # (C) Copyright 2025 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
+ from collections.abc import Callable, Iterable
11
+ from typing import Any
12
+
13
+ from psycopg import Cursor
14
+ from psycopg.rows import _get_names, no_result
15
+
16
+
17
+ def cls_row(cls: type, loads: Callable | None = None) -> Callable:
18
+ """
19
+ Function to convert a row from a cursor to an instance of the specified class.
20
+
21
+ Args:
22
+ cls (type): The class to instantiate for each row.
23
+ loads (callable | None, optional): Optional function to process each value. Defaults to None.
24
+ """
25
+
26
+ def inner(cursor: Cursor) -> Callable:
27
+ names = _get_names(cursor)
28
+ if names is None:
29
+ return no_result
30
+
31
+ def cls_row_(values: Iterable) -> Any:
32
+ if loads is None:
33
+ return cls(**dict(zip(names, values, strict=True)))
34
+
35
+ return cls(**dict(zip(names, map(loads, values), strict=True)))
36
+
37
+ return cls_row_
38
+
39
+ return inner
40
+
41
+
42
+ def dict_row(loads: Callable | None = None) -> Callable:
43
+ """
44
+ Function to convert a row from a cursor to a dictionary.
45
+
46
+ Args:
47
+ loads (Callable | None): Optional function to process each value. Defaults to None.
48
+ """
49
+
50
+ def inner(cursor: Cursor) -> Callable:
51
+ names = _get_names(cursor)
52
+ if names is None:
53
+ return no_result
54
+
55
+ def dict_row_(values: Iterable) -> dict[str, Any]:
56
+ if loads is None:
57
+ return dict(zip(names, values, strict=True))
58
+
59
+ return dict(zip(names, map(loads, values), strict=True))
60
+
61
+ return dict_row_
62
+
63
+ return inner
everysk/sql/settings.py CHANGED
@@ -17,6 +17,29 @@ POSTGRESQL_CONNECTION_PASSWORD: str = None
17
17
  POSTGRESQL_CONNECTION_PORT: int = 5432
18
18
  POSTGRESQL_CONNECTION_HOST: str = None
19
19
  POSTGRESQL_CONNECTION_USER: str = None
20
- # Disable, Allow, Prefer, Require, VerifyCA, VerifyFull
21
- POSTGRESQL_CONNECTION_ENCRYPTION: str = 'Prefer'
22
20
  POSTGRESQL_POOL_MAX_SIZE: int = 10
21
+ POSTGRESQL_POOL_MIN_SIZE: int = 1
22
+
23
+ # https://www.psycopg.org/psycopg3/docs/api/pool.html
24
+ # Maximum time, in seconds, that a connection can stay unused in the pool before being closed, and the pool shrunk.
25
+ # This only happens to connections more than min_size, if max_size allowed the pool to grow.
26
+ POSTGRESQL_POOL_MAX_IDLE: int = 60 * 5 # 5 minutes
27
+
28
+ # The maximum lifetime of a connection in the pool, in seconds. Connections used for longer get closed and replaced by
29
+ # a new one. The amount is reduced by a random 10% to avoid mass eviction.
30
+ POSTGRESQL_POOL_MAX_LIFETIME: int = 60 * 30 # 30 minutes
31
+
32
+ # Maximum number of requests that can be queued to the pool, after which new requests will fail.
33
+ # Raising TooManyRequests, 0 means no queue limit.
34
+ POSTGRESQL_POOL_MAX_WAITING: int = 0
35
+
36
+ # If the connections are opened on init or later.
37
+ POSTGRESQL_POOL_OPEN: bool = True
38
+
39
+ # Maximum time, in seconds, the pool will try to create a connection. If a connection attempt fails, the pool will try
40
+ # to reconnect a few times, using an exponential backoff and some random factor to avoid mass attempts.
41
+ POSTGRESQL_POOL_RECONNECT_TIMEOUT: int = 60 * 2 # 2 minutes
42
+
43
+ # The default maximum time in seconds that a client can wait to receive a connection
44
+ # from the pool (using connection() or getconn()).
45
+ POSTGRESQL_POOL_TIMEOUT: int = 30 # 30 seconds
everysk/sql/utils.py CHANGED
@@ -17,6 +17,7 @@ _SQL_OPERATORS = {
17
17
  'ilike': 'ILIKE',
18
18
  'in': 'IN',
19
19
  'inside': '?',
20
+ 'insidebinary': '?|',
20
21
  'isnotnull': 'IS NOT NULL',
21
22
  'isnull': 'IS NULL',
22
23
  'like': 'LIKE',
@@ -58,8 +59,8 @@ class ConditionOperator:
58
59
 
59
60
  ## Operators methods
60
61
  def _operator_default(self) -> tuple[str, Any]:
61
- """Default operator method "field" <operator> $(field)p."""
62
- operation = f'{self.sql_operator} $({self.field_operator})p'
62
+ """Default operator method "field" <operator> %(field)s."""
63
+ operation = f'{self.sql_operator} %({self.field_operator})s'
63
64
  sql = f'"{self.field}" {operation}'
64
65
  return sql, self.value
65
66
 
@@ -69,9 +70,9 @@ class ConditionOperator:
69
70
  return sql, f'%{value}'
70
71
 
71
72
  def _operator_in(self) -> tuple[str, list]:
72
- """Operator method for in: "field" = ANY($(field__in)p)."""
73
+ """Operator method for in: "field" = ANY(%(field__in)s)."""
73
74
  # https://www.psycopg.org/psycopg3/docs/basic/from_pg2.html#you-cannot-use-in-s-with-a-tuple
74
- operation = f'ANY($({self.field_operator})p)'
75
+ operation = f'ANY(%({self.field_operator})s)'
75
76
  sql = f'"{self.field}" = {operation}'
76
77
  if isinstance(self.value, str):
77
78
  return sql, self.value.split(',')
@@ -98,8 +99,8 @@ class ConditionOperator:
98
99
  return self._operator_like()
99
100
 
100
101
  def _operator_nin(self) -> tuple[str, list]:
101
- """Operator method for nin: "field" != ALL($(field__nin)p)."""
102
- operation = f'ALL($({self.field_operator})p)'
102
+ """Operator method for nin: "field" != ALL(%(field__nin)s)."""
103
+ operation = f'ALL(%({self.field_operator})s)'
103
104
  sql = f'"{self.field}" != {operation}'
104
105
  if isinstance(self.value, str):
105
106
  return sql, self.value.split(',')
@@ -119,7 +120,7 @@ class ConditionOperator:
119
120
  Example:
120
121
  field__operator = 'age__gt'
121
122
  value = 30
122
- returns: ('"age" > $(age__gt)p', 30)
123
+ returns: ('"age" > %(age__gt)s', 30)
123
124
  """
124
125
  method_name = f'_operator_{self.operator}'
125
126
  if hasattr(self, method_name):
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.8
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"
@@ -115,7 +115,9 @@ Requires-Dist: lark==1.2.2; extra == "expression"
115
115
  Requires-Dist: numpy==1.26.4; extra == "expression"
116
116
  Requires-Dist: pandas==2.1.4; extra == "expression"
117
117
  Provides-Extra: postgresql
118
- Requires-Dist: psqlpy==0.11.9; extra == "postgresql"
118
+ Requires-Dist: psycopg-binary==3.3.0; extra == "postgresql"
119
+ Requires-Dist: psycopg-pool==3.3.0; extra == "postgresql"
120
+ Requires-Dist: psycopg==3.3.0; extra == "postgresql"
119
121
  Dynamic: license-file
120
122
 
121
123
 
@@ -1,8 +1,8 @@
1
1
  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
- everysk/settings.py,sha256=sU051hpzszM0SgZzn4vAOhEuEU_j9rEU7Gv9nWx1aEg,3936
5
- everysk/tests.py,sha256=-btpbhDDF2CGIIDr4vra38HrSu7kXrV3o9Hgci90lNc,844
4
+ everysk/settings.py,sha256=Z_wPLDcAxjd6gW2lH6J8n6Q2j-x3V_AJGJmR5NapzBo,4008
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
@@ -37,12 +37,13 @@ everysk/core/log.py,sha256=qFRW9bO6jaELwrJ0MIaEUm2-uYFIyTbH2bQ3j0XpPio,30239
37
37
  everysk/core/number.py,sha256=Al_9LLu7hj_4fTLPTiN3dzQvxctmMxB5i9I4Z4X5Lro,1204
38
38
  everysk/core/object.py,sha256=9XMSPDlgLtGTKJLVimRIND4a7U1e_rZrERJGZw2j_lQ,53924
39
39
  everysk/core/redis.py,sha256=HrG58dc_3EHnti2sBaijcyN8Hq4u3p1zst6-CSK9ySQ,36664
40
+ everysk/core/retry.py,sha256=wLU0fNKP7cNYKkYxMTjR--YFYM0ahXWP-39O_FObwfo,1897
40
41
  everysk/core/serialize.py,sha256=8P5C7V98tB9vAQBEdu0NqMt8lktsD-Ol5REpTG1vNlw,25155
41
42
  everysk/core/sftp.py,sha256=01_iDxqhcAO3FFKUp-8myV7qtf3I-Mi_cLZ6KrAfsGw,15600
42
43
  everysk/core/signing.py,sha256=vImkFEiunqD-oO3e9Oi88z0x0jEEfO1lDIbC9RYxTn8,1956
43
44
  everysk/core/slack.py,sha256=r9QH6RRe74Jz4-8XWLqbYq21msIlsVuC4fr_VUMFZPE,4394
44
45
  everysk/core/string.py,sha256=K1BRlRNuhqlI7gdqOi40hjTHuxm1fF-RLqIAwm74eHc,5456
45
- everysk/core/tests.py,sha256=8zTef-BgIeMkV8QxWh-OEZy3wgJhVIRLNq9zj0VRg9E,11486
46
+ everysk/core/tests.py,sha256=qrfAfUDmgCvBn99X73fL5MUTo1P33gq0ftP5CTJetCc,14491
46
47
  everysk/core/threads.py,sha256=CcL4Nv2Zzdxt1xjo0CbLSttSU29xHgSRiWF_JXr3GAA,7167
47
48
  everysk/core/undefined.py,sha256=sNvP9qJJi3TINPSJiIWjqKz4o5DNBBYparoTRrDtJ_0,2757
48
49
  everysk/core/unittests.py,sha256=ujGqGHCUAI25P4UgwHn9GpZAMBdqZ-lxxGERrckthIM,3289
@@ -67,13 +68,15 @@ everysk/sdk/base.py,sha256=aOhguqj-WfyHYm_qO5G675JdF5iJKf6x0Abt4jYKb_8,3668
67
68
  everysk/sdk/settings.py,sha256=S9l3ZwC6jZwTvr_bnQtvwXJSKFsRF7yKj2btptd3abs,3147
68
69
  everysk/sdk/tests.py,sha256=pZPSxu2roMCLFWHhnZFCSlA4nv_mFkwqNBkDsVfZ8GU,7611
69
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
70
73
  everysk/sdk/engines/__init__.py,sha256=1v06RoWC4qfxkfUdbQGF3yCuskXjrvbb_yF_6XCpO5E,1153
71
74
  everysk/sdk/engines/cache.py,sha256=uCFfBVfEyjHRxTNiPXMFehPWaq8k0DbQ50f40JHt4Qg,6580
72
75
  everysk/sdk/engines/compliance.py,sha256=Kd2buYlcKfUHEGmeZrGgT2JOnC7p12UOlDwFS69ssEM,1432
73
76
  everysk/sdk/engines/cryptography.py,sha256=y07mfKbNDK86j4CnfmqqdL2KWBf0s6WN7xjuL-iS6g4,2111
74
- everysk/sdk/engines/expression.cp312-win_amd64.pyd,sha256=HNMtAqqEru10u5OtI-6dDqFFHJgJz0rgj5ZlBC1HPVc,3871232
77
+ everysk/sdk/engines/expression.cp312-win_amd64.pyd,sha256=9sB990zC-eAuff0x8ZC3l5uCA_osv7IGolW4iasijFU,3871232
75
78
  everysk/sdk/engines/expression.pyi,sha256=ghE_B4tua8hqo7IahSWxl_5fJ_ONF8RVMgSM4Hf_NpU,1265
76
- everysk/sdk/engines/helpers.cp312-win_amd64.pyd,sha256=-UOTT3fZ2C3mfXTCTxKnuTCqquKrp-pkAECap-Nw--s,1008128
79
+ everysk/sdk/engines/helpers.cp312-win_amd64.pyd,sha256=BF3lAXt7ofk_OWdcwm0Uw_j0Z_RzK2nF5HuFTIrHwwg,1008128
77
80
  everysk/sdk/engines/helpers.pyi,sha256=CIcomtg79QWisRscba-Trs0X4tOlMT1gxykZjM90KYA,482
78
81
  everysk/sdk/engines/lock.py,sha256=rPFY3e2hrKiRyFE0iHAuMad7Cv0KQBJsF9SbZcx43D0,4709
79
82
  everysk/sdk/engines/market_data.py,sha256=lyMl_IOAEobFzzo6Jrtxa9ht95BJEmTUR6bXkLGaZLM,9426
@@ -120,14 +123,15 @@ everysk/server/routing.py,sha256=tHmmokv8msPY37T9F9_lovLZ9NP8bC8G_kxV92aM-tg,242
120
123
  everysk/server/settings.py,sha256=C9nM3PYZQOKjq9KB2DB4ojGkkTJtj5pslWrUdMGYEwk,1309
121
124
  everysk/server/tests.py,sha256=caw6jaXM0xjdi7Y10JpqUTCyUrUmKpG3uxigLcVRdew,1885
122
125
  everysk/sql/__init__.py,sha256=lXZAWXrI2tlzw9uvJyThaWnksZqdbemQ2tqe-e7wUiU,413
123
- everysk/sql/connection.py,sha256=uFp4EEsc4fX2rnmvQsHTpLZnWiUf1fpt4FSSZvPYhdk,5718
124
- everysk/sql/model.py,sha256=AzhGSYq9o_ekmpKmDcD6-9FEghd3_JzOiqGbapqhm_A,14756
125
- everysk/sql/query.py,sha256=vybpvTI4oieI6b9uGCPkRnb1YgZ3sNKOyzemKOHroaA,13757
126
- everysk/sql/settings.py,sha256=aQ6z1ZYtulmqwA4G7u-jx_OV_4IWPNgv5r9sfNWNh3A,864
127
- everysk/sql/utils.py,sha256=Or2Cs4wVp6fKQXuGP7e_bPvc88pP-PZ3AoSEDT7G_dA,4301
128
- everysk_lib-1.9.8.dist-info/licenses/LICENSE.txt,sha256=Q5YxWA62m0TsmpEmHeoRHg4oPu_8ektkZ3FWWm1pQWo,311
129
- everysk_lib-1.9.8.dist-info/.gitignore,sha256=0A1r9HzLhR7IQ1rGPjbaW5HC6oIQ7xzVYZ1z1ZaVfmw,183
130
- everysk_lib-1.9.8.dist-info/METADATA,sha256=gHfW4VXcvifo9ioAYH3Qf0qnozDfDLWnyNiyZ6jbFZc,13286
131
- everysk_lib-1.9.8.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
132
- everysk_lib-1.9.8.dist-info/top_level.txt,sha256=1s1Lfhd4gXolqzkh-ay3yy-EZKPiKnJfbZwx2fybxyk,14
133
- everysk_lib-1.9.8.dist-info/RECORD,,
126
+ everysk/sql/connection.py,sha256=PujKm1i5gAvxU_FVT7IDuMb38D52dII52Gk8RI0vC_0,7928
127
+ everysk/sql/model.py,sha256=syHHTTS4JRTj_2Mu9ugmMu4b6qUY12t3VgfE3hSxYIc,14559
128
+ everysk/sql/query.py,sha256=yO2EoGoUoGace_9BNKN8jeyFV30yCrAhefAvGHqIFE4,14174
129
+ everysk/sql/row_factory.py,sha256=FEtB4d12ACT3Bp6g2k_Ty2p2HpTkPoVqODUS1_kSXys,1936
130
+ everysk/sql/settings.py,sha256=g5ZVm4Y3fhWGeXgTW6D309waGRBx2S6Ima4nY6ByTZw,2103
131
+ everysk/sql/utils.py,sha256=Hbk9INEcz12FoBeDvHh9qh0dTSmTCWAn_S1anJOJb1o,4327
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,,