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
everysk/api/utils.py
ADDED
|
@@ -0,0 +1,262 @@
|
|
|
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
|
+
import json
|
|
11
|
+
import time
|
|
12
|
+
|
|
13
|
+
from everysk.api import api_requestor, get_api_config
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
###############################################################################
|
|
17
|
+
# Private Functions Implementation
|
|
18
|
+
###############################################################################
|
|
19
|
+
def dumps_json(obj):
|
|
20
|
+
"""
|
|
21
|
+
Serializes a Python object into a JSON-formatted string with sorted keys and pretty-printing.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
obj:
|
|
25
|
+
The Python object to serialize
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
str: A JSON-formatted string representing the serialized output. The keys will be sorted with an level 2 of indentation
|
|
29
|
+
|
|
30
|
+
Example:
|
|
31
|
+
>>> from everysk.api.utils import dumps_json
|
|
32
|
+
>>> data = {
|
|
33
|
+
... 2: 'apple',
|
|
34
|
+
... 1: 'banana',
|
|
35
|
+
... 3: 'cherry'
|
|
36
|
+
... }
|
|
37
|
+
>>> json_str = dumps_json(data)
|
|
38
|
+
>>> print(json_str)
|
|
39
|
+
{
|
|
40
|
+
"1": "banana",
|
|
41
|
+
"2": "apple",
|
|
42
|
+
"3": "cherry"
|
|
43
|
+
}
|
|
44
|
+
"""
|
|
45
|
+
return json.dumps(obj, sort_keys=True, indent=2)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
###############################################################################
|
|
49
|
+
# Everysk Object Implementation
|
|
50
|
+
###############################################################################
|
|
51
|
+
class EveryskObject(dict):
|
|
52
|
+
def __init__(self, retrieve_params, params) -> None: # pylint: disable=unused-argument
|
|
53
|
+
super().__init__()
|
|
54
|
+
self.__unsaved_values = set()
|
|
55
|
+
self.update(params)
|
|
56
|
+
self.clear_unsaved_values()
|
|
57
|
+
|
|
58
|
+
def get_unsaved_values(self):
|
|
59
|
+
return {k:self[k] for k in self.__unsaved_values}
|
|
60
|
+
|
|
61
|
+
def clear_unsaved_values(self):
|
|
62
|
+
self.__unsaved_values = set()
|
|
63
|
+
|
|
64
|
+
def __str__(self):
|
|
65
|
+
return dumps_json(self)
|
|
66
|
+
|
|
67
|
+
def __repr__(self):
|
|
68
|
+
ident_parts = [type(self).__name__]
|
|
69
|
+
ident_parts.append(f"id={self.get('id')}")
|
|
70
|
+
unicode_repr = f"<{' '.join(ident_parts)} at {hex(id(self))}> JSON: {str(self)}"
|
|
71
|
+
return unicode_repr
|
|
72
|
+
|
|
73
|
+
def update(self, dict_) -> None:
|
|
74
|
+
for k, v in dict_.items():
|
|
75
|
+
self.__setattr__(k, v)
|
|
76
|
+
|
|
77
|
+
def __setattr__(self, k, v):
|
|
78
|
+
if k.startswith('_') or k in self.__dict__:
|
|
79
|
+
return super().__setattr__(k, v)
|
|
80
|
+
|
|
81
|
+
self[k] = v
|
|
82
|
+
return None
|
|
83
|
+
|
|
84
|
+
def __getattr__(self, k):
|
|
85
|
+
if k.startswith('_'):
|
|
86
|
+
raise AttributeError(k)
|
|
87
|
+
|
|
88
|
+
try:
|
|
89
|
+
return self[k]
|
|
90
|
+
except KeyError as err:
|
|
91
|
+
raise AttributeError(*err.args) # pylint: disable=raise-missing-from
|
|
92
|
+
|
|
93
|
+
def __delattr__(self, k):
|
|
94
|
+
if k.startswith('_') or k in self.__dict__:
|
|
95
|
+
return super().__delattr__(k)
|
|
96
|
+
else:
|
|
97
|
+
del self[k]
|
|
98
|
+
|
|
99
|
+
def __setitem__(self, k, v) -> None:
|
|
100
|
+
self.__unsaved_values.add(k)
|
|
101
|
+
super().__setitem__(k, v)
|
|
102
|
+
|
|
103
|
+
def __getitem__(self, k):
|
|
104
|
+
return super().__getitem__(k)
|
|
105
|
+
|
|
106
|
+
def __delitem__(self, k) -> None:
|
|
107
|
+
super().__delitem__(k)
|
|
108
|
+
self.__unsaved_values.remove(k)
|
|
109
|
+
|
|
110
|
+
# # Allows for unpickling in Python 3.x
|
|
111
|
+
# if hasattr(self, '_unsaved_values'):
|
|
112
|
+
# self._unsaved_values.remove(k)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
###############################################################################
|
|
116
|
+
# Everysk List Implementation
|
|
117
|
+
###############################################################################
|
|
118
|
+
class EveryskList(list):
|
|
119
|
+
def __init__(self, retrieve_params, response, key, cls) -> None:
|
|
120
|
+
"""
|
|
121
|
+
Initializes the EveryskList object.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
retrieve_params (dict): The parameters used for retrieving data.
|
|
125
|
+
response (dict): The response containing the data.
|
|
126
|
+
key (str): The key in the response dictionary that contains the data.
|
|
127
|
+
cls (class): The class used to create objects from the data.
|
|
128
|
+
"""
|
|
129
|
+
super().__init__()
|
|
130
|
+
self.__page_size = retrieve_params.get('page_size', 10)
|
|
131
|
+
self.__next_page_token = response.get('next_page_token', None)
|
|
132
|
+
self.extend([cls({}, params) for params in response[key]])
|
|
133
|
+
|
|
134
|
+
def page_size(self):
|
|
135
|
+
"""
|
|
136
|
+
Returns the page size used for pagination.
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
int: The page size used for pagination.
|
|
140
|
+
"""
|
|
141
|
+
return self.__page_size
|
|
142
|
+
|
|
143
|
+
def next_page_token(self):
|
|
144
|
+
"""
|
|
145
|
+
Retrieves the next page token.
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
The next page token.
|
|
149
|
+
"""
|
|
150
|
+
return self.__next_page_token
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
###############################################################################
|
|
154
|
+
# Private Functions Implementation
|
|
155
|
+
###############################################################################
|
|
156
|
+
def create_api_requestor(params=None):
|
|
157
|
+
"""
|
|
158
|
+
Creates an APIRequestor object configured with API settings extracted or derived from the provided parameters.
|
|
159
|
+
It initializes an APIRequestor with configuration settings such as API token, API session ID, API entry point, and SSL certificates status.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
params (dict, optional):
|
|
163
|
+
A dictionary of parameters containing API configuration settings. Defaults to an empty dictionary.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
APIRequestor: An instance of APIRequestor, configured with the API settings
|
|
167
|
+
|
|
168
|
+
Example:
|
|
169
|
+
>>> api_config_params = {
|
|
170
|
+
>>> ... 'api_entry': 'https://api.example.com',
|
|
171
|
+
>>> ... 'api_version': 'v1',
|
|
172
|
+
>>> ... 'api_sid': 'session123',
|
|
173
|
+
>>> ... 'api_token': 'token456',
|
|
174
|
+
>>> ... 'verify_ssl_certs': False
|
|
175
|
+
>>> }
|
|
176
|
+
>>> api_requestor = create_api_requestor(api_config_params)
|
|
177
|
+
>>> print(api_requestor.base_url) # This will output the base URL configured for the API requestor.
|
|
178
|
+
"""
|
|
179
|
+
params = params or {}
|
|
180
|
+
return api_requestor.APIRequestor(
|
|
181
|
+
*get_api_config(params)
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
def to_object(cls, retrieve_params, response, extra_keys=None):
|
|
185
|
+
"""
|
|
186
|
+
Converts a response dictionary into an instance of the specified class.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
cls (type): The class to instantiate. It must implement a constructor
|
|
190
|
+
that accepts (retrieve_params, response_body), and a `class_name()` method.
|
|
191
|
+
retrieve_params (dict): Parameters originally used to retrieve the data.
|
|
192
|
+
response (dict): The response dictionary received from an API call.
|
|
193
|
+
extra_keys (list[str], optional): List of keys to extract from the top-level
|
|
194
|
+
of the response and merge into the response body. Defaults to None.
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
object or None: An instance of `cls` populated with the response data,
|
|
198
|
+
or None if the response is invalid or missing the expected key.
|
|
199
|
+
|
|
200
|
+
Example:
|
|
201
|
+
>>> from everysk.api.utils import to_object
|
|
202
|
+
>>> from everysk.api.api_resources import Calculation
|
|
203
|
+
|
|
204
|
+
>>> response = {'calculation': {'some': 'data'}, 'metadata': {'id': 123}}
|
|
205
|
+
>>> retrieve_params = {'param1': 'value1'}
|
|
206
|
+
|
|
207
|
+
>>> calculation_object = to_object(Calculation, retrieve_params, response, extra_keys=['metadata'])
|
|
208
|
+
# Creates a Calculation instance with data: {'some': 'data', 'metadata': {'id': 123}}
|
|
209
|
+
"""
|
|
210
|
+
key = cls.class_name()
|
|
211
|
+
result = None
|
|
212
|
+
if response and key in response and isinstance(response[key], dict):
|
|
213
|
+
response_body = response[key]
|
|
214
|
+
|
|
215
|
+
if extra_keys and isinstance(extra_keys, list):
|
|
216
|
+
for key in extra_keys:
|
|
217
|
+
if key in response:
|
|
218
|
+
response_body[key] = response[key]
|
|
219
|
+
|
|
220
|
+
result = cls(retrieve_params, response_body)
|
|
221
|
+
return result
|
|
222
|
+
|
|
223
|
+
def to_list(cls, retrieve_params, response):
|
|
224
|
+
"""
|
|
225
|
+
Convert a response dictionary into a list of objects of the given class.
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
cls (class): The class of the objects to be created.
|
|
229
|
+
retrieve_params (dict): The retrieve parameters used to fetch the response.
|
|
230
|
+
response (dict): The response dictionary.
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
list: A list of objects of the given class, created from the response dictionary.
|
|
234
|
+
If the response is empty, the key is missing, or the value is not a list,
|
|
235
|
+
None is returned.
|
|
236
|
+
|
|
237
|
+
Example:
|
|
238
|
+
>>> from unittest.mock import MagicMock
|
|
239
|
+
>>> from everysk.api.utils import to_list
|
|
240
|
+
>>> mock_class = MagicMock()
|
|
241
|
+
|
|
242
|
+
>>> mock_class.class_name_list.return_value = 'valid_key'
|
|
243
|
+
|
|
244
|
+
>>> response = {'valid_key': [{'some': 'data'}, {'more': 'data'}]}
|
|
245
|
+
>>> retrieve_params = {'param1': 'value1'}
|
|
246
|
+
|
|
247
|
+
>>> result = to_list(mock_class, retrieve_params, response)
|
|
248
|
+
"""
|
|
249
|
+
key = cls.class_name_list()
|
|
250
|
+
result = None
|
|
251
|
+
if response and key in response and isinstance(response[key], list):
|
|
252
|
+
result = EveryskList(retrieve_params, response, key, cls)
|
|
253
|
+
return result
|
|
254
|
+
|
|
255
|
+
def sleep(t) -> None:
|
|
256
|
+
"""
|
|
257
|
+
Sleeps for the specified number of seconds.
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
t (float): The number of seconds to sleep.
|
|
261
|
+
"""
|
|
262
|
+
time.sleep(t)
|