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.
Files changed (53) hide show
  1. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/PKG-INFO +1 -1
  2. esd_services_api_client-2.2.3/esd_services_api_client/_version.py +1 -0
  3. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/crystal/_connector.py +5 -0
  4. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/crystal/_models.py +13 -0
  5. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/telemetry/recorder.py +20 -12
  6. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/pyproject.toml +1 -1
  7. esd_services_api_client-2.2.1/esd_services_api_client/_version.py +0 -1
  8. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/LICENSE +0 -0
  9. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/README.md +0 -0
  10. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/__init__.py +0 -0
  11. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/beast/__init__.py +0 -0
  12. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/beast/v3/__init__.py +0 -0
  13. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/beast/v3/_connector.py +0 -0
  14. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/beast/v3/_models.py +0 -0
  15. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/README.md +0 -0
  16. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/__init__.py +0 -0
  17. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/_auth.py +0 -0
  18. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/_base.py +0 -0
  19. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/_connector.py +0 -0
  20. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/boxer/_models.py +0 -0
  21. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/common/__init__.py +0 -0
  22. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/crystal/__init__.py +0 -0
  23. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/crystal/_api_versions.py +0 -0
  24. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/README.md +0 -0
  25. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/__init__.py +0 -0
  26. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/abstractions/__init__.py +0 -0
  27. {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
  28. {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
  29. {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
  30. {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
  31. {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
  32. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/__init__.py +0 -0
  33. {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
  34. {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
  35. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/distributed.py +0 -0
  36. {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
  37. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/minimalistic.py +0 -0
  38. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/algorithms/recursive.py +0 -0
  39. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/configurations/__init__.py +0 -0
  40. {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
  41. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/core/__init__.py +0 -0
  42. {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
  43. {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
  44. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/exceptions/__init__.py +0 -0
  45. {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
  46. {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
  47. {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
  48. {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
  49. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/input/__init__.py +0 -0
  50. {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
  51. {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
  52. {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
  53. {esd_services_api_client-2.2.1 → esd_services_api_client-2.2.3}/esd_services_api_client/nexus/telemetry/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: esd-services-api-client
3
- Version: 2.2.1
3
+ Version: 2.2.3
4
4
  Summary: Python clients for ESD services
5
5
  Home-page: https://github.com/SneaksAndData/esd-services-api-client
6
6
  License: Apache 2.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
- self._storage_client.save_data_as_blob(
63
- data=entity_to_record,
64
- blob_path=DataSocket(
65
- alias="telemetry",
66
- data_path=f"{self._telemetry_base_path}/{entity_name}/{run_id}",
67
- data_format="null",
68
- ).parse_data_path(),
69
- serialization_format=DictJsonSerializationFormat
70
- if isinstance(entity_to_record, dict)
71
- else DataFrameParquetSerializationFormat,
72
- overwrite=True,
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.1"
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'