everysk-lib 1.10.2__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/__init__.py +30 -0
- everysk/_version.py +683 -0
- everysk/api/__init__.py +61 -0
- everysk/api/api_requestor.py +167 -0
- everysk/api/api_resources/__init__.py +23 -0
- everysk/api/api_resources/api_resource.py +371 -0
- everysk/api/api_resources/calculation.py +779 -0
- everysk/api/api_resources/custom_index.py +42 -0
- everysk/api/api_resources/datastore.py +81 -0
- everysk/api/api_resources/file.py +42 -0
- everysk/api/api_resources/market_data.py +223 -0
- everysk/api/api_resources/parser.py +66 -0
- everysk/api/api_resources/portfolio.py +43 -0
- everysk/api/api_resources/private_security.py +42 -0
- everysk/api/api_resources/report.py +65 -0
- everysk/api/api_resources/report_template.py +39 -0
- everysk/api/api_resources/tests.py +115 -0
- everysk/api/api_resources/worker_execution.py +64 -0
- everysk/api/api_resources/workflow.py +65 -0
- everysk/api/api_resources/workflow_execution.py +93 -0
- everysk/api/api_resources/workspace.py +42 -0
- everysk/api/http_client.py +63 -0
- everysk/api/tests.py +32 -0
- everysk/api/utils.py +262 -0
- everysk/config.py +451 -0
- everysk/core/_tests/serialize/test_json.py +336 -0
- everysk/core/_tests/serialize/test_orjson.py +295 -0
- everysk/core/_tests/serialize/test_pickle.py +48 -0
- everysk/core/cloud_function/main.py +78 -0
- everysk/core/cloud_function/tests.py +86 -0
- everysk/core/compress.py +245 -0
- everysk/core/datetime/__init__.py +12 -0
- everysk/core/datetime/calendar.py +144 -0
- everysk/core/datetime/date.py +424 -0
- everysk/core/datetime/date_expression.py +299 -0
- everysk/core/datetime/date_mixin.py +1475 -0
- everysk/core/datetime/date_settings.py +30 -0
- everysk/core/datetime/datetime.py +713 -0
- everysk/core/exceptions.py +435 -0
- everysk/core/fields.py +1176 -0
- everysk/core/firestore.py +555 -0
- everysk/core/fixtures/_settings.py +29 -0
- everysk/core/fixtures/other/_settings.py +18 -0
- everysk/core/fixtures/user_agents.json +88 -0
- everysk/core/http.py +691 -0
- everysk/core/lists.py +92 -0
- everysk/core/log.py +709 -0
- everysk/core/number.py +37 -0
- everysk/core/object.py +1469 -0
- everysk/core/redis.py +1021 -0
- everysk/core/retry.py +51 -0
- everysk/core/serialize.py +674 -0
- everysk/core/sftp.py +414 -0
- everysk/core/signing.py +53 -0
- everysk/core/slack.py +127 -0
- everysk/core/string.py +199 -0
- everysk/core/tests.py +240 -0
- everysk/core/threads.py +199 -0
- everysk/core/undefined.py +70 -0
- everysk/core/unittests.py +73 -0
- everysk/core/workers.py +241 -0
- everysk/sdk/__init__.py +23 -0
- everysk/sdk/base.py +98 -0
- everysk/sdk/brutils/cnpj.py +391 -0
- everysk/sdk/brutils/cnpj_pd.py +129 -0
- everysk/sdk/engines/__init__.py +26 -0
- everysk/sdk/engines/cache.py +185 -0
- everysk/sdk/engines/compliance.py +37 -0
- everysk/sdk/engines/cryptography.py +69 -0
- everysk/sdk/engines/expression.cp312-win_amd64.pyd +0 -0
- everysk/sdk/engines/expression.pyi +55 -0
- everysk/sdk/engines/helpers.cp312-win_amd64.pyd +0 -0
- everysk/sdk/engines/helpers.pyi +26 -0
- everysk/sdk/engines/lock.py +120 -0
- everysk/sdk/engines/market_data.py +244 -0
- everysk/sdk/engines/settings.py +19 -0
- everysk/sdk/entities/__init__.py +23 -0
- everysk/sdk/entities/base.py +784 -0
- everysk/sdk/entities/base_list.py +131 -0
- everysk/sdk/entities/custom_index/base.py +209 -0
- everysk/sdk/entities/custom_index/settings.py +29 -0
- everysk/sdk/entities/datastore/base.py +160 -0
- everysk/sdk/entities/datastore/settings.py +17 -0
- everysk/sdk/entities/fields.py +375 -0
- everysk/sdk/entities/file/base.py +215 -0
- everysk/sdk/entities/file/settings.py +63 -0
- everysk/sdk/entities/portfolio/base.py +248 -0
- everysk/sdk/entities/portfolio/securities.py +241 -0
- everysk/sdk/entities/portfolio/security.py +580 -0
- everysk/sdk/entities/portfolio/settings.py +97 -0
- everysk/sdk/entities/private_security/base.py +226 -0
- everysk/sdk/entities/private_security/settings.py +17 -0
- everysk/sdk/entities/query.py +603 -0
- everysk/sdk/entities/report/base.py +214 -0
- everysk/sdk/entities/report/settings.py +23 -0
- everysk/sdk/entities/script.py +310 -0
- everysk/sdk/entities/secrets/base.py +128 -0
- everysk/sdk/entities/secrets/script.py +119 -0
- everysk/sdk/entities/secrets/settings.py +17 -0
- everysk/sdk/entities/settings.py +48 -0
- everysk/sdk/entities/tags.py +174 -0
- everysk/sdk/entities/worker_execution/base.py +307 -0
- everysk/sdk/entities/worker_execution/settings.py +63 -0
- everysk/sdk/entities/workflow_execution/base.py +113 -0
- everysk/sdk/entities/workflow_execution/settings.py +32 -0
- everysk/sdk/entities/workspace/base.py +99 -0
- everysk/sdk/entities/workspace/settings.py +27 -0
- everysk/sdk/settings.py +67 -0
- everysk/sdk/tests.py +105 -0
- everysk/sdk/worker_base.py +47 -0
- everysk/server/__init__.py +9 -0
- everysk/server/applications.py +63 -0
- everysk/server/endpoints.py +516 -0
- everysk/server/example_api.py +69 -0
- everysk/server/middlewares.py +80 -0
- everysk/server/requests.py +62 -0
- everysk/server/responses.py +119 -0
- everysk/server/routing.py +64 -0
- everysk/server/settings.py +36 -0
- everysk/server/tests.py +36 -0
- everysk/settings.py +98 -0
- everysk/sql/__init__.py +9 -0
- everysk/sql/connection.py +232 -0
- everysk/sql/model.py +376 -0
- everysk/sql/query.py +417 -0
- everysk/sql/row_factory.py +63 -0
- everysk/sql/settings.py +49 -0
- everysk/sql/utils.py +129 -0
- everysk/tests.py +23 -0
- everysk/utils.py +81 -0
- everysk/version.py +15 -0
- everysk_lib-1.10.2.dist-info/.gitignore +5 -0
- everysk_lib-1.10.2.dist-info/METADATA +326 -0
- everysk_lib-1.10.2.dist-info/RECORD +137 -0
- everysk_lib-1.10.2.dist-info/WHEEL +5 -0
- everysk_lib-1.10.2.dist-info/licenses/LICENSE.txt +9 -0
- everysk_lib-1.10.2.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,185 @@
|
|
|
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 typing import Any, Iterable
|
|
11
|
+
|
|
12
|
+
from everysk.config import settings
|
|
13
|
+
from everysk.core.fields import IntField, StrField
|
|
14
|
+
from everysk.sdk.base import BaseSDK
|
|
15
|
+
|
|
16
|
+
###############################################################################
|
|
17
|
+
# UserCache Class Implementation
|
|
18
|
+
###############################################################################
|
|
19
|
+
class UserCache(BaseSDK):
|
|
20
|
+
|
|
21
|
+
timeout_default = IntField(default=settings.ENGINES_CACHE_EXECUTION_EXPIRATION_TIME, max=settings.ENGINES_CACHE_EXECUTION_EXPIRATION_TIME)
|
|
22
|
+
prefix = StrField()
|
|
23
|
+
|
|
24
|
+
def _validate_timeout(self, timeout: int) -> None:
|
|
25
|
+
"""
|
|
26
|
+
Validate the timeout value for cache operations.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
timeout (int): The timeout value to validate.
|
|
30
|
+
|
|
31
|
+
Raises:
|
|
32
|
+
ValueError: If the timeout value is not a positive integer or exceeds the default expiration time.
|
|
33
|
+
"""
|
|
34
|
+
if not isinstance(timeout, int) or timeout <= 0 or timeout > settings.ENGINES_CACHE_EXECUTION_EXPIRATION_TIME:
|
|
35
|
+
raise ValueError('Invalid timeout value. The timeout value should be an integer greater than 0 and less than or equal to the default expiration time.')
|
|
36
|
+
|
|
37
|
+
def get(self, key: str) -> Any:
|
|
38
|
+
"""
|
|
39
|
+
Get the value of a key from the cache.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
key (str): The key to get the value of.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
Any: The value of the key.
|
|
46
|
+
|
|
47
|
+
Example:
|
|
48
|
+
>>> cache = UserCache()
|
|
49
|
+
>>> cache.get('key')
|
|
50
|
+
"""
|
|
51
|
+
return self.get_response(self_obj=self, params={'key': key})
|
|
52
|
+
|
|
53
|
+
def get_multi(self, keys: list[str]) -> dict[str, Any]:
|
|
54
|
+
"""
|
|
55
|
+
Get the values of multiple keys from the cache.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
keys (list[str]): The keys to get the values of.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
dict[str, Any]: The values of the keys.
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
>>> cache = UserCache()
|
|
65
|
+
>>> cache.get_multi(['key1', 'key2'])
|
|
66
|
+
{
|
|
67
|
+
'key1': 'value1',
|
|
68
|
+
'key2': 'value2'
|
|
69
|
+
}
|
|
70
|
+
"""
|
|
71
|
+
return self.get_response(self_obj=self, params={'keys': keys})
|
|
72
|
+
|
|
73
|
+
def set(self, key: str, value: Any, timeout: int = settings.ENGINES_CACHE_EXECUTION_EXPIRATION_TIME) -> bool:
|
|
74
|
+
"""
|
|
75
|
+
Set the value of a key in the cache.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
key (str): The key to set the value of.
|
|
79
|
+
value (Any): The value to set.
|
|
80
|
+
timeout (int): The expiration time of the key in seconds.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
bool: True if the key is set, False otherwise.
|
|
84
|
+
|
|
85
|
+
Example:
|
|
86
|
+
>>> cache = UserCache()
|
|
87
|
+
>>> cache.set('key', 'value')
|
|
88
|
+
"""
|
|
89
|
+
self._validate_timeout(timeout)
|
|
90
|
+
return self.get_response(self_obj=self, params={'key': key, 'value': value, 'timeout': timeout})
|
|
91
|
+
|
|
92
|
+
def set_multi(self, data_dict: dict, timeout: int = settings.ENGINES_CACHE_EXECUTION_EXPIRATION_TIME) -> list:
|
|
93
|
+
"""
|
|
94
|
+
Set the values of multiple keys in the cache.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
data_dict (dict): The keys and values to set.
|
|
98
|
+
timeout (int): The expiration time of the keys in seconds.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
list: The keys that are set.
|
|
102
|
+
|
|
103
|
+
Example:
|
|
104
|
+
>>> cache = UserCache()
|
|
105
|
+
>>> cache.set_multi({'key1': 'value1', 'key2': 'value2'})
|
|
106
|
+
['key1', 'key2']
|
|
107
|
+
"""
|
|
108
|
+
self._validate_timeout(timeout)
|
|
109
|
+
return self.get_response(self_obj=self, params={'data_dict': data_dict, 'timeout': timeout})
|
|
110
|
+
|
|
111
|
+
def incr(self, key: str, delta: int = 1, initial_value: Any = None, timeout: int = settings.ENGINES_CACHE_EXECUTION_EXPIRATION_TIME) -> int:
|
|
112
|
+
"""
|
|
113
|
+
Increment the value of a key in the cache.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
key (str): The key to increment the value of.
|
|
117
|
+
delta (int): The amount to increment the value by.
|
|
118
|
+
initial_value (Any): The initial value of the key.
|
|
119
|
+
timeout (int): The expiration time of the key in seconds.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
int: The new value of the key.
|
|
123
|
+
|
|
124
|
+
Example:
|
|
125
|
+
>>> cache = UserCache()
|
|
126
|
+
>>> cache.incr('key', 1, 0)
|
|
127
|
+
1
|
|
128
|
+
"""
|
|
129
|
+
self._validate_timeout(timeout)
|
|
130
|
+
return self.get_response(self_obj=self, params={'key': key, 'delta': delta, 'initial_value': initial_value, 'timeout': timeout})
|
|
131
|
+
|
|
132
|
+
def decr(self, key: str, delta: int = 1, initial_value: Any = None, timeout: int = settings.ENGINES_CACHE_EXECUTION_EXPIRATION_TIME) -> int | None:
|
|
133
|
+
"""
|
|
134
|
+
Decrement the value of a key in the cache.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
key (str): The key to decrement the value of.
|
|
138
|
+
delta (int): The amount to decrement the value by.
|
|
139
|
+
initial_value (Any): The initial value of the key.
|
|
140
|
+
timeout (int): The expiration time of the key in seconds.
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
int: The new value of the key.
|
|
144
|
+
|
|
145
|
+
Example:
|
|
146
|
+
>>> cache = UserCache()
|
|
147
|
+
>>> cache.decr('key', 1, 0)
|
|
148
|
+
0
|
|
149
|
+
"""
|
|
150
|
+
self._validate_timeout(timeout)
|
|
151
|
+
return self.get_response(self_obj=self, params={'key': key, 'delta': delta, 'initial_value': initial_value, 'timeout': timeout})
|
|
152
|
+
|
|
153
|
+
def delete(self, key: bytes | str | Iterable) -> bool:
|
|
154
|
+
"""
|
|
155
|
+
Delete a key from the cache.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
key (bytes | str | Iterable): The key to delete. Can be a single key or an iterable of keys.
|
|
159
|
+
|
|
160
|
+
Returns:
|
|
161
|
+
bool: True if the key is deleted, False otherwise.
|
|
162
|
+
|
|
163
|
+
Example:
|
|
164
|
+
>>> cache = UserCache()
|
|
165
|
+
>>> cache.delete('key')
|
|
166
|
+
True
|
|
167
|
+
"""
|
|
168
|
+
return self.get_response(self_obj=self, params={'key': key})
|
|
169
|
+
|
|
170
|
+
def delete_multi(self, keys: Iterable) -> bool:
|
|
171
|
+
"""
|
|
172
|
+
Delete multiple keys from the cache.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
keys (Iterable): The keys to delete. Can be a list or any iterable of keys.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
bool: True if the keys are deleted, False otherwise.
|
|
179
|
+
|
|
180
|
+
Example:
|
|
181
|
+
>>> cache = UserCache()
|
|
182
|
+
>>> cache.delete_multi(['key1', 'key2'])
|
|
183
|
+
True
|
|
184
|
+
"""
|
|
185
|
+
return self.get_response(self_obj=self, params={'keys': keys})
|
|
@@ -0,0 +1,37 @@
|
|
|
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 everysk.sdk.base import BaseSDK
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
###############################################################################
|
|
14
|
+
# Compliance Class Implementation
|
|
15
|
+
###############################################################################
|
|
16
|
+
class Compliance(BaseSDK):
|
|
17
|
+
|
|
18
|
+
@classmethod
|
|
19
|
+
def check(cls, rules: list, datastore: list, metadata: dict = None) -> dict:
|
|
20
|
+
"""
|
|
21
|
+
Check compliance of data against rules.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
rules (list): The rules to check against.
|
|
25
|
+
datastore (list): The data to check.
|
|
26
|
+
metadata (dict, optional): The metadata to use for checking. Default is None.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
dict: The compliance check result.
|
|
30
|
+
|
|
31
|
+
Example:
|
|
32
|
+
>>> Compliance.check(rules=[{'rule': 'rule1'}, {'rule': 'rule2'}], datastore=[{'data': 'data1'}, {'data': 'data2'}])
|
|
33
|
+
{
|
|
34
|
+
'compliance': True
|
|
35
|
+
}
|
|
36
|
+
"""
|
|
37
|
+
return cls.get_response(params={'rules': rules, 'datastore': datastore, 'metadata': metadata})
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
#
|
|
3
|
+
# (C) Copyright 2023 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 string
|
|
11
|
+
import secrets
|
|
12
|
+
import uuid
|
|
13
|
+
|
|
14
|
+
from everysk.config import settings
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
ALPHANUMERIC = string.ascii_letters + string.digits
|
|
18
|
+
SYMBOL_ID_MAX_LEN = settings.SYMBOL_ID_MAX_LEN
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
###############################################################################
|
|
22
|
+
# Public Functions Implementation
|
|
23
|
+
###############################################################################
|
|
24
|
+
def generate_random_id(length: int, characters: str = ALPHANUMERIC) -> str:
|
|
25
|
+
"""
|
|
26
|
+
Generate a random ID based on the specified length and characters.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
length (int): The desired length for the random ID.
|
|
30
|
+
characters (str, optional): The characters to use for generating the ID.
|
|
31
|
+
Default is alphanumeric characters.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
str: The generated random ID consisting of the specified characters.
|
|
35
|
+
|
|
36
|
+
Example:
|
|
37
|
+
>>> generate_random_id(18)
|
|
38
|
+
'xiXwQuig6cI11ny095'
|
|
39
|
+
|
|
40
|
+
>>> generate_random_id(5, 'abc')
|
|
41
|
+
'cbacb'
|
|
42
|
+
"""
|
|
43
|
+
return ''.join(secrets.choice(characters) for i in range(length))
|
|
44
|
+
|
|
45
|
+
def generate_unique_id():
|
|
46
|
+
"""
|
|
47
|
+
Generate a unique ID with fixed length (32 characters).
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
str: The generated unique ID consisting of hexadecimal characters.
|
|
51
|
+
|
|
52
|
+
Example:
|
|
53
|
+
>>> generate_unique_id()
|
|
54
|
+
'dbdc803042ff48e19a344ad080a102dd'
|
|
55
|
+
"""
|
|
56
|
+
return uuid.uuid4().hex
|
|
57
|
+
|
|
58
|
+
def generate_short_random_id() -> str:
|
|
59
|
+
"""
|
|
60
|
+
Generate a random ID with a fixed length of 8 characters.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
str: The generated unique ID consisting of alphanumeric characters.
|
|
64
|
+
|
|
65
|
+
Example:
|
|
66
|
+
>>> generate_short_random_id()
|
|
67
|
+
'u0tmNqHP'
|
|
68
|
+
"""
|
|
69
|
+
return generate_random_id(length=settings.SIMPLE_UNIQUE_ID_LENGTH)
|
|
Binary file
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# This file was generated by Nuitka
|
|
2
|
+
|
|
3
|
+
# Stubs included by default
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
from everysk.sdk.engines.expression.base import ExpressionEngine
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
__name__ = ...
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Modules used internally, to allow implicit dependencies to be seen:
|
|
13
|
+
import os
|
|
14
|
+
import everysk
|
|
15
|
+
import everysk.sdk
|
|
16
|
+
import everysk.sdk.engines
|
|
17
|
+
import typing
|
|
18
|
+
import lark
|
|
19
|
+
import lark.tree
|
|
20
|
+
import everysk.config
|
|
21
|
+
import everysk.core
|
|
22
|
+
import everysk.core.log
|
|
23
|
+
import _frozen_importlib_external
|
|
24
|
+
import functools
|
|
25
|
+
import importlib
|
|
26
|
+
import inspect
|
|
27
|
+
import pkgutil
|
|
28
|
+
import collections
|
|
29
|
+
import collections.abc
|
|
30
|
+
import numpy
|
|
31
|
+
import pandas
|
|
32
|
+
import everysk.core.datetime
|
|
33
|
+
import everysk.core.datetime.Date
|
|
34
|
+
import everysk.core.datetime.DateTime
|
|
35
|
+
import everysk.core.datetime.date_settings
|
|
36
|
+
import everysk.sdk.engines.helpers
|
|
37
|
+
import everysk.sdk.engines.helpers.transform
|
|
38
|
+
import datetime
|
|
39
|
+
import everysk.core.datetime.date_mixin
|
|
40
|
+
import everysk.sdk.engines.helpers.algorithms
|
|
41
|
+
import everysk.sdk.engines.helpers.mathematical
|
|
42
|
+
import collections.OrderedDict
|
|
43
|
+
import everysk.sdk.brutils
|
|
44
|
+
import everysk.sdk.brutils.cnpj
|
|
45
|
+
import everysk.sdk.engines.helpers.formater
|
|
46
|
+
import re
|
|
47
|
+
import unicodedata
|
|
48
|
+
import everysk.sdk.engines.cryptography
|
|
49
|
+
import unittest
|
|
50
|
+
import copy
|
|
51
|
+
import unittest.mock
|
|
52
|
+
import everysk.core.datetime.calendar
|
|
53
|
+
import lark.visitors
|
|
54
|
+
import decimal
|
|
55
|
+
import lark.exceptions
|
|
Binary file
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# This file was generated by Nuitka
|
|
2
|
+
|
|
3
|
+
# Stubs included by default
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
__name__ = ...
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Modules used internally, to allow implicit dependencies to be seen:
|
|
12
|
+
import os
|
|
13
|
+
import pandas
|
|
14
|
+
import numpy
|
|
15
|
+
import math
|
|
16
|
+
import decimal
|
|
17
|
+
import everysk
|
|
18
|
+
import everysk.core
|
|
19
|
+
import everysk.core.datetime
|
|
20
|
+
import everysk.core.datetime.DateTime
|
|
21
|
+
import everysk.sdk
|
|
22
|
+
import everysk.sdk.engines
|
|
23
|
+
import functools
|
|
24
|
+
import typing
|
|
25
|
+
import _frozen_importlib_external
|
|
26
|
+
import unittest
|
|
@@ -0,0 +1,120 @@
|
|
|
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 uuid import uuid1
|
|
11
|
+
|
|
12
|
+
from everysk.config import settings
|
|
13
|
+
from everysk.core.fields import StrField, FloatField, BoolField
|
|
14
|
+
from everysk.core.exceptions import InvalidArgumentError
|
|
15
|
+
from everysk.sdk.base import BaseSDK
|
|
16
|
+
|
|
17
|
+
###############################################################################
|
|
18
|
+
# UserLock Class Implementation
|
|
19
|
+
###############################################################################
|
|
20
|
+
class UserLock(BaseSDK):
|
|
21
|
+
"""
|
|
22
|
+
UserLock class for acquiring and releasing locks.
|
|
23
|
+
This class provides methods to acquire a lock for a given token, release the lock,
|
|
24
|
+
and get information about the lock status.
|
|
25
|
+
It is used to manage locks in a distributed system to
|
|
26
|
+
prevent multiple processes from accessing the same resource simultaneously.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
token (str): The unique identifier for the lock.
|
|
30
|
+
name (str): The name of the lock.
|
|
31
|
+
timeout (int): The expiration time for the lock in seconds.
|
|
32
|
+
|
|
33
|
+
Example:
|
|
34
|
+
>>> user_lock = UserLock(name='my_lock')
|
|
35
|
+
>>> user_lock.acquire()
|
|
36
|
+
UserLock(token='generated_token', name='my_lock', timeout=30)
|
|
37
|
+
>>> user_lock.get_lock_info()
|
|
38
|
+
{'locked': True, 'name': 'my_lock'}
|
|
39
|
+
>>> user_lock.release()
|
|
40
|
+
None
|
|
41
|
+
"""
|
|
42
|
+
token = StrField(default=None)
|
|
43
|
+
name = StrField(default=None, required=True)
|
|
44
|
+
timeout = FloatField(default=settings.USER_CACHE_LOCK_EXPIRATION_TIME, min_size=settings.USER_CACHE_LOCK_MIN_EXPIRATION_TIME, max_size=settings.USER_CACHE_LOCK_MAX_EXPIRATION_TIME)
|
|
45
|
+
blocking = BoolField(default=True) # If True, the lock will block until it can be acquired.
|
|
46
|
+
|
|
47
|
+
def acquire(self, token: str = None, blocking: bool = None, blocking_timeout: float = None) -> bool:
|
|
48
|
+
"""
|
|
49
|
+
Acquire a lock for a given token.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
token (str | None): The token to use for the lock. If None, a new token will be generated.
|
|
53
|
+
blocking (bool | None): If True, wait until the lock is acquired. Defaults to None.
|
|
54
|
+
blocking_timeout (float | None): The maximum number of seconds to wait for the lock. Defaults to None.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
bool: True if the lock was acquired successfully, False otherwise.
|
|
58
|
+
|
|
59
|
+
Example:
|
|
60
|
+
>>> user_lock = UserLock(name='my_lock')
|
|
61
|
+
>>> user_lock.acquire()
|
|
62
|
+
True
|
|
63
|
+
"""
|
|
64
|
+
if not token and not self.token:
|
|
65
|
+
self.token = uuid1().hex
|
|
66
|
+
elif token:
|
|
67
|
+
self.token = token
|
|
68
|
+
|
|
69
|
+
return self.get_response(self_obj=self, params={'token': token, 'blocking': blocking, 'blocking_timeout': blocking_timeout})
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def release(self, force: bool = False) -> None:
|
|
73
|
+
"""
|
|
74
|
+
Release the lock for a given identifier.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
force (bool): If True, force the release of the lock even if it is not owned.
|
|
78
|
+
This will delete the key from Redis. Defaults to False.
|
|
79
|
+
|
|
80
|
+
Example:
|
|
81
|
+
>>> UserLock.release('my_lock')
|
|
82
|
+
None
|
|
83
|
+
"""
|
|
84
|
+
if not self.token:
|
|
85
|
+
raise InvalidArgumentError("Cannot release an unlocked lock")
|
|
86
|
+
|
|
87
|
+
return self.get_response(self_obj=self, params={'force': force})
|
|
88
|
+
|
|
89
|
+
def do_release(self, expected_token: str) -> None:
|
|
90
|
+
"""
|
|
91
|
+
Release the lock for a given token.
|
|
92
|
+
This method is used to release a lock that was previously acquired.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
expected_token (str): The unique token for the lock to release.
|
|
96
|
+
|
|
97
|
+
Example:
|
|
98
|
+
>>> user_lock = UserLock(name='my_lock')
|
|
99
|
+
>>> user_lock.do_release(token='token')
|
|
100
|
+
None
|
|
101
|
+
"""
|
|
102
|
+
if not expected_token:
|
|
103
|
+
raise InvalidArgumentError("Cannot release an unlocked lock")
|
|
104
|
+
|
|
105
|
+
return self.get_response(self_obj=self, params={'expected_token': expected_token})
|
|
106
|
+
|
|
107
|
+
def get_lock_info(self) -> dict:
|
|
108
|
+
"""
|
|
109
|
+
Get information about the lock status.
|
|
110
|
+
This method returns a dictionary containing information about the lock status.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
dict: A dictionary containing the lock status and other information.
|
|
114
|
+
|
|
115
|
+
Example:
|
|
116
|
+
>>> user_lock = UserLock(name='my_lock')
|
|
117
|
+
>>> user_lock.get_lock_info()
|
|
118
|
+
{'locked': True, 'name': 'my_lock'}
|
|
119
|
+
"""
|
|
120
|
+
return self.get_response(self_obj=self)
|