esd-services-api-client 2.0.0__py3-none-any.whl → 2.0.2__py3-none-any.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.
- esd_services_api_client/_version.py +1 -1
- esd_services_api_client/crystal/_connector.py +7 -7
- esd_services_api_client/nexus/README.md +280 -0
- esd_services_api_client/nexus/__init__.py +18 -0
- esd_services_api_client/nexus/abstractions/__init__.py +18 -0
- esd_services_api_client/nexus/abstractions/logger_factory.py +64 -0
- esd_services_api_client/nexus/abstractions/nexus_object.py +64 -0
- esd_services_api_client/nexus/abstractions/socket_provider.py +51 -0
- esd_services_api_client/nexus/algorithms/__init__.py +22 -0
- esd_services_api_client/nexus/algorithms/_baseline_algorithm.py +56 -0
- esd_services_api_client/nexus/algorithms/distributed.py +53 -0
- esd_services_api_client/nexus/algorithms/minimalistic.py +44 -0
- esd_services_api_client/nexus/algorithms/recursive.py +58 -0
- esd_services_api_client/nexus/core/__init__.py +18 -0
- esd_services_api_client/nexus/core/app_core.py +259 -0
- esd_services_api_client/nexus/core/app_dependencies.py +205 -0
- esd_services_api_client/nexus/exceptions/__init__.py +20 -0
- esd_services_api_client/nexus/exceptions/_nexus_error.py +30 -0
- esd_services_api_client/nexus/exceptions/input_reader_error.py +51 -0
- esd_services_api_client/nexus/exceptions/startup_error.py +48 -0
- esd_services_api_client/nexus/input/__init__.py +22 -0
- esd_services_api_client/nexus/input/input_processor.py +94 -0
- esd_services_api_client/nexus/input/input_reader.py +109 -0
- esd_services_api_client/nexus/input/payload_reader.py +83 -0
- {esd_services_api_client-2.0.0.dist-info → esd_services_api_client-2.0.2.dist-info}/METADATA +5 -2
- esd_services_api_client-2.0.2.dist-info/RECORD +43 -0
- esd_services_api_client-2.0.0.dist-info/RECORD +0 -21
- {esd_services_api_client-2.0.0.dist-info → esd_services_api_client-2.0.2.dist-info}/LICENSE +0 -0
- {esd_services_api_client-2.0.0.dist-info → esd_services_api_client-2.0.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
"""
|
2
|
+
Custom exceptions.
|
3
|
+
"""
|
4
|
+
|
5
|
+
# Copyright (c) 2023. ECCO Sneaks & Data
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
|
21
|
+
from esd_services_api_client.nexus.exceptions import FatalNexusError
|
22
|
+
|
23
|
+
|
24
|
+
class FatalServiceStartupError(FatalNexusError):
|
25
|
+
"""
|
26
|
+
Service startup error that shuts down the Nexus.
|
27
|
+
"""
|
28
|
+
|
29
|
+
def __init__(self, service: str, underlying: BaseException):
|
30
|
+
super().__init__()
|
31
|
+
self.with_traceback(underlying.__traceback__)
|
32
|
+
self._service = service
|
33
|
+
|
34
|
+
def __str__(self) -> str:
|
35
|
+
return f"Algorithm initialization failed on service {self._service} startup. Review the traceback for more information"
|
36
|
+
|
37
|
+
|
38
|
+
class FatalStartupConfigurationError(FatalNexusError):
|
39
|
+
"""
|
40
|
+
Service configuration error that shuts down the Nexus.
|
41
|
+
"""
|
42
|
+
|
43
|
+
def __init__(self, missing_entry: str):
|
44
|
+
super().__init__()
|
45
|
+
self._missing_entry = missing_entry
|
46
|
+
|
47
|
+
def __str__(self) -> str:
|
48
|
+
return f"Algorithm initialization failed due to a missing configuration entry: {self._missing_entry}."
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"""
|
2
|
+
Import index.
|
3
|
+
"""
|
4
|
+
|
5
|
+
# Copyright (c) 2023. ECCO Sneaks & Data
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
|
21
|
+
from esd_services_api_client.nexus.input.input_processor import *
|
22
|
+
from esd_services_api_client.nexus.input.input_reader import *
|
@@ -0,0 +1,94 @@
|
|
1
|
+
"""
|
2
|
+
Input processing.
|
3
|
+
"""
|
4
|
+
|
5
|
+
# Copyright (c) 2023. ECCO Sneaks & Data
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
import asyncio
|
21
|
+
from abc import abstractmethod
|
22
|
+
from typing import Dict, Union, Type
|
23
|
+
|
24
|
+
import deltalake
|
25
|
+
from adapta.metrics import MetricsProvider
|
26
|
+
|
27
|
+
import azure.core.exceptions
|
28
|
+
|
29
|
+
from pandas import DataFrame as PandasDataFrame
|
30
|
+
|
31
|
+
from esd_services_api_client.nexus.abstractions.nexus_object import (
|
32
|
+
NexusObject,
|
33
|
+
TPayload,
|
34
|
+
)
|
35
|
+
from esd_services_api_client.nexus.abstractions.logger_factory import LoggerFactory
|
36
|
+
from esd_services_api_client.nexus.exceptions.input_reader_error import (
|
37
|
+
FatalInputReaderError,
|
38
|
+
TransientInputReaderError,
|
39
|
+
)
|
40
|
+
from esd_services_api_client.nexus.input.input_reader import InputReader
|
41
|
+
|
42
|
+
|
43
|
+
class InputProcessor(NexusObject[TPayload]):
|
44
|
+
"""
|
45
|
+
Base class for raw data processing into algorithm input.
|
46
|
+
"""
|
47
|
+
|
48
|
+
def __init__(
|
49
|
+
self,
|
50
|
+
*readers: InputReader,
|
51
|
+
payload: TPayload,
|
52
|
+
metrics_provider: MetricsProvider,
|
53
|
+
logger_factory: LoggerFactory,
|
54
|
+
):
|
55
|
+
super().__init__(metrics_provider, logger_factory)
|
56
|
+
self._readers = readers
|
57
|
+
self._payload = payload
|
58
|
+
|
59
|
+
def _get_exc_type(
|
60
|
+
self, ex: BaseException
|
61
|
+
) -> Union[Type[FatalInputReaderError], Type[TransientInputReaderError]]:
|
62
|
+
match type(ex):
|
63
|
+
case azure.core.exceptions.HttpResponseError, deltalake.PyDeltaTableError:
|
64
|
+
return TransientInputReaderError
|
65
|
+
case azure.core.exceptions.AzureError, azure.core.exceptions.ClientAuthenticationError:
|
66
|
+
return FatalInputReaderError
|
67
|
+
case _:
|
68
|
+
return FatalInputReaderError
|
69
|
+
|
70
|
+
async def _read_input(self) -> Dict[str, PandasDataFrame]:
|
71
|
+
def get_result(alias: str, completed_task: asyncio.Task) -> PandasDataFrame:
|
72
|
+
reader_exc = completed_task.exception()
|
73
|
+
if reader_exc:
|
74
|
+
raise self._get_exc_type(reader_exc)(alias, reader_exc)
|
75
|
+
|
76
|
+
return completed_task.result()
|
77
|
+
|
78
|
+
async def _read(input_reader: InputReader):
|
79
|
+
async with input_reader as instance:
|
80
|
+
return await instance.read()
|
81
|
+
|
82
|
+
read_tasks: dict[str, asyncio.Task] = {
|
83
|
+
reader.socket.alias: asyncio.create_task(_read(reader))
|
84
|
+
for reader in self._readers
|
85
|
+
}
|
86
|
+
await asyncio.wait(fs=read_tasks.values())
|
87
|
+
|
88
|
+
return {alias: get_result(alias, task) for alias, task in read_tasks.items()}
|
89
|
+
|
90
|
+
@abstractmethod
|
91
|
+
async def process_input(self, **kwargs) -> Dict[str, PandasDataFrame]:
|
92
|
+
"""
|
93
|
+
Input processing logic. Implement this method to prepare data for your algorithm code.
|
94
|
+
"""
|
@@ -0,0 +1,109 @@
|
|
1
|
+
"""
|
2
|
+
Input reader.
|
3
|
+
"""
|
4
|
+
|
5
|
+
# Copyright (c) 2023. ECCO Sneaks & Data
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
import re
|
21
|
+
from abc import abstractmethod
|
22
|
+
from functools import partial
|
23
|
+
from typing import Optional
|
24
|
+
|
25
|
+
from adapta.metrics import MetricsProvider
|
26
|
+
from adapta.process_communication import DataSocket
|
27
|
+
from adapta.storage.query_enabled_store import QueryEnabledStore
|
28
|
+
from adapta.utils.decorators._logging import run_time_metrics_async
|
29
|
+
|
30
|
+
from pandas import DataFrame as PandasDataFrame
|
31
|
+
|
32
|
+
from esd_services_api_client.nexus.abstractions.nexus_object import (
|
33
|
+
NexusObject,
|
34
|
+
TPayload,
|
35
|
+
)
|
36
|
+
from esd_services_api_client.nexus.abstractions.logger_factory import LoggerFactory
|
37
|
+
|
38
|
+
|
39
|
+
class InputReader(NexusObject[TPayload]):
|
40
|
+
"""
|
41
|
+
Base class for a raw data reader.
|
42
|
+
"""
|
43
|
+
|
44
|
+
def __init__(
|
45
|
+
self,
|
46
|
+
socket: DataSocket,
|
47
|
+
store: QueryEnabledStore,
|
48
|
+
metrics_provider: MetricsProvider,
|
49
|
+
logger_factory: LoggerFactory,
|
50
|
+
payload: TPayload,
|
51
|
+
*readers: "InputReader"
|
52
|
+
):
|
53
|
+
super().__init__(metrics_provider, logger_factory)
|
54
|
+
self.socket = socket
|
55
|
+
self._store = store
|
56
|
+
self._data: Optional[PandasDataFrame] = None
|
57
|
+
self._readers = readers
|
58
|
+
self._payload = payload
|
59
|
+
|
60
|
+
@property
|
61
|
+
def data(self) -> Optional[PandasDataFrame]:
|
62
|
+
"""
|
63
|
+
Data read by this reader.
|
64
|
+
"""
|
65
|
+
return self._data
|
66
|
+
|
67
|
+
@abstractmethod
|
68
|
+
async def _read_input(self) -> PandasDataFrame:
|
69
|
+
"""
|
70
|
+
Actual data reader logic. Implementing this method is mandatory for the reader to work
|
71
|
+
"""
|
72
|
+
|
73
|
+
@property
|
74
|
+
def _metric_name(self) -> str:
|
75
|
+
return re.sub(
|
76
|
+
r"(?<!^)(?=[A-Z])",
|
77
|
+
"_",
|
78
|
+
self.__class__.__name__.lower().replace("reader", ""),
|
79
|
+
)
|
80
|
+
|
81
|
+
@property
|
82
|
+
def _metric_tags(self) -> dict[str, str]:
|
83
|
+
return {"entity": self._metric_name}
|
84
|
+
|
85
|
+
async def read(self) -> PandasDataFrame:
|
86
|
+
"""
|
87
|
+
Coroutine that reads the data from external store and converts it to a dataframe.
|
88
|
+
"""
|
89
|
+
|
90
|
+
@run_time_metrics_async(
|
91
|
+
metric_name="read_input",
|
92
|
+
on_finish_message_template="Finished reading {entity} from path {data_path} in {elapsed:.2f}s seconds",
|
93
|
+
template_args={
|
94
|
+
"entity": self._metric_name.upper(),
|
95
|
+
"data_path": self.socket.data_path,
|
96
|
+
},
|
97
|
+
)
|
98
|
+
async def _read(**_) -> PandasDataFrame:
|
99
|
+
if not self._data:
|
100
|
+
self._data = await self._read_input()
|
101
|
+
|
102
|
+
return self._data
|
103
|
+
|
104
|
+
return await partial(
|
105
|
+
_read,
|
106
|
+
metric_tags=self._metric_tags,
|
107
|
+
metrics_provider=self._metrics_provider,
|
108
|
+
logger=self._logger,
|
109
|
+
)()
|
@@ -0,0 +1,83 @@
|
|
1
|
+
"""
|
2
|
+
Code infrastructure for manipulating payload received from Crystal SAS URI
|
3
|
+
"""
|
4
|
+
|
5
|
+
# Copyright (c) 2023. ECCO Sneaks & Data
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
from dataclasses import dataclass
|
21
|
+
|
22
|
+
from typing import final, Optional, Type
|
23
|
+
|
24
|
+
from adapta.storage.models.format import DictJsonSerializationFormat
|
25
|
+
from adapta.utils import session_with_retries
|
26
|
+
|
27
|
+
from dataclasses_json import DataClassJsonMixin
|
28
|
+
|
29
|
+
|
30
|
+
@dataclass
|
31
|
+
class AlgorithmPayload(DataClassJsonMixin):
|
32
|
+
"""
|
33
|
+
Base class for algorithm payload
|
34
|
+
"""
|
35
|
+
|
36
|
+
def validate(self):
|
37
|
+
"""
|
38
|
+
Optional post-validation of the data. Define this method to analyze class contents after payload has been read and deserialized.
|
39
|
+
"""
|
40
|
+
|
41
|
+
def __post_init__(self):
|
42
|
+
self.validate()
|
43
|
+
|
44
|
+
|
45
|
+
@final
|
46
|
+
class AlgorithmPayloadReader:
|
47
|
+
"""
|
48
|
+
Crystal Payload Reader - receives the payload from the URI and deserializes it into the specified type
|
49
|
+
"""
|
50
|
+
|
51
|
+
async def __aenter__(self):
|
52
|
+
if not self._http:
|
53
|
+
self._http = session_with_retries()
|
54
|
+
http_response = self._http.get(url=self._payload_uri)
|
55
|
+
http_response.raise_for_status()
|
56
|
+
self._payload = self._payload_type.from_dict(
|
57
|
+
DictJsonSerializationFormat().deserialize(http_response.content)
|
58
|
+
)
|
59
|
+
return self
|
60
|
+
|
61
|
+
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
62
|
+
self._http.close()
|
63
|
+
self._http = None
|
64
|
+
|
65
|
+
def __init__(self, payload_uri: str, payload_type: Type[AlgorithmPayload]):
|
66
|
+
self._http = session_with_retries()
|
67
|
+
self._payload: Optional[AlgorithmPayload] = None
|
68
|
+
self._payload_uri = payload_uri
|
69
|
+
self._payload_type = payload_type
|
70
|
+
|
71
|
+
@property
|
72
|
+
def payload_uri(self) -> str:
|
73
|
+
"""
|
74
|
+
Uri of the paylod for the algorithm
|
75
|
+
"""
|
76
|
+
return self._payload_uri
|
77
|
+
|
78
|
+
@property
|
79
|
+
def payload(self) -> Optional[AlgorithmPayload]:
|
80
|
+
"""
|
81
|
+
Payload data deserialized into the user class.
|
82
|
+
"""
|
83
|
+
return self._payload
|
{esd_services_api_client-2.0.0.dist-info → esd_services_api_client-2.0.2.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: esd-services-api-client
|
3
|
-
Version: 2.0.
|
3
|
+
Version: 2.0.2
|
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
|
@@ -15,9 +15,12 @@ Classifier: Programming Language :: Python :: 3.9
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
17
17
|
Provides-Extra: azure
|
18
|
-
|
18
|
+
Provides-Extra: nexus
|
19
|
+
Requires-Dist: adapta[azure,datadog,storage] (>=2.6.6,<3.0.0)
|
19
20
|
Requires-Dist: azure-identity (>=1.7,<1.8) ; extra == "azure"
|
20
21
|
Requires-Dist: dataclasses-json (>=0.6.0,<0.7.0)
|
22
|
+
Requires-Dist: httpx (>=0.26.0,<0.27.0) ; extra == "nexus"
|
23
|
+
Requires-Dist: injector (>=0.21.0,<0.22.0) ; extra == "nexus"
|
21
24
|
Requires-Dist: pycryptodome (>=3.15,<3.16)
|
22
25
|
Requires-Dist: pyjwt (>=2.4.0,<2.5.0)
|
23
26
|
Project-URL: Repository, https://github.com/SneaksAndData/esd-services-api-client
|
@@ -0,0 +1,43 @@
|
|
1
|
+
esd_services_api_client/__init__.py,sha256=rP0njtEgVSMm-sOVayVfcRUrrubl4lme7HI2zS678Lo,598
|
2
|
+
esd_services_api_client/_version.py,sha256=kumiGImhzOTlTrRM-6jDo2mNnVHGO_2vxtrhB0nzAiw,22
|
3
|
+
esd_services_api_client/beast/__init__.py,sha256=NTaz_7YoLPK8MCLwbwqH7rW1zDWLxXu2T7fGmMmRxyg,718
|
4
|
+
esd_services_api_client/beast/v3/__init__.py,sha256=TRjB4-T6eIORpMvdylb32_GinrIpYNFmAdshSC1HqHg,749
|
5
|
+
esd_services_api_client/beast/v3/_connector.py,sha256=oPizDQ1KOKOfiyh-jAofKodlpRzrRiELv-rmP_o_oio,11473
|
6
|
+
esd_services_api_client/beast/v3/_models.py,sha256=hvh8QlwYLCfdBJxUKPutOq0xFn9rUU1q6UgHEpoZaFM,6761
|
7
|
+
esd_services_api_client/boxer/README.md,sha256=-MAhYUPvmEMcgx_lo_2PlH_gZI1lndGv8fnDQYIpurU,3618
|
8
|
+
esd_services_api_client/boxer/__init__.py,sha256=OYsWvdnLan0kmjUcH4I2-m1rbPeARKp5iqhp8uyudPk,780
|
9
|
+
esd_services_api_client/boxer/_auth.py,sha256=vA7T9y0oZV2f17UWQ2or9CK8vAsNnHB10G5HNQe1l1I,7440
|
10
|
+
esd_services_api_client/boxer/_base.py,sha256=PSU08QzTKFkXfzx7fF5FIHBOZXshxNEd1J_qKGo0Rd0,976
|
11
|
+
esd_services_api_client/boxer/_connector.py,sha256=kATr7IyQKtvsGlvgVInO_DsGGC4yCC1aW3RxoXt-QIM,8672
|
12
|
+
esd_services_api_client/boxer/_models.py,sha256=q_xRHOXlRroKrDrNUxQJUFGSotxYvUbRY1rYmx8UfJg,1697
|
13
|
+
esd_services_api_client/common/__init__.py,sha256=rP0njtEgVSMm-sOVayVfcRUrrubl4lme7HI2zS678Lo,598
|
14
|
+
esd_services_api_client/crystal/__init__.py,sha256=afSGQRkDic0ECsJfgu3b291kX8CyU57sjreqxj5cx-s,787
|
15
|
+
esd_services_api_client/crystal/_api_versions.py,sha256=2BMiQRS0D8IEpWCCys3dge5alVBRCZrOuCR1QAn8UIM,832
|
16
|
+
esd_services_api_client/crystal/_connector.py,sha256=WjfMezWXia41Z8aiNupaT577fk9Sx6uy6V23O6y9hfI,12870
|
17
|
+
esd_services_api_client/crystal/_models.py,sha256=eRhGAl8LjglCyIFwf1bcFBhjbpSuRYucuF2LO388L2E,4025
|
18
|
+
esd_services_api_client/nexus/README.md,sha256=6fGBYTvzkmZH9Yk9VcPqWCtqU_D2zleG1rv1U3GA3IM,7721
|
19
|
+
esd_services_api_client/nexus/__init__.py,sha256=e7RPs-qJNQqDHj121TeYx-_YadZSOIyJuAPyhSSXRsE,622
|
20
|
+
esd_services_api_client/nexus/abstractions/__init__.py,sha256=e7RPs-qJNQqDHj121TeYx-_YadZSOIyJuAPyhSSXRsE,622
|
21
|
+
esd_services_api_client/nexus/abstractions/logger_factory.py,sha256=JHl_t0d0ra_k-EixZlkw-s746wHUdBhSU6preqoARtk,2031
|
22
|
+
esd_services_api_client/nexus/abstractions/nexus_object.py,sha256=E9iYmjYjkmS0Uv-VS1ixRhi3zdtQfcSNx4gxad5_aZ0,1780
|
23
|
+
esd_services_api_client/nexus/abstractions/socket_provider.py,sha256=Mv9BWdxw8VY4Gi4EOrdxWK1zsR3-fqIbpyF1xHWchbE,1495
|
24
|
+
esd_services_api_client/nexus/algorithms/__init__.py,sha256=uWX24NHUnUcnOJN2IIp1kaaozCC0rOmB36WxHBCapCY,823
|
25
|
+
esd_services_api_client/nexus/algorithms/_baseline_algorithm.py,sha256=4Gqp8qV5nunZ_DwZyHAu0vLuF1rls8nnq2zoHy2orME,1825
|
26
|
+
esd_services_api_client/nexus/algorithms/distributed.py,sha256=iWjx9D6g-ASwTWPkQ9GmInTLymVlxl7UkfEBcEfnkmc,1628
|
27
|
+
esd_services_api_client/nexus/algorithms/minimalistic.py,sha256=9KvIXXsiOZ9wAOvrIZuOlNYcJLB-SjlQoNpICJu-qeQ,1366
|
28
|
+
esd_services_api_client/nexus/algorithms/recursive.py,sha256=2YuAeYZ6-K5hcY8NEAAJVyGhtVVQMTZ7wjkWPPo8qeE,1829
|
29
|
+
esd_services_api_client/nexus/core/__init__.py,sha256=e7RPs-qJNQqDHj121TeYx-_YadZSOIyJuAPyhSSXRsE,622
|
30
|
+
esd_services_api_client/nexus/core/app_core.py,sha256=bwbFzbjx8PwZWHfHsEYDCGAjJuTzmVKuunSeMU54tHs,8877
|
31
|
+
esd_services_api_client/nexus/core/app_dependencies.py,sha256=afX7QrUEuaLnFssaCTohXBt7QCeGJ0MuovF62CZTZ34,5672
|
32
|
+
esd_services_api_client/nexus/exceptions/__init__.py,sha256=JgPXhrvBIi0U1QOF90TYHS8jv_SBQEoRLsEg6rrtRoc,691
|
33
|
+
esd_services_api_client/nexus/exceptions/_nexus_error.py,sha256=b3L8JnNvV2jdxNfuFWh9-j4kVb_VX7gNH5WHKcC-R78,890
|
34
|
+
esd_services_api_client/nexus/exceptions/input_reader_error.py,sha256=D-xYTKRNREQ2-NGhc88GHOmXCvLNsIVQsH8wf0LLC_0,1760
|
35
|
+
esd_services_api_client/nexus/exceptions/startup_error.py,sha256=f2PIOSdLgT-42eKD6ec8p7nROADshMawCsDGDUbxO_w,1546
|
36
|
+
esd_services_api_client/nexus/input/__init__.py,sha256=0k_HMIP4NPC5O2ixKJPgKsLzYeHS14DhibF_MUtez1c,753
|
37
|
+
esd_services_api_client/nexus/input/input_processor.py,sha256=MiXXd_APrG85Pi-Ke68_UHNEV7T_QHN1hU1WAPWoTsw,3187
|
38
|
+
esd_services_api_client/nexus/input/input_reader.py,sha256=uxTAGX5xNhjTFpEsVQnr8BkVgpIH_U_om54hh3pvJ3s,3269
|
39
|
+
esd_services_api_client/nexus/input/payload_reader.py,sha256=__r_QjIFRAWwx56X5WUK1qensJUae0vZEb422dzOgSY,2511
|
40
|
+
esd_services_api_client-2.0.2.dist-info/LICENSE,sha256=0gS6zXsPp8qZhzi1xaGCIYPzb_0e8on7HCeFJe8fOpw,10693
|
41
|
+
esd_services_api_client-2.0.2.dist-info/METADATA,sha256=rNOu2tUM-mWp4kQbt13EpUweANcI808ZNCFmMdcqQRM,1236
|
42
|
+
esd_services_api_client-2.0.2.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
43
|
+
esd_services_api_client-2.0.2.dist-info/RECORD,,
|
@@ -1,21 +0,0 @@
|
|
1
|
-
esd_services_api_client/__init__.py,sha256=rP0njtEgVSMm-sOVayVfcRUrrubl4lme7HI2zS678Lo,598
|
2
|
-
esd_services_api_client/_version.py,sha256=hwOJuFUEKtsgiOt4l6op9s-hviovM6TK1uCdtRNWY4E,22
|
3
|
-
esd_services_api_client/beast/__init__.py,sha256=NTaz_7YoLPK8MCLwbwqH7rW1zDWLxXu2T7fGmMmRxyg,718
|
4
|
-
esd_services_api_client/beast/v3/__init__.py,sha256=TRjB4-T6eIORpMvdylb32_GinrIpYNFmAdshSC1HqHg,749
|
5
|
-
esd_services_api_client/beast/v3/_connector.py,sha256=oPizDQ1KOKOfiyh-jAofKodlpRzrRiELv-rmP_o_oio,11473
|
6
|
-
esd_services_api_client/beast/v3/_models.py,sha256=hvh8QlwYLCfdBJxUKPutOq0xFn9rUU1q6UgHEpoZaFM,6761
|
7
|
-
esd_services_api_client/boxer/README.md,sha256=-MAhYUPvmEMcgx_lo_2PlH_gZI1lndGv8fnDQYIpurU,3618
|
8
|
-
esd_services_api_client/boxer/__init__.py,sha256=OYsWvdnLan0kmjUcH4I2-m1rbPeARKp5iqhp8uyudPk,780
|
9
|
-
esd_services_api_client/boxer/_auth.py,sha256=vA7T9y0oZV2f17UWQ2or9CK8vAsNnHB10G5HNQe1l1I,7440
|
10
|
-
esd_services_api_client/boxer/_base.py,sha256=PSU08QzTKFkXfzx7fF5FIHBOZXshxNEd1J_qKGo0Rd0,976
|
11
|
-
esd_services_api_client/boxer/_connector.py,sha256=kATr7IyQKtvsGlvgVInO_DsGGC4yCC1aW3RxoXt-QIM,8672
|
12
|
-
esd_services_api_client/boxer/_models.py,sha256=q_xRHOXlRroKrDrNUxQJUFGSotxYvUbRY1rYmx8UfJg,1697
|
13
|
-
esd_services_api_client/common/__init__.py,sha256=rP0njtEgVSMm-sOVayVfcRUrrubl4lme7HI2zS678Lo,598
|
14
|
-
esd_services_api_client/crystal/__init__.py,sha256=afSGQRkDic0ECsJfgu3b291kX8CyU57sjreqxj5cx-s,787
|
15
|
-
esd_services_api_client/crystal/_api_versions.py,sha256=2BMiQRS0D8IEpWCCys3dge5alVBRCZrOuCR1QAn8UIM,832
|
16
|
-
esd_services_api_client/crystal/_connector.py,sha256=yJObx9kHtaUmjry_B7EaJqbxn6t9aR0ypgrCGsCO5pI,12854
|
17
|
-
esd_services_api_client/crystal/_models.py,sha256=eRhGAl8LjglCyIFwf1bcFBhjbpSuRYucuF2LO388L2E,4025
|
18
|
-
esd_services_api_client-2.0.0.dist-info/LICENSE,sha256=0gS6zXsPp8qZhzi1xaGCIYPzb_0e8on7HCeFJe8fOpw,10693
|
19
|
-
esd_services_api_client-2.0.0.dist-info/METADATA,sha256=p6kY-uup2AS5oQ66wcPuMpfWPxogN0FbzKcfEA4XPX4,1077
|
20
|
-
esd_services_api_client-2.0.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
21
|
-
esd_services_api_client-2.0.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|