esd-services-api-client 2.6.2a158.dev6__tar.gz → 2.6.3a155.dev7__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.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/PKG-INFO +1 -1
- esd_services_api_client-2.6.3a155.dev7/esd_services_api_client/_version.py +1 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/README.md +5 -0
- esd_services_api_client-2.6.3a155.dev7/esd_services_api_client/nexus/abstractions/metrics_provider_factory.py +106 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/core/app_core.py +78 -17
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/core/app_dependencies.py +0 -25
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/pyproject.toml +1 -1
- esd_services_api_client-2.6.2a158.dev6/esd_services_api_client/_version.py +0 -1
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/LICENSE +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/README.md +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/beast/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/beast/v3/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/beast/v3/_connector.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/beast/v3/_models.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/boxer/README.md +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/boxer/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/boxer/_auth.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/boxer/_base.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/boxer/_connector.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/boxer/_models.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/common/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/crystal/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/crystal/_api_versions.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/crystal/_connector.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/crystal/_models.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/abstractions/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/abstractions/algrorithm_cache.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/abstractions/input_object.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/abstractions/logger_factory.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/abstractions/nexus_object.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/abstractions/socket_provider.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/algorithms/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/algorithms/_baseline_algorithm.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/algorithms/_remote_algorithm.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/algorithms/distributed.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/algorithms/forked_algorithm.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/algorithms/minimalistic.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/algorithms/recursive.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/configurations/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/configurations/algorithm_configuration.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/core/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/core/serializers.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/exceptions/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/exceptions/_nexus_error.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/exceptions/cache_errors.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/exceptions/input_reader_error.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/exceptions/startup_error.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/input/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/input/input_processor.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/input/input_reader.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/input/payload_reader.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/modules/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/modules/astra_client_module.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/modules/mlflow_module.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/telemetry/__init__.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/telemetry/recorder.py +0 -0
- {esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/esd_services_api_client/nexus/telemetry/user_telemetry_recorder.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = 'v2.6.3a155.dev7'
|
@@ -302,6 +302,10 @@ async def main():
|
|
302
302
|
"(value of y:{y})": {"y": payload.y},
|
303
303
|
"(request_id:{request_id})": {"request_id": run_args.request_id}
|
304
304
|
}
|
305
|
+
def tag_metrics(payload: MyAlgorithmPayload2, run_args: CrystalEntrypointArguments) -> dict[str, str]:
|
306
|
+
return {
|
307
|
+
"country": payload.y,
|
308
|
+
}
|
305
309
|
with ThreadingHTTPServer(("localhost", 9876), MockRequestHandler) as server:
|
306
310
|
server_thread = threading.Thread(target=server.serve_forever)
|
307
311
|
server_thread.daemon = True
|
@@ -317,6 +321,7 @@ async def main():
|
|
317
321
|
.inject_configuration(MyAlgorithmConfiguration)
|
318
322
|
.inject_payload(MyAlgorithmPayload, MyAlgorithmPayload2)
|
319
323
|
.with_log_enricher(tags_from_payload, enrich_from_payload)
|
324
|
+
.with_metric_tagger(tag_metrics)
|
320
325
|
)
|
321
326
|
|
322
327
|
await nexus.activate()
|
@@ -0,0 +1,106 @@
|
|
1
|
+
"""
|
2
|
+
Metrics provider factory.
|
3
|
+
"""
|
4
|
+
|
5
|
+
# Copyright (c) 2023-2024. 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 os
|
21
|
+
from dataclasses import dataclass
|
22
|
+
from pydoc import locate
|
23
|
+
from typing import final
|
24
|
+
|
25
|
+
from adapta.metrics import MetricsProvider
|
26
|
+
from adapta.metrics.providers.datadog_provider import DatadogMetricsProvider
|
27
|
+
from dataclasses_json import DataClassJsonMixin
|
28
|
+
|
29
|
+
from esd_services_api_client.nexus.exceptions.startup_error import (
|
30
|
+
FatalStartupConfigurationError,
|
31
|
+
)
|
32
|
+
|
33
|
+
|
34
|
+
@final
|
35
|
+
@dataclass
|
36
|
+
class MetricsProviderSettings(DataClassJsonMixin):
|
37
|
+
"""
|
38
|
+
Settings model for the metrics provider
|
39
|
+
"""
|
40
|
+
|
41
|
+
init_args: dict
|
42
|
+
fixed_tags: dict[str, str] | None = None
|
43
|
+
protocol: str | None = None
|
44
|
+
|
45
|
+
def __post_init__(self):
|
46
|
+
"""
|
47
|
+
Force not-null values with default constructor, even if the source provides nulls.
|
48
|
+
"""
|
49
|
+
if self.protocol is None:
|
50
|
+
self.protocol = "udp"
|
51
|
+
|
52
|
+
if self.fixed_tags is None:
|
53
|
+
self.fixed_tags = {}
|
54
|
+
|
55
|
+
|
56
|
+
@final
|
57
|
+
class MetricsProviderFactory:
|
58
|
+
"""
|
59
|
+
Async logger provisioner.
|
60
|
+
"""
|
61
|
+
|
62
|
+
def __init__(
|
63
|
+
self,
|
64
|
+
global_tags: dict[str, str] | None = None,
|
65
|
+
):
|
66
|
+
self._global_tags = global_tags
|
67
|
+
self._metrics_class: type[MetricsProvider] = locate(
|
68
|
+
os.getenv(
|
69
|
+
"NEXUS__METRICS_PROVIDER_CLASS",
|
70
|
+
"adapta.metrics.providers.datadog_provider.DatadogMetricsProvider",
|
71
|
+
)
|
72
|
+
)
|
73
|
+
|
74
|
+
if "NEXUS__METRICS_PROVIDER_CONFIGURATION" not in os.environ:
|
75
|
+
raise FatalStartupConfigurationError(
|
76
|
+
"NEXUS__METRICS_PROVIDER_CONFIGURATION is not provided, cannot initialize a metrics provider instance"
|
77
|
+
)
|
78
|
+
|
79
|
+
self._metrics_settings: MetricsProviderSettings = (
|
80
|
+
MetricsProviderSettings.from_json(
|
81
|
+
os.getenv("NEXUS__METRICS_PROVIDER_CONFIGURATION")
|
82
|
+
)
|
83
|
+
)
|
84
|
+
|
85
|
+
def create_provider(
|
86
|
+
self,
|
87
|
+
) -> MetricsProvider:
|
88
|
+
"""
|
89
|
+
Creates a metrics provider enriched with additional tags for each metric emitted by this algorithm.
|
90
|
+
In case of DatadogMetricsProvider, takes care of UDP/UDS specific initialization.
|
91
|
+
"""
|
92
|
+
self._metrics_settings.fixed_tags |= self._global_tags
|
93
|
+
|
94
|
+
if self._metrics_class == DatadogMetricsProvider:
|
95
|
+
if self._metrics_settings.protocol == "udp":
|
96
|
+
return self._metrics_class.udp(**self._metrics_settings.init_args)
|
97
|
+
|
98
|
+
if self._metrics_settings.protocol == "uds":
|
99
|
+
return self._metrics_class.uds(**self._metrics_settings.init_args)
|
100
|
+
|
101
|
+
return self._metrics_class(
|
102
|
+
**(
|
103
|
+
self._metrics_settings.init_args
|
104
|
+
| {"fixed_tags": self._metrics_settings.fixed_tags}
|
105
|
+
)
|
106
|
+
)
|
@@ -45,6 +45,9 @@ from esd_services_api_client.nexus.abstractions.logger_factory import (
|
|
45
45
|
LoggerFactory,
|
46
46
|
BootstrapLoggerFactory,
|
47
47
|
)
|
48
|
+
from esd_services_api_client.nexus.abstractions.metrics_provider_factory import (
|
49
|
+
MetricsProviderFactory,
|
50
|
+
)
|
48
51
|
from esd_services_api_client.nexus.abstractions.nexus_object import AlgorithmResult
|
49
52
|
from esd_services_api_client.nexus.algorithms import (
|
50
53
|
BaselineAlgorithm,
|
@@ -138,6 +141,14 @@ class Nexus:
|
|
138
141
|
] | None = None
|
139
142
|
self._log_enrichment_delimiter: str = ", "
|
140
143
|
|
144
|
+
self._metric_tagger: Callable[
|
145
|
+
[
|
146
|
+
AlgorithmPayload,
|
147
|
+
CrystalEntrypointArguments,
|
148
|
+
],
|
149
|
+
dict[str, str],
|
150
|
+
] | None = None
|
151
|
+
|
141
152
|
attach_signal_handlers()
|
142
153
|
|
143
154
|
@property
|
@@ -225,6 +236,23 @@ class Nexus:
|
|
225
236
|
self._log_enrichment_delimiter = delimiter
|
226
237
|
return self
|
227
238
|
|
239
|
+
def with_metric_tagger(
|
240
|
+
self,
|
241
|
+
tagger: Callable[
|
242
|
+
[
|
243
|
+
AlgorithmPayload,
|
244
|
+
CrystalEntrypointArguments,
|
245
|
+
],
|
246
|
+
dict[str, str],
|
247
|
+
]
|
248
|
+
| None = None,
|
249
|
+
) -> "Nexus":
|
250
|
+
"""
|
251
|
+
Adds a metric `enricher` to be used with injected metrics provider to assign additional tags to emitted metrics.
|
252
|
+
"""
|
253
|
+
self._metric_tagger = tagger
|
254
|
+
return self
|
255
|
+
|
228
256
|
def with_module(self, module: Type[Module]) -> "Nexus":
|
229
257
|
"""
|
230
258
|
Adds a (custom) DI module into the DI container.
|
@@ -317,28 +345,59 @@ class Nexus:
|
|
317
345
|
|
318
346
|
bootstrap_logger.start()
|
319
347
|
|
320
|
-
|
321
|
-
|
348
|
+
try:
|
349
|
+
logger_fixed_template = {}
|
350
|
+
logger_tags = {}
|
351
|
+
metric_tags = {}
|
352
|
+
|
353
|
+
for payload_type in self._payload_types:
|
322
354
|
payload = await self._get_payload(payload_type=payload_type)
|
323
355
|
self._injector.binder.bind(
|
324
356
|
payload.__class__, to=payload, scope=singleton
|
325
357
|
)
|
326
|
-
|
327
|
-
|
328
|
-
if
|
329
|
-
else
|
330
|
-
fixed_template_delimiter=self._log_enrichment_delimiter,
|
331
|
-
global_tags=self._log_tagger(payload, self._run_args),
|
358
|
+
logger_fixed_template |= (
|
359
|
+
self._log_enricher(payload, self._run_args)
|
360
|
+
if self._log_enricher
|
361
|
+
else {}
|
332
362
|
)
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
scope=singleton,
|
363
|
+
logger_tags |= (
|
364
|
+
self._log_tagger(payload, self._run_args)
|
365
|
+
if self._log_tagger
|
366
|
+
else {}
|
338
367
|
)
|
339
|
-
|
340
|
-
|
341
|
-
|
368
|
+
metric_tags |= (
|
369
|
+
self._metric_tagger(payload, self._run_args)
|
370
|
+
if self._metric_tagger
|
371
|
+
else {}
|
372
|
+
)
|
373
|
+
|
374
|
+
logger_factory = LoggerFactory(
|
375
|
+
fixed_template=logger_fixed_template,
|
376
|
+
fixed_template_delimiter=self._log_enrichment_delimiter,
|
377
|
+
global_tags=logger_tags,
|
378
|
+
)
|
379
|
+
# bind app-level LoggerFactory now
|
380
|
+
self._injector.binder.bind(
|
381
|
+
logger_factory.__class__,
|
382
|
+
to=logger_factory,
|
383
|
+
scope=singleton,
|
384
|
+
)
|
385
|
+
|
386
|
+
# bind app-level MetricsProvider now
|
387
|
+
metrics_provider = MetricsProviderFactory(
|
388
|
+
global_tags=metric_tags,
|
389
|
+
).create_provider()
|
390
|
+
self._injector.binder.bind(
|
391
|
+
metrics_provider.__class__,
|
392
|
+
to=metrics_provider,
|
393
|
+
scope=singleton,
|
394
|
+
)
|
395
|
+
except BaseException as ex: # pylint: disable=broad-except
|
396
|
+
bootstrap_logger.error("Error reading algorithm payload", ex)
|
397
|
+
|
398
|
+
# ensure we flush bootstrap logger before we exit
|
399
|
+
bootstrap_logger.stop()
|
400
|
+
sys.exit(1)
|
342
401
|
|
343
402
|
bootstrap_logger.stop()
|
344
403
|
|
@@ -400,7 +459,9 @@ class Nexus:
|
|
400
459
|
for on_complete_task_class in self._on_complete_tasks
|
401
460
|
]
|
402
461
|
if len(on_complete_tasks) > 0:
|
403
|
-
done, pending = await asyncio.wait(
|
462
|
+
done, pending = await asyncio.wait(
|
463
|
+
on_complete_tasks, return_when=asyncio.FIRST_EXCEPTION
|
464
|
+
)
|
404
465
|
if len(pending) > 0:
|
405
466
|
root_logger.warning(
|
406
467
|
"Some post-processing operations did not complete or failed. Please review application logs for more information"
|
@@ -17,13 +17,11 @@
|
|
17
17
|
# limitations under the License.
|
18
18
|
#
|
19
19
|
|
20
|
-
import json
|
21
20
|
import os
|
22
21
|
import re
|
23
22
|
from pydoc import locate
|
24
23
|
from typing import final, Type, Any
|
25
24
|
|
26
|
-
from adapta.metrics import MetricsProvider
|
27
25
|
from adapta.storage.blob.base import StorageClient
|
28
26
|
from adapta.storage.query_enabled_store import QueryEnabledStore
|
29
27
|
from injector import Module, singleton, provider
|
@@ -51,28 +49,6 @@ from esd_services_api_client.nexus.core.serializers import (
|
|
51
49
|
)
|
52
50
|
|
53
51
|
|
54
|
-
@final
|
55
|
-
class MetricsModule(Module):
|
56
|
-
"""
|
57
|
-
Metrics provider module.
|
58
|
-
"""
|
59
|
-
|
60
|
-
@singleton
|
61
|
-
@provider
|
62
|
-
def provide(self) -> MetricsProvider:
|
63
|
-
"""
|
64
|
-
DI factory method.
|
65
|
-
"""
|
66
|
-
metrics_class: Type[MetricsProvider] = locate(
|
67
|
-
os.getenv(
|
68
|
-
"NEXUS__METRIC_PROVIDER_CLASS",
|
69
|
-
"adapta.metrics.providers.datadog_provider.DatadogMetricsProvider",
|
70
|
-
)
|
71
|
-
)
|
72
|
-
metrics_settings = json.loads(os.getenv("NEXUS__METRIC_PROVIDER_CONFIGURATION"))
|
73
|
-
return metrics_class(**metrics_settings)
|
74
|
-
|
75
|
-
|
76
52
|
@final
|
77
53
|
class BootstrapLoggerFactoryModule(Module):
|
78
54
|
"""
|
@@ -237,7 +213,6 @@ class ServiceConfigurator:
|
|
237
213
|
def __init__(self):
|
238
214
|
self._injection_binds = [
|
239
215
|
BootstrapLoggerFactoryModule(),
|
240
|
-
MetricsModule(),
|
241
216
|
CrystalReceiverClientModule(),
|
242
217
|
QueryEnabledStoreModule(),
|
243
218
|
StorageClientModule(),
|
{esd_services_api_client-2.6.2a158.dev6 → esd_services_api_client-2.6.3a155.dev7}/pyproject.toml
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "esd-services-api-client"
|
3
|
-
version = "v2.6.
|
3
|
+
version = "v2.6.3a155.dev7"
|
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__ = 'v2.6.2a158.dev6'
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|