esd-services-api-client 2.2.1__tar.gz → 2.2.3__tar.gz
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.
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/PKG-INFO +1 -1
- esd_services_api_client-2.2.3/esd_services_api_client/_version.py +1 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/crystal/_connector.py +5 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/crystal/_models.py +13 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/telemetry/recorder.py +20 -12
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/pyproject.toml +1 -1
- esd_services_api_client-2.2.1/esd_services_api_client/_version.py +0 -1
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/LICENSE +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/README.md +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/beast/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/beast/v3/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/beast/v3/_connector.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/beast/v3/_models.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/README.md +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/_auth.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/_base.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/_connector.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/_models.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/common/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/crystal/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/crystal/_api_versions.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/README.md +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/abstractions/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/abstractions/algrorithm_cache.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/abstractions/input_object.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/abstractions/logger_factory.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/abstractions/nexus_object.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/abstractions/socket_provider.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/_baseline_algorithm.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/_remote_algorithm.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/distributed.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/forked_algorithm.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/minimalistic.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/recursive.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/configurations/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/configurations/algorithm_configuration.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/core/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/core/app_core.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/core/app_dependencies.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/exceptions/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/exceptions/_nexus_error.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/exceptions/cache_errors.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/exceptions/input_reader_error.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/exceptions/startup_error.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/input/__init__.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/input/input_processor.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/input/input_reader.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/input/payload_reader.py +0 -0
- {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/telemetry/__init__.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = '2.2.3'
|
@@ -37,6 +37,7 @@ from esd_services_api_client.crystal._models import (
|
|
37
37
|
AlgorithmRequest,
|
38
38
|
AlgorithmConfiguration,
|
39
39
|
RequestLifeCycleStage,
|
40
|
+
ParentRequest,
|
40
41
|
)
|
41
42
|
|
42
43
|
T = TypeVar("T") # pylint: disable=C0103
|
@@ -124,6 +125,7 @@ class CrystalConnector:
|
|
124
125
|
RequestLifeCycleStage.FAILED,
|
125
126
|
RequestLifeCycleStage.SCHEDULING_TIMEOUT,
|
126
127
|
RequestLifeCycleStage.DEADLINE_EXCEEDED,
|
128
|
+
RequestLifeCycleStage.CANCELLED,
|
127
129
|
]
|
128
130
|
|
129
131
|
@classmethod
|
@@ -154,6 +156,7 @@ class CrystalConnector:
|
|
154
156
|
algorithm: str,
|
155
157
|
payload: Dict,
|
156
158
|
custom_config: Optional[AlgorithmConfiguration] = None,
|
159
|
+
parent_request: Optional[ParentRequest] = None,
|
157
160
|
tag: Optional[str] = None,
|
158
161
|
) -> str:
|
159
162
|
"""
|
@@ -162,6 +165,7 @@ class CrystalConnector:
|
|
162
165
|
:param algorithm: Name of a connected algorithm.
|
163
166
|
:param payload: Algorithm payload.
|
164
167
|
:param custom_config: Customized config for this run.
|
168
|
+
:param parent_request: Parent request for this run.
|
165
169
|
:param tag: Client-side submission identifier.
|
166
170
|
:return: Request identifier assigned to the job by Crystal.
|
167
171
|
"""
|
@@ -176,6 +180,7 @@ class CrystalConnector:
|
|
176
180
|
algorithm_name=algorithm,
|
177
181
|
algorithm_parameters=payload,
|
178
182
|
custom_configuration=custom_config,
|
183
|
+
parent_request=parent_request,
|
179
184
|
tag=tag,
|
180
185
|
).to_dict()
|
181
186
|
|
@@ -36,6 +36,7 @@ class RequestLifeCycleStage(Enum):
|
|
36
36
|
SCHEDULING_TIMEOUT = "SCHEDULING_TIMEOUT"
|
37
37
|
DEADLINE_EXCEEDED = "DEADLINE_EXCEEDED"
|
38
38
|
THROTTLED = "THROTTLED"
|
39
|
+
CANCELLED = "CANCELLED"
|
39
40
|
|
40
41
|
|
41
42
|
@dataclass_json(letter_case=LetterCase.CAMEL)
|
@@ -133,6 +134,17 @@ class AlgorithmConfiguration(DataClassJsonMixin):
|
|
133
134
|
speculative_attempts: Optional[int] = None
|
134
135
|
|
135
136
|
|
137
|
+
@dataclass_json(letter_case=LetterCase.CAMEL)
|
138
|
+
@dataclass
|
139
|
+
class ParentRequest(DataClassJsonMixin):
|
140
|
+
"""
|
141
|
+
Used to specify crystal parent job for a new crystal job.
|
142
|
+
"""
|
143
|
+
|
144
|
+
request_id: Optional[str] = None
|
145
|
+
algorithm_name: Optional[str] = None
|
146
|
+
|
147
|
+
|
136
148
|
@dataclass_json(letter_case=LetterCase.CAMEL)
|
137
149
|
@dataclass
|
138
150
|
class AlgorithmRequest(DataClassJsonMixin):
|
@@ -143,4 +155,5 @@ class AlgorithmRequest(DataClassJsonMixin):
|
|
143
155
|
algorithm_parameters: Dict
|
144
156
|
algorithm_name: Optional[str] = None
|
145
157
|
custom_configuration: Optional[AlgorithmConfiguration] = None
|
158
|
+
parent_request: Optional[ParentRequest] = None
|
146
159
|
tag: Optional[str] = None
|
@@ -59,18 +59,26 @@ class TelemetryRecorder(NexusCoreObject):
|
|
59
59
|
entity_name=entity_name,
|
60
60
|
run_id=run_id,
|
61
61
|
)
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
62
|
+
if not isinstance(entity_to_record, dict) and not isinstance(
|
63
|
+
entity_to_record, pd.DataFrame
|
64
|
+
):
|
65
|
+
self._logger.warning(
|
66
|
+
"Unsupported data type: {telemetry_entity_type}. Telemetry recording skipped.",
|
67
|
+
telemetry_entity_type=type(entity_to_record),
|
68
|
+
)
|
69
|
+
else:
|
70
|
+
self._storage_client.save_data_as_blob(
|
71
|
+
data=entity_to_record,
|
72
|
+
blob_path=DataSocket(
|
73
|
+
alias="telemetry",
|
74
|
+
data_path=f"{self._telemetry_base_path}/{entity_name}/{run_id}",
|
75
|
+
data_format="null",
|
76
|
+
).parse_data_path(),
|
77
|
+
serialization_format=DictJsonSerializationFormat
|
78
|
+
if isinstance(entity_to_record, dict)
|
79
|
+
else DataFrameParquetSerializationFormat,
|
80
|
+
overwrite=True,
|
81
|
+
)
|
74
82
|
|
75
83
|
telemetry_tasks = [
|
76
84
|
asyncio.create_task(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "esd-services-api-client"
|
3
|
-
version = "2.2.
|
3
|
+
version = "2.2.3"
|
4
4
|
description = "Python clients for ESD services"
|
5
5
|
authors = ["ECCO Sneaks & Data <esdsupport@ecco.com>"]
|
6
6
|
maintainers = ['GZU <gzu@ecco.com>', 'JRB <ext-jrb@ecco.com>', 'VISA <visa@ecco.com>']
|
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = '2.2.1'
|
File without changes
|
File without changes
|
{esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|