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,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 everysk.core.fields import IntField, ListField, RegexField, StrField
|
|
11
|
+
|
|
12
|
+
WORKER_EXECUTION_ID_PREFIX = StrField(default='wkex_', readonly=True)
|
|
13
|
+
WORKER_EXECUTION_ID_LENGTH = IntField(default=25, readonly=True)
|
|
14
|
+
WORKER_EXECUTION_ID_REGEX = RegexField(default=r'^wkex_[a-zA-Z0-9]{25}', readonly=True)
|
|
15
|
+
|
|
16
|
+
WORKER_ID_PREFIX = StrField(default='wrkr_', readonly=True)
|
|
17
|
+
WORKER_ID_LENGTH = IntField(default=25, readonly=True)
|
|
18
|
+
WORKER_ID_REGEX = RegexField(default=r'^wrkr_[a-zA-Z0-9]{25}', readonly=True)
|
|
19
|
+
|
|
20
|
+
WORKER_EXECUTION_UNFORKED_PARALLEL_INDEX = IntField(default=-1, readonly=True)
|
|
21
|
+
WORKER_EXECUTION_UNFORKED_PARALLEL_LENGTH = IntField(default=-1, readonly=True)
|
|
22
|
+
|
|
23
|
+
WORKER_EXECUTION_STATUS_COMPLETED = StrField(default='COMPLETED', readonly=True)
|
|
24
|
+
WORKER_EXECUTION_STATUS_FAILED = StrField(default='FAILED', readonly=True)
|
|
25
|
+
WORKER_EXECUTION_STATUS_PREPARING = StrField(default='PREPARING', readonly=True)
|
|
26
|
+
WORKER_EXECUTION_STATUS_RUNNING = StrField(default='RUNNING', readonly=True)
|
|
27
|
+
WORKER_EXECUTION_STATUS_TIMEOUT = StrField(default='TIMEOUT', readonly=True)
|
|
28
|
+
WORKER_EXECUTION_STATUS_LIST = ListField(default=['COMPLETED', 'FAILED', 'PREPARING', 'RUNNING', 'TIMEOUT'], readonly=True)
|
|
29
|
+
|
|
30
|
+
WORKER_EXECUTION_INTEGRATION_EVENT_TYPE = StrField(default='INTEGRATION_EVENT', readonly=True)
|
|
31
|
+
WORKER_EXECUTION_SCHEDULER_EVENT_TYPE = StrField(default='SCHEDULER_EVENT', readonly=True)
|
|
32
|
+
WORKER_EXECUTION_WORKER_FINISHED_EVENT_TYPE = StrField(default='WORKER_FINISHED_EVENT', readonly=True)
|
|
33
|
+
WORKER_EXECUTION_MANUAL_EVENT_TYPE = StrField(default='MANUAL', readonly=True)
|
|
34
|
+
WORKER_EXECUTION_API_EVENT_TYPE = StrField(default='API', readonly=True)
|
|
35
|
+
WORKER_EXECUTION_EVENT_TYPE_LIST = ListField(
|
|
36
|
+
default=['INTEGRATION_EVENT', 'SCHEDULER_EVENT', 'WORKER_FINISHED_EVENT', 'MANUAL', 'API'], readonly=True
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
WORKER_EXECUTION_TYPE_TIME_DRIVEN = StrField(default='TIME_DRIVEN', readonly=True)
|
|
40
|
+
WORKER_EXECUTION_TYPE_EVENT_DRIVEN = StrField(default='EVENT_DRIVEN', readonly=True)
|
|
41
|
+
WORKER_EXECUTION_TYPE_MANUAL = StrField(default='MANUAL', readonly=True)
|
|
42
|
+
WORKER_EXECUTION_TYPE_API = StrField(default='API', readonly=True)
|
|
43
|
+
WORKER_EXECUTION_TYPE_LIST = ListField(
|
|
44
|
+
default=['TIME_DRIVEN', 'EVENT_DRIVEN', 'SCHEDULER_EVENT', 'MANUAL', 'API'], readonly=True
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
RESULT_STATUS_OK = StrField(default='OK', readonly=True)
|
|
48
|
+
RESULT_STATUS_ERROR = StrField(default='ERROR', readonly=True)
|
|
49
|
+
|
|
50
|
+
WORKER_TEMPLATE_TYPES = ListField(
|
|
51
|
+
default=[
|
|
52
|
+
'STARTER',
|
|
53
|
+
'BASIC',
|
|
54
|
+
'FORKER',
|
|
55
|
+
'BARRIER',
|
|
56
|
+
'CONDITIONAL',
|
|
57
|
+
'TRY',
|
|
58
|
+
'CATCH',
|
|
59
|
+
'ENDER',
|
|
60
|
+
'Retrieve',
|
|
61
|
+
], # Retrieve is a legacy type.
|
|
62
|
+
readonly=True,
|
|
63
|
+
)
|
|
@@ -0,0 +1,113 @@
|
|
|
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.config import settings
|
|
11
|
+
from everysk.core.fields import StrField, DateTimeField, ListField, FloatField
|
|
12
|
+
from everysk.sdk.entities.base import BaseEntity
|
|
13
|
+
from everysk.sdk.entities.query import Query
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
###############################################################################
|
|
17
|
+
# WorkflowExecution Class Implementation
|
|
18
|
+
###############################################################################
|
|
19
|
+
class WorkflowExecution(BaseEntity):
|
|
20
|
+
|
|
21
|
+
id = StrField(regex=settings.WORKFLOW_EXECUTION_ID_REGEX, required_lazy=True, empty_is_none=True)
|
|
22
|
+
|
|
23
|
+
# This is a legacy status used in the old version of the API library.
|
|
24
|
+
status = StrField(default=settings.WORKFLOW_EXECUTION_STATUS_OK, choices=settings.WORKFLOW_EXECUTION_STATUS, required_lazy=True)
|
|
25
|
+
run_status = StrField(default=settings.WORKFLOW_EXECUTION_STATUS_PREPARING, choices=settings.WORKFLOW_EXECUTION_STATUS, required_lazy=True)
|
|
26
|
+
|
|
27
|
+
execution_type = StrField(default=Undefined, choices=settings.WORKER_EXECUTION_TYPE_LIST, required_lazy=True)
|
|
28
|
+
start_time = DateTimeField()
|
|
29
|
+
end_time = DateTimeField()
|
|
30
|
+
duration = FloatField()
|
|
31
|
+
real_execution_time = FloatField()
|
|
32
|
+
total_execution_time = FloatField()
|
|
33
|
+
|
|
34
|
+
workflow_id = StrField(regex=settings.WORKFLOW_ID_REGEX, required_lazy=True, empty_is_none=True)
|
|
35
|
+
workflow_name = StrField(required_lazy=True)
|
|
36
|
+
workspace = StrField(required_lazy=False, empty_is_none=True)
|
|
37
|
+
|
|
38
|
+
started_worker_id = StrField(regex=settings.WORKER_ID_REGEX, required_lazy=True, empty_is_none=True)
|
|
39
|
+
ender_worker_id = StrField(regex=settings.WORKER_ID_REGEX, empty_is_none=True)
|
|
40
|
+
ender_worker_execution_id = StrField(regex=settings.WORKER_EXECUTION_ID_REGEX, empty_is_none=True)
|
|
41
|
+
|
|
42
|
+
worker_ids = ListField()
|
|
43
|
+
resume = ListField()
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def get_id_prefix() -> str:
|
|
47
|
+
"""
|
|
48
|
+
Returns the prefix of the Worker Execution id field value.
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
str: The prefix of the Worker Execution id field value.
|
|
52
|
+
|
|
53
|
+
Usage:
|
|
54
|
+
>>> WorkflowExecution.get_id_prefix()
|
|
55
|
+
'wfex_'
|
|
56
|
+
|
|
57
|
+
Notes:
|
|
58
|
+
The prefix is typically used to distinguish Worker Execution IDs from other types of IDs.
|
|
59
|
+
"""
|
|
60
|
+
return settings.WORKFLOW_EXECUTION_ID_PREFIX
|
|
61
|
+
|
|
62
|
+
def to_dict(self, add_class_path: bool = False, recursion: bool = False) -> dict:
|
|
63
|
+
"""
|
|
64
|
+
This method is used to convert the object to a dictionary.
|
|
65
|
+
"""
|
|
66
|
+
dct: dict = super().to_dict(add_class_path=add_class_path, recursion=recursion)
|
|
67
|
+
|
|
68
|
+
if add_class_path is False:
|
|
69
|
+
dct['started'] = self.start_time.timestamp() if self.start_time else None
|
|
70
|
+
dct['trigger'] = self.execution_type
|
|
71
|
+
|
|
72
|
+
dct.pop('worker_ids')
|
|
73
|
+
dct.pop('execution_type')
|
|
74
|
+
dct.pop('start_time')
|
|
75
|
+
dct.pop('end_time')
|
|
76
|
+
|
|
77
|
+
return dct
|
|
78
|
+
|
|
79
|
+
def _check_entity_to_query(self) -> bool:
|
|
80
|
+
"""
|
|
81
|
+
Check the entity object to query.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
bool: True if the entity object is valid.
|
|
85
|
+
"""
|
|
86
|
+
return True
|
|
87
|
+
|
|
88
|
+
def _check_query(self, query: Query) -> bool:
|
|
89
|
+
"""
|
|
90
|
+
Check the query object.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
query (Query): The query object.
|
|
94
|
+
|
|
95
|
+
Returns:
|
|
96
|
+
bool: True if the query object is valid.
|
|
97
|
+
"""
|
|
98
|
+
return True
|
|
99
|
+
|
|
100
|
+
def _mount_query(self, query: Query) -> Query:
|
|
101
|
+
"""
|
|
102
|
+
Mount the query object.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
query (Query): The query object.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
Query: The query object.
|
|
109
|
+
"""
|
|
110
|
+
if self.workflow_id is not None:
|
|
111
|
+
query = query.where('workflow_id', self.workflow_id)
|
|
112
|
+
|
|
113
|
+
return query
|
|
@@ -0,0 +1,32 @@
|
|
|
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.core.fields import StrField, ListField, IntField, RegexField
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
WORKFLOW_EXECUTION_ID_PREFIX = StrField(default='wfex_', readonly=True)
|
|
14
|
+
WORKFLOW_EXECUTION_ID_LENGTH = IntField(default=25, readonly=True)
|
|
15
|
+
WORKFLOW_EXECUTION_ID_REGEX = RegexField(default=r'^wfex_[a-zA-Z0-9]{25}', readonly=True)
|
|
16
|
+
|
|
17
|
+
WORKFLOW_ID_PREFIX = StrField(default='wrkf_', readonly=True)
|
|
18
|
+
WORKFLOW_ID_LENGTH = IntField(default=25, readonly=True)
|
|
19
|
+
WORKFLOW_ID_REGEX = RegexField(default=r'^wrkf_[a-zA-Z0-9]{25}', readonly=True)
|
|
20
|
+
|
|
21
|
+
# legacy workflow execution status
|
|
22
|
+
WORKFLOW_EXECUTION_STATUS_COMPLETED = StrField(default='COMPLETED', readonly=True)
|
|
23
|
+
WORKFLOW_EXECUTION_STATUS_OK = StrField(default='OK', readonly=True)
|
|
24
|
+
|
|
25
|
+
# current workflow execution status
|
|
26
|
+
WORKFLOW_EXECUTION_STATUS_CANCELED = StrField(default='CANCELED', readonly=True)
|
|
27
|
+
WORKFLOW_EXECUTION_STATUS_FAILED = StrField(default='FAILED', readonly=True)
|
|
28
|
+
WORKFLOW_EXECUTION_STATUS_PREPARING = StrField(default='PREPARING', readonly=True)
|
|
29
|
+
WORKFLOW_EXECUTION_STATUS_RUNNING = StrField(default='RUNNING', readonly=True)
|
|
30
|
+
WORKFLOW_EXECUTION_STATUS_SUCCEEDED = StrField(default='SUCCEEDED', readonly=True)
|
|
31
|
+
WORKFLOW_EXECUTION_STATUS = ListField(default=['CANCELED', 'COMPLETED', 'FAILED', 'OK', 'PREPARING', 'RUNNING', 'SUCCEEDED'], readonly=True)
|
|
32
|
+
WORKFLOW_EXECUTION_STATUS_FINISHED = ListField(default=['CANCELED', 'COMPLETED', 'SUCCEEDED', 'FAILED'], readonly=True)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# -*- coding: utf_8 -*-
|
|
2
|
+
###############################################################################
|
|
3
|
+
#
|
|
4
|
+
# (C) Copyright 2023 EVERYSK TECHNOLOGIES
|
|
5
|
+
#
|
|
6
|
+
# This is an unpublished work containing confidential and proprietary
|
|
7
|
+
# information of EVERYSK TECHNOLOGIES. Disclosure, use, or reproduction
|
|
8
|
+
# without authorization of EVERYSK TECHNOLOGIES is prohibited.
|
|
9
|
+
#
|
|
10
|
+
###############################################################################
|
|
11
|
+
|
|
12
|
+
###############################################################################
|
|
13
|
+
# Imports
|
|
14
|
+
###############################################################################
|
|
15
|
+
from everysk.config import settings
|
|
16
|
+
from everysk.core.fields import StrField
|
|
17
|
+
|
|
18
|
+
from everysk.sdk.entities.base import BaseEntity
|
|
19
|
+
from everysk.sdk.entities.fields import EntityDescriptionField, EntityWorkspaceField
|
|
20
|
+
|
|
21
|
+
###############################################################################
|
|
22
|
+
# Securities Field Implementation
|
|
23
|
+
###############################################################################
|
|
24
|
+
|
|
25
|
+
###############################################################################
|
|
26
|
+
# Portfolio Implementation
|
|
27
|
+
###############################################################################
|
|
28
|
+
class Workspace(BaseEntity):
|
|
29
|
+
|
|
30
|
+
name = EntityWorkspaceField()
|
|
31
|
+
description = EntityDescriptionField(max_size=settings.WORKSPACE_DESCRIPTION_MAX_LENGTH)
|
|
32
|
+
group = StrField(default=None, max_size=settings.WORKSPACE_GROUP_MAX_LENGTH, min_size=settings.WORKSPACE_GROUP_MIN_LENGTH, empty_is_none=True)
|
|
33
|
+
|
|
34
|
+
@property
|
|
35
|
+
def id(self) -> str:
|
|
36
|
+
"""
|
|
37
|
+
Returns the id of the workspace. The id is a alias for the name.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
str: The id of the workspace.
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
>>> workspace = Workspace(name='custom')
|
|
44
|
+
>>> workspace.id
|
|
45
|
+
'custom'
|
|
46
|
+
"""
|
|
47
|
+
return self.name
|
|
48
|
+
|
|
49
|
+
@id.setter
|
|
50
|
+
def id(self, value: str) -> None:
|
|
51
|
+
"""
|
|
52
|
+
Sets the id of the workspace. The id is a alias for the name.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
value (str): The id of the workspace.
|
|
56
|
+
|
|
57
|
+
Example:
|
|
58
|
+
>>> workspace = Workspace()
|
|
59
|
+
>>> workspace.id = 'custom'
|
|
60
|
+
>>> workspace.name
|
|
61
|
+
'custom'
|
|
62
|
+
>>> workspace.id
|
|
63
|
+
'custom'
|
|
64
|
+
"""
|
|
65
|
+
self.name = value
|
|
66
|
+
|
|
67
|
+
@staticmethod
|
|
68
|
+
def get_id_prefix():
|
|
69
|
+
"""
|
|
70
|
+
Returns the id prefix for the workspace.
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
str: The id prefix for the workspace.
|
|
74
|
+
"""
|
|
75
|
+
return settings.WORKSPACE_ID_PREFIX
|
|
76
|
+
|
|
77
|
+
def generate_id(self) -> str:
|
|
78
|
+
"""
|
|
79
|
+
Generate a unique ID for an entity instance.
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
str: The generated unique ID.
|
|
83
|
+
|
|
84
|
+
Example:
|
|
85
|
+
To generate a unique ID for an entity instance:
|
|
86
|
+
>>> unique_id = MyEntity().generate_id()
|
|
87
|
+
"""
|
|
88
|
+
raise NotImplementedError
|
|
89
|
+
|
|
90
|
+
def to_dict(self, add_class_path = False, recursion = False) -> dict:
|
|
91
|
+
"""
|
|
92
|
+
This method is used to convert the object to a dictionary.
|
|
93
|
+
"""
|
|
94
|
+
dct: dict = super().to_dict(add_class_path, recursion)
|
|
95
|
+
|
|
96
|
+
if not self.description:
|
|
97
|
+
dct['description'] = ''
|
|
98
|
+
|
|
99
|
+
return dct
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
|
|
11
|
+
###############################################################################
|
|
12
|
+
# Imports
|
|
13
|
+
###############################################################################
|
|
14
|
+
from everysk.core.fields import IntField, RegexField, StrField
|
|
15
|
+
|
|
16
|
+
###############################################################################
|
|
17
|
+
# Settings Implementation
|
|
18
|
+
###############################################################################
|
|
19
|
+
ENTITY_WORKSPACE_MAX_LENGTH = IntField(default=50, readonly=True)
|
|
20
|
+
ENTITY_WORKSPACE_MIN_LENGTH = IntField(default=1, readonly=True)
|
|
21
|
+
ENTITY_WORKSPACE_REGEX = RegexField(default=r'^[a-zA-Z0-9_]*$', readonly=True)
|
|
22
|
+
|
|
23
|
+
WORKSPACE_GROUP_MAX_LENGTH = IntField(default=50, readonly=True)
|
|
24
|
+
WORKSPACE_GROUP_MIN_LENGTH = IntField(default=1, readonly=True)
|
|
25
|
+
|
|
26
|
+
WORKSPACE_ID_PREFIX = StrField(default='wksp_', readonly=True)
|
|
27
|
+
WORKSPACE_DESCRIPTION_MAX_LENGTH = IntField(default=100, readonly=True)
|
everysk/sdk/settings.py
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
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.core.fields import BoolField, DictField, IntField, SetField, StrField
|
|
11
|
+
|
|
12
|
+
SIMPLE_UNIQUE_ID_LENGTH = IntField(default=8, readonly=True)
|
|
13
|
+
|
|
14
|
+
EVERYSK_API_SID = StrField()
|
|
15
|
+
EVERYSK_API_TOKEN = StrField()
|
|
16
|
+
|
|
17
|
+
EVERYSK_APP_URL_SCHEME = StrField(default='https')
|
|
18
|
+
EVERYSK_APP_URL_DOMAIN = StrField(default='app.everysk.com')
|
|
19
|
+
EVERYSK_APP_URL = StrField(default='{EVERYSK_APP_URL_SCHEME}://{EVERYSK_APP_URL_DOMAIN}')
|
|
20
|
+
|
|
21
|
+
EVERYSK_API_URL_SCHEME = StrField(default='https')
|
|
22
|
+
EVERYSK_API_URL_DOMAIN = StrField(default='api.everysk.com')
|
|
23
|
+
EVERYSK_API_URL = StrField(default='{EVERYSK_API_URL_SCHEME}://{EVERYSK_API_URL_DOMAIN}')
|
|
24
|
+
EVERYSK_SDK_URL = EVERYSK_API_URL
|
|
25
|
+
|
|
26
|
+
EVERYSK_API_VERSION = StrField(default='v2')
|
|
27
|
+
EVERYSK_API_VERIFY_SSL_CERTS = BoolField(default=True)
|
|
28
|
+
|
|
29
|
+
EVERYSK_SDK_VERSION = StrField(default='v1', readonly=True)
|
|
30
|
+
EVERYSK_SDK_ROUTE = StrField(default='sdk_function', readonly=True)
|
|
31
|
+
|
|
32
|
+
EVERYSK_SDK_HTTP_DEFAULT_TIMEOUT = IntField(default=3600, readonly=True)
|
|
33
|
+
EVERYSK_SDK_HTTP_RETRY_ERROR_CODES = SetField(default=(429, 500, 502, 503, 504), readonly=True)
|
|
34
|
+
|
|
35
|
+
EVERYSK_SDK_MODULES_PATH = DictField(default={'WorkerBase': 'everysk.sdk.worker_base.WorkerBase'}, readonly=True)
|
|
36
|
+
|
|
37
|
+
EVERYSK_SDK_ENTITIES_MODULES_PATH = DictField(
|
|
38
|
+
default={
|
|
39
|
+
'CustomIndex': 'everysk.sdk.entities.custom_index.base.CustomIndex',
|
|
40
|
+
'Datastore': 'everysk.sdk.entities.datastore.base.Datastore',
|
|
41
|
+
'File': 'everysk.sdk.entities.file.base.File',
|
|
42
|
+
'Portfolio': 'everysk.sdk.entities.portfolio.base.Portfolio',
|
|
43
|
+
'PrivateSecurity': 'everysk.sdk.entities.private_security.base.PrivateSecurity',
|
|
44
|
+
'Query': 'everysk.sdk.entities.query.Query',
|
|
45
|
+
'Report': 'everysk.sdk.entities.report.base.Report',
|
|
46
|
+
'Script': 'everysk.sdk.entities.script.Script',
|
|
47
|
+
'Securities': 'everysk.sdk.entities.portfolio.securities.Securities',
|
|
48
|
+
'Security': 'everysk.sdk.entities.portfolio.security.Security',
|
|
49
|
+
'WorkerExecution': 'everysk.sdk.entities.worker_execution.base.WorkerExecution',
|
|
50
|
+
'WorkflowExecution': 'everysk.sdk.entities.workflow_execution.base.WorkflowExecution',
|
|
51
|
+
'Workspace': 'everysk.sdk.entities.workspace.base.Workspace',
|
|
52
|
+
'Secrets': 'everysk.sdk.entities.secrets.base.Secrets',
|
|
53
|
+
'SecretsScript': 'everysk.sdk.entities.secrets.base.SecretsScript',
|
|
54
|
+
},
|
|
55
|
+
readonly=True,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
EVERYSK_SDK_ENGINES_MODULES_PATH = DictField(
|
|
59
|
+
default={
|
|
60
|
+
'Expression': 'everysk.sdk.engines.expression.Expression',
|
|
61
|
+
'Compliance': 'everysk.sdk.engines.compliance.Compliance',
|
|
62
|
+
'UserCache': 'everysk.sdk.engines.cache.UserCache',
|
|
63
|
+
'UserLock': 'everysk.sdk.engines.lock.UserLock',
|
|
64
|
+
'MarketData': 'everysk.sdk.engines.market_data.MarketData',
|
|
65
|
+
},
|
|
66
|
+
readonly=True,
|
|
67
|
+
)
|
everysk/sdk/tests.py
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# ruff: noqa: F401
|
|
2
|
+
###############################################################################
|
|
3
|
+
#
|
|
4
|
+
# (C) Copyright 2023 EVERYSK TECHNOLOGIES
|
|
5
|
+
#
|
|
6
|
+
# This is an unpublished work containing confidential and proprietary
|
|
7
|
+
# information of EVERYSK TECHNOLOGIES. Disclosure, use, or reproduction
|
|
8
|
+
# without authorization of EVERYSK TECHNOLOGIES is prohibited.
|
|
9
|
+
#
|
|
10
|
+
###############################################################################
|
|
11
|
+
# pylint: disable=unused-import
|
|
12
|
+
|
|
13
|
+
## Remember to prefix all import with EveryskLib to avoid clash with other tests
|
|
14
|
+
try:
|
|
15
|
+
from everysk.sdk._tests.base import TestBaseSDK as EveryskLibTestBaseSDK
|
|
16
|
+
from everysk.sdk._tests.init import SDKInitTestCase as EveryskLibSDKInitTestCase
|
|
17
|
+
from everysk.sdk._tests.serialize import SerializeDumpsSDKTestCase as EveryskLibSerializeDumpsSDKTestCase
|
|
18
|
+
from everysk.sdk._tests.serialize import SerializeLoadsSDKTestCase as EveryskLibSerializeLoadsSDKTestCase
|
|
19
|
+
from everysk.sdk._tests.worker_base import WorkerBaseTestCase as EveryskLibWorkerBaseTestCase
|
|
20
|
+
from everysk.sdk.engines._tests.cache import CacheTestCase as EveryskLibCacheTestCase
|
|
21
|
+
from everysk.sdk.engines._tests.compliance import ComplianceTestCase as EveryskLibComplianceTestCase
|
|
22
|
+
from everysk.sdk.engines._tests.cryptography import TestCryptography as EveryskLibTestCryptography
|
|
23
|
+
from everysk.sdk.engines._tests.init import EnginesInitTestCase as EveryskLibEnginesInitTestCase
|
|
24
|
+
from everysk.sdk.engines._tests.lock import UserLockTestCase as EveryskLibUserLockTestCase
|
|
25
|
+
from everysk.sdk.engines._tests.market_data import MarketDataPublicTestCase as EveryskLibMarketDataPublicTestCase
|
|
26
|
+
from everysk.sdk.engines._tests.market_data import MarketDataTestCase as EveryskLibMarketDataTestCase
|
|
27
|
+
from everysk.sdk.engines.expression.functions.tests.base import (
|
|
28
|
+
FunctionsBaseTestCase as EveryskLibFunctionsBaseTestCaseNew,
|
|
29
|
+
)
|
|
30
|
+
from everysk.sdk.engines.expression.functions.tests.date import (
|
|
31
|
+
FunctionsDateTestCase as EveryskLibFunctionsDateTestCaseNew,
|
|
32
|
+
)
|
|
33
|
+
from everysk.sdk.engines.expression.functions.tests.list import (
|
|
34
|
+
FunctionsListTestCase as EveryskLibFunctionsListTestCaseNew,
|
|
35
|
+
)
|
|
36
|
+
from everysk.sdk.engines.expression.functions.tests.logic import (
|
|
37
|
+
FunctionsLogicTestCase as EveryskLibFunctionsLogicTestCaseNew,
|
|
38
|
+
)
|
|
39
|
+
from everysk.sdk.engines.expression.functions.tests.math import (
|
|
40
|
+
FunctionsMathTestCase as EveryskLibFunctionsMathTestCaseNew,
|
|
41
|
+
)
|
|
42
|
+
from everysk.sdk.engines.expression.functions.tests.miscellaneous import (
|
|
43
|
+
FunctionsMiscellaneousTestCase as EveryskLibFunctionsMiscellaneousTestCaseNew,
|
|
44
|
+
)
|
|
45
|
+
from everysk.sdk.engines.expression.functions.tests.string import (
|
|
46
|
+
FunctionsStringTestCase as EveryskLibFunctionsStringTestCaseNew,
|
|
47
|
+
)
|
|
48
|
+
from everysk.sdk.engines.expression.tests.base import (
|
|
49
|
+
ExpressionEngineTestCase as EveryskLibExpressionEngineTestCaseNew,
|
|
50
|
+
)
|
|
51
|
+
from everysk.sdk.engines.expression.tests.interpreter import InterpreterTestCase as EveryskLibInterpreterTestCaseNew
|
|
52
|
+
from everysk.sdk.engines.expression.tests.validator import ValidatorTestCase as EveryskLibValidatorTestCaseNew
|
|
53
|
+
from everysk.sdk.engines.helpers.tests.test_algorithms import NpSortTestCase as EveryskLibHelpersNpSortTestCase
|
|
54
|
+
from everysk.sdk.engines.helpers.tests.test_algorithms import NpUniqueTestCase as EveryskLibHelpersNpUniqueTestCase
|
|
55
|
+
from everysk.sdk.engines.helpers.tests.test_formater import FormaterTestCase as EveryskLibFormaterTestCase
|
|
56
|
+
from everysk.sdk.engines.helpers.tests.test_functions import FunctionsTestCase as EveryskLibFunctionsTestCase
|
|
57
|
+
from everysk.sdk.engines.helpers.tests.test_mathematical import (
|
|
58
|
+
MathematicalTestCase as EveryskLibMathematicalTestCase,
|
|
59
|
+
)
|
|
60
|
+
from everysk.sdk.engines.helpers.tests.test_mixin_lib import AttribMixinTestCase as EveryskLibAttribMixinTestCase
|
|
61
|
+
from everysk.sdk.engines.helpers.tests.test_mixin_lib import MappingMixinTestCase as EveryskLibMappingMixinTestCase
|
|
62
|
+
from everysk.sdk.engines.helpers.tests.test_mixin_lib import ReprMixinTestCase as EveryskLibReprMixinTestCase
|
|
63
|
+
from everysk.sdk.engines.helpers.tests.test_mixin_lib import ToDictMixinTestCase as EveryskLibToDictMixinTestCase
|
|
64
|
+
from everysk.sdk.engines.helpers.tests.test_python2 import NPUniqueTestCase as EveryskLibNPUniqueTestCase
|
|
65
|
+
from everysk.sdk.engines.helpers.tests.test_python2 import (
|
|
66
|
+
SortablePY2ObjectTestCase as EveryskLibSortablePY2ObjectTestCase,
|
|
67
|
+
)
|
|
68
|
+
from everysk.sdk.engines.helpers.tests.test_transform import TransformTestCase as EveryskLibTransformTestCase
|
|
69
|
+
from everysk.sdk.entities._tests.base import TestBaseEntity as EveryskLibTestBaseEntity
|
|
70
|
+
from everysk.sdk.entities._tests.base_list import TestEntityList as EveryskLibTestEntityList
|
|
71
|
+
from everysk.sdk.entities._tests.fields import TestBaseCurrencyField as EveryskLibTestBaseCurrencyField
|
|
72
|
+
from everysk.sdk.entities._tests.fields import TestEntityDateTimeField as EveryskLibTestEntityDateTimeField
|
|
73
|
+
from everysk.sdk.entities._tests.fields import TestEntityDescriptionField as EveryskLibTestEntityDescriptionField
|
|
74
|
+
from everysk.sdk.entities._tests.fields import TestEntityLinkUIDField as EveryskLibTestEntityLinkUIDField
|
|
75
|
+
from everysk.sdk.entities._tests.fields import TestEntityNameField as EveryskLibTestEntityNameField
|
|
76
|
+
from everysk.sdk.entities._tests.fields import TestEntityTagsField as EveryskLibTestEntityTagsField
|
|
77
|
+
from everysk.sdk.entities._tests.fields import TestEntityWorkspaceField as EveryskLibTestEntityWorkspaceField
|
|
78
|
+
from everysk.sdk.entities._tests.init import InitTestCase as EveryskLibInitTestCase
|
|
79
|
+
from everysk.sdk.entities._tests.query import QueryTestCase as EveryskLibQueryTestCase
|
|
80
|
+
from everysk.sdk.entities._tests.script import ScriptTestCase as EveryskLibScriptTestCase
|
|
81
|
+
from everysk.sdk.entities._tests.tags import TagsTestCase as EveryskLibTestTagsList
|
|
82
|
+
from everysk.sdk.entities.custom_index._tests.base import CustomIndexTestCase as EveryskLibCustomIndexTestCase
|
|
83
|
+
from everysk.sdk.entities.datastore.tests.base import DatastoreTestCase as EveryskLibDatastoreTestCase
|
|
84
|
+
from everysk.sdk.entities.file._tests.base import FileTestCase as EveryskLibFileTestCase
|
|
85
|
+
from everysk.sdk.entities.portfolio._tests.base import TestPortfolio as EveryskLibTestPortfolio
|
|
86
|
+
from everysk.sdk.entities.portfolio._tests.base import TestSecuritiesField as EveryskLibTestTestSecuritiesField
|
|
87
|
+
from everysk.sdk.entities.portfolio._tests.securities import TestSecurities as EveryskLibTestSecurities
|
|
88
|
+
from everysk.sdk.entities.portfolio._tests.security import TestSecurity as EveryskLibTestSecurity
|
|
89
|
+
from everysk.sdk.entities.private_security._tests.base import (
|
|
90
|
+
PrivateSecurityTestCase as EveryskLibPrivateSecurityTestCase,
|
|
91
|
+
)
|
|
92
|
+
from everysk.sdk.entities.report.tests.base import ReportTestCase as EveryskLibReportTestCase
|
|
93
|
+
from everysk.sdk.entities.secrets.tests.base import SecretsTestCase as EveryskLibSecretsTestCase
|
|
94
|
+
from everysk.sdk.entities.worker_execution.tests.base import (
|
|
95
|
+
WorkerExecutionTestCase as EveryskLibWorkerExecutionTestCase,
|
|
96
|
+
)
|
|
97
|
+
from everysk.sdk.entities.workflow_execution.tests.base import (
|
|
98
|
+
WorkflowExecutionTestCase as EveryskLibWorkflowExecutionTestCase,
|
|
99
|
+
)
|
|
100
|
+
from everysk.sdk.entities.workspace._tests.base import TestWorkspace as EveryskLibTestWorkspace
|
|
101
|
+
|
|
102
|
+
except ModuleNotFoundError as error:
|
|
103
|
+
# This will prevent running these tests if requests is not installed
|
|
104
|
+
if not error.args[0].startswith("No module named 'requests'"):
|
|
105
|
+
raise error
|
|
@@ -0,0 +1,47 @@
|
|
|
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.core.object import BaseDict
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
###############################################################################
|
|
14
|
+
# WorkerBase Class Implementation
|
|
15
|
+
###############################################################################
|
|
16
|
+
class WorkerBase(BaseDict):
|
|
17
|
+
|
|
18
|
+
workspace: str = None
|
|
19
|
+
script_inputs: BaseDict = None
|
|
20
|
+
inputs_info: BaseDict = None
|
|
21
|
+
worker_type: str = None
|
|
22
|
+
parallel_info: BaseDict = None
|
|
23
|
+
worker_id: str = None
|
|
24
|
+
workflow_id: str = None
|
|
25
|
+
workflow_execution_id: str = None
|
|
26
|
+
|
|
27
|
+
def __init__(self, args: BaseDict = Undefined, **kwargs):
|
|
28
|
+
if args is Undefined:
|
|
29
|
+
args = {}
|
|
30
|
+
kwargs.update(args)
|
|
31
|
+
super().__init__(**kwargs)
|
|
32
|
+
|
|
33
|
+
def handle_inputs(self) -> None:
|
|
34
|
+
if self.script_inputs:
|
|
35
|
+
for key, value in self.script_inputs.items():
|
|
36
|
+
setattr(self, key, value)
|
|
37
|
+
|
|
38
|
+
def handle_tasks(self) -> None:
|
|
39
|
+
raise NotImplementedError()
|
|
40
|
+
|
|
41
|
+
def handle_outputs(self) -> BaseDict:
|
|
42
|
+
raise NotImplementedError()
|
|
43
|
+
|
|
44
|
+
def run(self) -> BaseDict:
|
|
45
|
+
self.handle_inputs()
|
|
46
|
+
self.handle_tasks()
|
|
47
|
+
return self.handle_outputs()
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
+
###############################################################################
|
|
@@ -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
|
+
__all__ = ['create_application']
|
|
11
|
+
|
|
12
|
+
from starlette.applications import Lifespan, Starlette
|
|
13
|
+
|
|
14
|
+
from everysk.config import settings
|
|
15
|
+
from everysk.server.middlewares import Middleware, update_with_default_middlewares
|
|
16
|
+
from everysk.server.routing import Route
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
###############################################################################
|
|
20
|
+
# Public functions Implementation
|
|
21
|
+
###############################################################################
|
|
22
|
+
def create_application(
|
|
23
|
+
*, # This disables positional arguments for the function
|
|
24
|
+
routes: list[Route],
|
|
25
|
+
debug: bool = settings.EVERYSK_SERVER_DEBUG,
|
|
26
|
+
middlewares: list[Middleware] | None = None,
|
|
27
|
+
exception_handlers: dict[int | Exception, callable] | None = None,
|
|
28
|
+
on_startup: list[callable] | None = None,
|
|
29
|
+
on_shutdown: list[callable] | None = None,
|
|
30
|
+
lifespan: Lifespan | None = None,
|
|
31
|
+
**kwargs,
|
|
32
|
+
) -> Starlette:
|
|
33
|
+
"""
|
|
34
|
+
Create a Starlette application with the given routes, middleware and exception handlers.
|
|
35
|
+
By default the first middleware is the GZipMiddleware and SecurityHeadersMiddleware is the last one,
|
|
36
|
+
so you don't need to add them in the list.
|
|
37
|
+
Routes could be normal Starlette routes or the RouteLazy class that will lazy load the endpoint class.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
routes (list[Route]): A list of routes to serve incoming HTTP and WebSocket requests.
|
|
41
|
+
debug (bool, optional): Boolean indicating if debug tracebacks should be returned on errors. Defaults to False.
|
|
42
|
+
middlewares (list[Middleware], optional): A list of middleware to run for every request. Defaults to None.
|
|
43
|
+
exception_handlers (dict[int, callable], optional): A mapping of either integer status codes, or exception
|
|
44
|
+
class types onto callables which handle the exceptions. Defaults to None.
|
|
45
|
+
on_startup (list[callable], optional): A list of callables that will be run when the application starts up.
|
|
46
|
+
Defaults to None.
|
|
47
|
+
on_shutdown (list[callable], optional): A list of callables that run when the application is on shutdown.
|
|
48
|
+
Defaults to None.
|
|
49
|
+
lifespan (Lifespan, optional): An ASGI 3.0 Lifespan instance, or None to disable lifespan events.
|
|
50
|
+
Defaults to None.
|
|
51
|
+
"""
|
|
52
|
+
middlewares = update_with_default_middlewares(middlewares)
|
|
53
|
+
|
|
54
|
+
return Starlette(
|
|
55
|
+
debug=debug,
|
|
56
|
+
routes=routes,
|
|
57
|
+
middleware=middlewares,
|
|
58
|
+
exception_handlers=exception_handlers,
|
|
59
|
+
on_shutdown=on_shutdown,
|
|
60
|
+
on_startup=on_startup,
|
|
61
|
+
lifespan=lifespan,
|
|
62
|
+
**kwargs,
|
|
63
|
+
)
|