dtlpy 1.107.8__py3-none-any.whl → 1.108.7__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.
- dtlpy/__version__.py +1 -1
- dtlpy/entities/__init__.py +2 -1
- dtlpy/entities/annotation.py +2 -0
- dtlpy/entities/app.py +1 -1
- dtlpy/entities/compute.py +44 -10
- dtlpy/entities/filters.py +4 -5
- dtlpy/repositories/apps.py +8 -4
- dtlpy/repositories/computes.py +13 -4
- dtlpy/repositories/uploader.py +4 -0
- {dtlpy-1.107.8.dist-info → dtlpy-1.108.7.dist-info}/METADATA +15 -2
- {dtlpy-1.107.8.dist-info → dtlpy-1.108.7.dist-info}/RECORD +19 -19
- tests/features/environment.py +16 -15
- {dtlpy-1.107.8.data → dtlpy-1.108.7.data}/scripts/dlp +0 -0
- {dtlpy-1.107.8.data → dtlpy-1.108.7.data}/scripts/dlp.bat +0 -0
- {dtlpy-1.107.8.data → dtlpy-1.108.7.data}/scripts/dlp.py +0 -0
- {dtlpy-1.107.8.dist-info → dtlpy-1.108.7.dist-info}/LICENSE +0 -0
- {dtlpy-1.107.8.dist-info → dtlpy-1.108.7.dist-info}/WHEEL +0 -0
- {dtlpy-1.107.8.dist-info → dtlpy-1.108.7.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.107.8.dist-info → dtlpy-1.108.7.dist-info}/top_level.txt +0 -0
dtlpy/__version__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
version = '1.
|
|
1
|
+
version = '1.108.7'
|
dtlpy/entities/__init__.py
CHANGED
|
@@ -75,8 +75,9 @@ from .app_module import AppModule
|
|
|
75
75
|
from .resource_execution import ResourceExecution
|
|
76
76
|
from .message import Message, NotificationEventContext
|
|
77
77
|
from .prompt_item import Prompt, PromptItem, PromptType
|
|
78
|
-
from .compute import ClusterProvider, ComputeType, ComputeStatus, Toleration, DeploymentResource, DeploymentResources, \
|
|
78
|
+
from .compute import ClusterProvider, ComputeType, ComputeStatus, Toleration, DeploymentResource, DeploymentResources, ComputeSettings, ComputeConsumptionMethod, \
|
|
79
79
|
NodePool, AuthenticationIntegration, Authentication, ComputeCluster, ComputeContext, Compute, KubernetesCompute, \
|
|
80
80
|
ServiceDriver
|
|
81
81
|
from .gis_item import ItemGis, Layer
|
|
82
82
|
from .collection import Collection
|
|
83
|
+
|
dtlpy/entities/annotation.py
CHANGED
dtlpy/entities/app.py
CHANGED
|
@@ -60,7 +60,7 @@ class App(entities.BaseEntity):
|
|
|
60
60
|
reps = namedtuple('repositories', field_names=['projects', 'apps', 'compositions'])
|
|
61
61
|
return reps(
|
|
62
62
|
projects=repositories.Projects(client_api=self._client_api),
|
|
63
|
-
apps=repositories.Apps(client_api=self._client_api, project=self._project),
|
|
63
|
+
apps=repositories.Apps(client_api=self._client_api, project=self._project, project_id=self.project_id),
|
|
64
64
|
compositions=repositories.Compositions(client_api=self._client_api, project=self._project)
|
|
65
65
|
)
|
|
66
66
|
|
dtlpy/entities/compute.py
CHANGED
|
@@ -10,6 +10,7 @@ class ClusterProvider(str, Enum):
|
|
|
10
10
|
AZURE = 'azure'
|
|
11
11
|
HPC = 'hpc'
|
|
12
12
|
LOCAL = 'local'
|
|
13
|
+
RANCHER_K3S = 'rancher-k3s'
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class ComputeType(str, Enum):
|
|
@@ -23,6 +24,30 @@ class ComputeStatus(str, Enum):
|
|
|
23
24
|
FAILED = "failed"
|
|
24
25
|
|
|
25
26
|
|
|
27
|
+
class ComputeConsumptionMethod(str, Enum):
|
|
28
|
+
MQ = "MQ",
|
|
29
|
+
API = "API"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ComputeSettings:
|
|
33
|
+
def __init__(self, default_namespace: str, consumption_method: ComputeConsumptionMethod):
|
|
34
|
+
self.consumption_method = consumption_method
|
|
35
|
+
self.default_namespace = default_namespace
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def from_json(cls, _json):
|
|
39
|
+
return cls(
|
|
40
|
+
default_namespace=_json.get('defaultNamespace'),
|
|
41
|
+
consumption_method=_json.get('consumptionMethod')
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
def to_json(self):
|
|
45
|
+
return {
|
|
46
|
+
'defaultNamespace': self.default_namespace,
|
|
47
|
+
'consumptionMethod': self.consumption_method
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
26
51
|
class Toleration:
|
|
27
52
|
def __init__(self, effect: str, key: str, operator: str, value: str):
|
|
28
53
|
self.effect = effect
|
|
@@ -100,7 +125,7 @@ class NodePool:
|
|
|
100
125
|
tolerations: Optional[List[Toleration]] = None,
|
|
101
126
|
description: str = "",
|
|
102
127
|
node_selector: str = "",
|
|
103
|
-
|
|
128
|
+
preemptible: bool = False,
|
|
104
129
|
deployment_resources: DeploymentResources = None
|
|
105
130
|
):
|
|
106
131
|
self.name = name
|
|
@@ -109,7 +134,7 @@ class NodePool:
|
|
|
109
134
|
self.tolerations = tolerations if tolerations is not None else []
|
|
110
135
|
self.description = description
|
|
111
136
|
self.node_selector = node_selector
|
|
112
|
-
self.
|
|
137
|
+
self.preemptible = preemptible
|
|
113
138
|
self.deployment_resources = deployment_resources
|
|
114
139
|
|
|
115
140
|
@classmethod
|
|
@@ -120,7 +145,7 @@ class NodePool:
|
|
|
120
145
|
dl_types=_json.get('dlTypes'),
|
|
121
146
|
description=_json.get('description'),
|
|
122
147
|
node_selector=_json.get('nodeSelector'),
|
|
123
|
-
|
|
148
|
+
preemptible=_json.get('preemptible'),
|
|
124
149
|
deployment_resources=DeploymentResources.from_json(_json.get('deploymentResources', dict())),
|
|
125
150
|
tolerations=[Toleration.from_json(t) for t in _json.get('tolerations', list())]
|
|
126
151
|
)
|
|
@@ -133,7 +158,7 @@ class NodePool:
|
|
|
133
158
|
'isDlTypeDefault': self.is_dl_type_default,
|
|
134
159
|
'description': self.description,
|
|
135
160
|
'nodeSelector': self.node_selector,
|
|
136
|
-
'
|
|
161
|
+
'preemptible': self.preemptible,
|
|
137
162
|
'deploymentResources': self.deployment_resources.to_json(),
|
|
138
163
|
'tolerations': [t.to_json() for t in self.tolerations]
|
|
139
164
|
}
|
|
@@ -271,6 +296,7 @@ class Compute:
|
|
|
271
296
|
type: ComputeType = ComputeType.KUBERNETES,
|
|
272
297
|
features: Optional[Dict] = None,
|
|
273
298
|
metadata: Optional[Dict] = None,
|
|
299
|
+
settings: Optional[ComputeSettings] = None
|
|
274
300
|
):
|
|
275
301
|
self.id = id
|
|
276
302
|
self.name = name
|
|
@@ -284,6 +310,7 @@ class Compute:
|
|
|
284
310
|
self._client_api = client_api
|
|
285
311
|
self._computes = None
|
|
286
312
|
self._serviceDrivers = None
|
|
313
|
+
self.settings = settings
|
|
287
314
|
|
|
288
315
|
@property
|
|
289
316
|
def computes(self):
|
|
@@ -315,7 +342,8 @@ class Compute:
|
|
|
315
342
|
type=ComputeType(_json.get('type')),
|
|
316
343
|
features=_json.get('features'),
|
|
317
344
|
client_api=client_api,
|
|
318
|
-
metadata=_json.get('metadata')
|
|
345
|
+
metadata=_json.get('metadata'),
|
|
346
|
+
settings=ComputeSettings.from_json(_json.get('settings', dict())) if _json.get('settings') else None
|
|
319
347
|
)
|
|
320
348
|
|
|
321
349
|
def to_json(self):
|
|
@@ -327,7 +355,8 @@ class Compute:
|
|
|
327
355
|
'status': self.status.value,
|
|
328
356
|
'type': self.type.value,
|
|
329
357
|
'features': self.features,
|
|
330
|
-
'metadata': self.metadata
|
|
358
|
+
'metadata': self.metadata,
|
|
359
|
+
'settings': self.settings.to_json() if isinstance(self.settings, ComputeSettings) else self.settings
|
|
331
360
|
}
|
|
332
361
|
|
|
333
362
|
|
|
@@ -335,6 +364,7 @@ class KubernetesCompute(Compute):
|
|
|
335
364
|
def __init__(
|
|
336
365
|
self,
|
|
337
366
|
id: str,
|
|
367
|
+
name: str,
|
|
338
368
|
context: ComputeContext,
|
|
339
369
|
cluster: ComputeCluster,
|
|
340
370
|
shared_contexts: Optional[List[ComputeContext]] = None,
|
|
@@ -343,10 +373,11 @@ class KubernetesCompute(Compute):
|
|
|
343
373
|
type: ComputeType = ComputeType.KUBERNETES,
|
|
344
374
|
features: Optional[Dict] = None,
|
|
345
375
|
metadata: Optional[Dict] = None,
|
|
346
|
-
client_api: ApiClient = None
|
|
376
|
+
client_api: ApiClient = None,
|
|
377
|
+
settings: Optional[ComputeSettings] = None
|
|
347
378
|
):
|
|
348
379
|
super().__init__(id=id, context=context, shared_contexts=shared_contexts, global_=global_, status=status,
|
|
349
|
-
type=type, features=features, metadata=metadata, client_api=client_api)
|
|
380
|
+
type=type, features=features, metadata=metadata, client_api=client_api, settings=settings, name=name)
|
|
350
381
|
self.cluster = cluster
|
|
351
382
|
|
|
352
383
|
@classmethod
|
|
@@ -361,7 +392,8 @@ class KubernetesCompute(Compute):
|
|
|
361
392
|
type=ComputeType(_json.get('type')),
|
|
362
393
|
features=_json.get('features'),
|
|
363
394
|
metadata=_json.get('metadata'),
|
|
364
|
-
client_api=client_api
|
|
395
|
+
client_api=client_api,
|
|
396
|
+
settings=ComputeSettings.from_json(_json.get('settings', dict())) if _json.get('settings') else None
|
|
365
397
|
)
|
|
366
398
|
|
|
367
399
|
def to_json(self):
|
|
@@ -373,7 +405,9 @@ class KubernetesCompute(Compute):
|
|
|
373
405
|
'global': self.global_,
|
|
374
406
|
'status': self.status.value,
|
|
375
407
|
'type': self.type.value,
|
|
376
|
-
'features': self.features
|
|
408
|
+
'features': self.features,
|
|
409
|
+
'metadata': self.metadata,
|
|
410
|
+
'settings': self.settings.to_json() if isinstance(self.settings, ComputeSettings) else self.settings
|
|
377
411
|
}
|
|
378
412
|
|
|
379
413
|
|
dtlpy/entities/filters.py
CHANGED
|
@@ -328,11 +328,10 @@ class Filters:
|
|
|
328
328
|
# add annotations defaults
|
|
329
329
|
elif self.resource == FiltersResource.ANNOTATION:
|
|
330
330
|
self._unique_fields = ['type']
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
method=FiltersMethod.AND)
|
|
331
|
+
values = [annotation_type.value for annotation_type in entities.AnnotationType]
|
|
332
|
+
values.remove(entities.AnnotationType.NOTE.value)
|
|
333
|
+
values += ["text", "ref_image"] # Prompt Annotation Types
|
|
334
|
+
self.add(field='type', values=values, operator=FiltersOperations.IN, method=FiltersMethod.AND)
|
|
336
335
|
|
|
337
336
|
def __generate_query(self):
|
|
338
337
|
filters_dict = dict()
|
dtlpy/repositories/apps.py
CHANGED
|
@@ -8,17 +8,21 @@ logger = logging.getLogger(name='dtlpy')
|
|
|
8
8
|
|
|
9
9
|
class Apps:
|
|
10
10
|
|
|
11
|
-
def __init__(self, client_api: ApiClient, project: entities.Project = None):
|
|
11
|
+
def __init__(self, client_api: ApiClient, project: entities.Project = None, project_id: str = None):
|
|
12
12
|
self._client_api = client_api
|
|
13
13
|
self._project = project
|
|
14
|
+
self._project_id = project_id
|
|
14
15
|
self._commands = None
|
|
15
16
|
|
|
16
17
|
@property
|
|
17
18
|
def project(self) -> entities.Project:
|
|
18
19
|
if self._project is None:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
if self._project_id is None:
|
|
21
|
+
raise exceptions.PlatformException(
|
|
22
|
+
error='2001',
|
|
23
|
+
message='Missing "project". need to set a Project entity or use project.apps repository')
|
|
24
|
+
else:
|
|
25
|
+
self._project = repositories.Projects(client_api=self._client_api).get(project_id=self._project_id)
|
|
22
26
|
assert isinstance(self._project, entities.Project)
|
|
23
27
|
return self._project
|
|
24
28
|
|
dtlpy/repositories/computes.py
CHANGED
|
@@ -46,7 +46,8 @@ class Computes:
|
|
|
46
46
|
is_global: Optional[bool] = False,
|
|
47
47
|
features: Optional[Dict] = None,
|
|
48
48
|
wait=True,
|
|
49
|
-
status: entities.ComputeStatus = None
|
|
49
|
+
status: entities.ComputeStatus = None,
|
|
50
|
+
settings: entities.ComputeSettings = None
|
|
50
51
|
):
|
|
51
52
|
"""
|
|
52
53
|
Create a new compute
|
|
@@ -60,18 +61,24 @@ class Computes:
|
|
|
60
61
|
:param features: Features
|
|
61
62
|
:param wait: Wait for compute creation
|
|
62
63
|
:param status: Compute status
|
|
64
|
+
:param settings: Compute settings
|
|
63
65
|
:return: Compute
|
|
64
66
|
"""
|
|
65
67
|
|
|
68
|
+
shared_contexts_json = []
|
|
69
|
+
for shared_context in shared_contexts:
|
|
70
|
+
src_json = shared_context.to_json() if isinstance(shared_context, entities.ComputeContext) else shared_context
|
|
71
|
+
shared_contexts_json.append(src_json)
|
|
66
72
|
payload = {
|
|
67
73
|
'name': name,
|
|
68
74
|
'context': context.to_json(),
|
|
69
75
|
'type': type.value,
|
|
70
76
|
'global': is_global,
|
|
71
77
|
'features': features,
|
|
72
|
-
'
|
|
78
|
+
'sharedContexts': shared_contexts_json,
|
|
73
79
|
'cluster': cluster.to_json(),
|
|
74
|
-
'status': status
|
|
80
|
+
'status': status,
|
|
81
|
+
"settings": settings.to_json() if isinstance(settings, entities.ComputeSettings) else settings
|
|
75
82
|
}
|
|
76
83
|
|
|
77
84
|
# request
|
|
@@ -205,7 +212,9 @@ class Computes:
|
|
|
205
212
|
[],
|
|
206
213
|
cluster,
|
|
207
214
|
ComputeType.KUBERNETES,
|
|
208
|
-
status=config['config'].get('status', None)
|
|
215
|
+
status=config['config'].get('status', None),
|
|
216
|
+
settings=config['config'].get('settings', None))
|
|
217
|
+
|
|
209
218
|
return compute
|
|
210
219
|
|
|
211
220
|
def create_from_config_file(self, config_file_path, org_id, project_name: Optional[str] = None):
|
dtlpy/repositories/uploader.py
CHANGED
|
@@ -155,6 +155,10 @@ class Uploader:
|
|
|
155
155
|
remote_path = f"/{remote_path}"
|
|
156
156
|
if remote_path and not remote_path.endswith("/"):
|
|
157
157
|
remote_path = f"{remote_path}/"
|
|
158
|
+
|
|
159
|
+
if remote_name:
|
|
160
|
+
remote_name = remote_name.lstrip('/')
|
|
161
|
+
|
|
158
162
|
if file_types is not None and not isinstance(file_types, list):
|
|
159
163
|
msg = '"file_types" should be a list of file extension. e.g [".jpg", ".png"]'
|
|
160
164
|
raise PlatformException(error="400", message=msg)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dtlpy
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.108.7
|
|
4
4
|
Summary: SDK and CLI for Dataloop platform
|
|
5
5
|
Home-page: https://github.com/dataloop-ai/dtlpy
|
|
6
6
|
Author: Dataloop Team
|
|
@@ -44,19 +44,23 @@ Requires-Dist: dtlpymetrics
|
|
|
44
44
|
Requires-Dist: dataclasses
|
|
45
45
|
|
|
46
46
|

|
|
47
|
+
|
|
47
48
|
[](https://sdk-docs.dataloop.ai/en/latest/?badge=latest)
|
|
48
49
|
[](https://pypi.org/project/dtlpy/)
|
|
49
50
|
[](https://github.com/dataloop-ai/dtlpy)
|
|
50
51
|
[](https://github.com/dataloop-ai/dtlpy/blob/master/LICENSE)
|
|
51
52
|
[](https://pepy.tech/project/dtlpy)
|
|
52
53
|
|
|
54
|
+
## **Overview**
|
|
53
55
|
This is the SDK and CLI open source repository for [Dataloop.ai](https://dataloop.ai/) platform
|
|
54
56
|
|
|
55
57
|
For full platform documentation click [here](https://dataloop.ai/docs)
|
|
56
58
|
|
|
57
59
|
For full SDK documentation click [here](https://console.dataloop.ai/sdk-docs/latest)
|
|
58
60
|
|
|
59
|
-
|
|
61
|
+
## **Prerequisites**
|
|
62
|
+
|
|
63
|
+
### Python
|
|
60
64
|
|
|
61
65
|
#### Dtlpy supports these Python versions.
|
|
62
66
|
|
|
@@ -67,3 +71,12 @@ For full SDK documentation click [here](https://console.dataloop.ai/sdk-docs/lat
|
|
|
67
71
|
| dtlpy >= 1.61 | | Yes | Yes | Yes | Yes | Yes | |
|
|
68
72
|
| dtlpy 1.60 - 1.50 | | | Yes | Yes | Yes | Yes | |
|
|
69
73
|
| dtlpy <= 1.49 | | | Yes | Yes | Yes | Yes | Yes |
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## **Installation**
|
|
77
|
+
|
|
78
|
+
The latest stable version is [available on PyPI](https://pypi.org/project/dtlpy/). Install with pip:
|
|
79
|
+
|
|
80
|
+
```code
|
|
81
|
+
pip install dtlpy
|
|
82
|
+
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
dtlpy/__init__.py,sha256=K2c30sbTNH6bdPFLjabRX-Dh3TsQ33nR9psVGCAoUlw,20687
|
|
2
|
-
dtlpy/__version__.py,sha256=
|
|
2
|
+
dtlpy/__version__.py,sha256=Tj3UOPZwl5i-MGWs5QkIPURGXjBDqmovb7JIh5SXp-I,20
|
|
3
3
|
dtlpy/exceptions.py,sha256=EQCKs3pwhwZhgMByQN3D3LpWpdxwcKPEEt-bIaDwURM,2871
|
|
4
4
|
dtlpy/new_instance.py,sha256=bHsWS-nNcQ5XWDcC4uASqOqpl1ye97kUacduxXZHO68,9990
|
|
5
5
|
dtlpy/assets/__init__.py,sha256=D_hAa6NM8Zoy32sF_9b7m0b7I-BQEyBFg8-9Tg2WOeo,976
|
|
@@ -43,11 +43,11 @@ dtlpy/dlp/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
|
|
|
43
43
|
dtlpy/dlp/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
|
|
44
44
|
dtlpy/dlp/dlp.py,sha256=YjNBjeCDTXJ7tj8qdiGZ8lFb8DtPZl-FvViyjxt9xF8,4278
|
|
45
45
|
dtlpy/dlp/parser.py,sha256=p-TFaiAU2c3QkI97TXzL2LDR3Eq0hGDFrTc9J2jWLh4,30551
|
|
46
|
-
dtlpy/entities/__init__.py,sha256=
|
|
46
|
+
dtlpy/entities/__init__.py,sha256=IllYowvvD_fxoB6Cujnc0wtq-05QNSxqC5usNace_wA,4987
|
|
47
47
|
dtlpy/entities/analytic.py,sha256=5MpYDKPVsZ1MIy20Ju515RWed6P667j4TLxsan2gyNM,11925
|
|
48
|
-
dtlpy/entities/annotation.py,sha256=
|
|
48
|
+
dtlpy/entities/annotation.py,sha256=ztNBDAKDXAh7XXD8oxbSxJtYTe_SRCUNkP55SfuGqTA,68550
|
|
49
49
|
dtlpy/entities/annotation_collection.py,sha256=CEYSBHhhDkC0VJdHsBSrA6TgdKGMcKeI3tFM40UJwS8,29838
|
|
50
|
-
dtlpy/entities/app.py,sha256=
|
|
50
|
+
dtlpy/entities/app.py,sha256=vQ7hSMnuRIpoZqZc2NwjGTtWiPTCgi47x_oOgGUB-Pk,6996
|
|
51
51
|
dtlpy/entities/app_module.py,sha256=0UiAbBX1q8iEImi3nY7ySWZZHoRRwu0qUXmyXmgVAc4,3645
|
|
52
52
|
dtlpy/entities/artifact.py,sha256=wtLtBuidOPbnba0ok40JyunCCIBGbAl4bP_ebK39Kk4,5711
|
|
53
53
|
dtlpy/entities/assignment.py,sha256=Dc1QcfVf67GGcmDDi4ubESDuPkSgjXqdqjTBQ31faUM,14722
|
|
@@ -56,7 +56,7 @@ dtlpy/entities/bot.py,sha256=is3NUCnPg56HSjsHIvFcVkymValMqDV0uHRDC1Ib-ds,3819
|
|
|
56
56
|
dtlpy/entities/codebase.py,sha256=pwRkAq2GV0wvmzshg89IAmE-0I2Wsy_-QNOu8OV8uqc,8999
|
|
57
57
|
dtlpy/entities/collection.py,sha256=FPPPfIxOsBG1ujORPJVq8uXyF8vhIqC6N4EiI9SJzl0,1160
|
|
58
58
|
dtlpy/entities/command.py,sha256=FtfsO6kQSZqKn-Uo8n2ryGOB01Fgr-g5ewfMCtRMTfw,5247
|
|
59
|
-
dtlpy/entities/compute.py,sha256=
|
|
59
|
+
dtlpy/entities/compute.py,sha256=FHHmtprkhnu8J_51JPnnoqbVpb9AeIZDvz0ojo7zdVk,16059
|
|
60
60
|
dtlpy/entities/dataset.py,sha256=4zFftsZy7SCLZriQyNa0bVbwg3LcwLlzAbk4fMT1vHg,52943
|
|
61
61
|
dtlpy/entities/directory_tree.py,sha256=Rni6pLSWytR6yeUPgEdCCRfTg_cqLOdUc9uCqz9KT-Q,1186
|
|
62
62
|
dtlpy/entities/dpk.py,sha256=FJVhQKk2fj1cO_4rcE_bIF6QmIQZQWUkBnwTNQNMrfE,17857
|
|
@@ -64,7 +64,7 @@ dtlpy/entities/driver.py,sha256=O_QdK1EaLjQyQkmvKsmkNgmvmMb1mPjKnJGxK43KrOA,7197
|
|
|
64
64
|
dtlpy/entities/execution.py,sha256=uQe535w9OcAoDiNWf96KcpFzUDEUU-DYsUalv5VziyM,13673
|
|
65
65
|
dtlpy/entities/feature.py,sha256=9fFjD0W57anOVSAVU55ypxN_WTCsWTG03Wkc3cAAj78,3732
|
|
66
66
|
dtlpy/entities/feature_set.py,sha256=niw4MkmrDbD_LWQu1X30uE6U4DCzmFhPTaYeZ6VZDB0,4443
|
|
67
|
-
dtlpy/entities/filters.py,sha256=
|
|
67
|
+
dtlpy/entities/filters.py,sha256=ldtBtrkNxOzwG6dc9X7va1dony89NjLstpTWDrLPVkI,22655
|
|
68
68
|
dtlpy/entities/gis_item.py,sha256=Uk-wMBxwcHsImjz4qOjP-EyZAohbRzN43kMpCaVjCXU,3982
|
|
69
69
|
dtlpy/entities/integration.py,sha256=Kdy1j6-cJLW8qNmnqCmdg36phi843YDrlMqcMyMfvYk,5875
|
|
70
70
|
dtlpy/entities/item.py,sha256=vMMrUxdopp94cpNicCS4kTTUBP9eYwNilb1XhG8ZIeE,34839
|
|
@@ -156,7 +156,7 @@ dtlpy/ml/train_utils.py,sha256=R-BHKRfqDoLLhFyLzsRFyJ4E-8iedj9s9oZqy3IO2rg,2404
|
|
|
156
156
|
dtlpy/repositories/__init__.py,sha256=b7jPmE4meKaeikO-x87HcO2lcfQg-8OzqcYZa8n6l-Q,2033
|
|
157
157
|
dtlpy/repositories/analytics.py,sha256=dQPCYTPAIuyfVI_ppR49W7_GBj0033feIm9Gd7LW1V0,2966
|
|
158
158
|
dtlpy/repositories/annotations.py,sha256=idTKzanNt-ncB0eIKE5p6WclrVGNjceI2Y7dAzDFtzY,43595
|
|
159
|
-
dtlpy/repositories/apps.py,sha256=
|
|
159
|
+
dtlpy/repositories/apps.py,sha256=OE2UbxE2oGA44-7pso7fm9GErTRFyGEFK2k7ibC_h6U,16002
|
|
160
160
|
dtlpy/repositories/artifacts.py,sha256=Ke2ustTNw-1eQ0onLsWY7gL2aChjXPAX5p1uQ_EzMbo,19081
|
|
161
161
|
dtlpy/repositories/assignments.py,sha256=1VwJZ7ctQe1iaDDDpeYDgoj2G-TCgzolVLUEqUocd2w,25506
|
|
162
162
|
dtlpy/repositories/bots.py,sha256=q1SqH01JHloljKxknhHU09psV1vQx9lPhu3g8mBBeRg,8104
|
|
@@ -164,7 +164,7 @@ dtlpy/repositories/codebases.py,sha256=pvcZxdrq0-zWysVbdXjUOhnfcF6hJD8v5VclNZ-zh
|
|
|
164
164
|
dtlpy/repositories/collections.py,sha256=C_BPMg128Sl9AG3U4PxgI_2aaehQ2NuehMmzoTaXbPQ,11459
|
|
165
165
|
dtlpy/repositories/commands.py,sha256=i6gQgOmRDG8ixqKU7672H3CvGt8VLT3ihDVfri1eWWc,5610
|
|
166
166
|
dtlpy/repositories/compositions.py,sha256=H417BvlQAiWr5NH2eANFke6CfEO5o7DSvapYpf7v5Hk,2150
|
|
167
|
-
dtlpy/repositories/computes.py,sha256=
|
|
167
|
+
dtlpy/repositories/computes.py,sha256=iPFhtihBnTYnWSIViNE4ErC2peX2FF1fm36fZeVPcv4,10656
|
|
168
168
|
dtlpy/repositories/datasets.py,sha256=g0ii254YeAjA7B7MWhZoFsB03d70HiskCcPNkbfjC08,58762
|
|
169
169
|
dtlpy/repositories/downloader.py,sha256=p4XXmH8cjYN8o0FJt81S9VqtnOyqj3YEfZKP-l6KGEM,44651
|
|
170
170
|
dtlpy/repositories/dpks.py,sha256=dglvaiSFBvEithhlQ0RAXwzTxoZaICONs-owx3e2nfU,17848
|
|
@@ -192,7 +192,7 @@ dtlpy/repositories/tasks.py,sha256=sBV7SLLwt2QsJkjdEuKLJgIPS34H1b5E2rdFQb1n1Wo,5
|
|
|
192
192
|
dtlpy/repositories/times_series.py,sha256=m-bKFEgiZ13yQNelDjBfeXMUy_HgsPD_JAHj1GVx9fU,11420
|
|
193
193
|
dtlpy/repositories/triggers.py,sha256=izdNyCN1gDc5uo7AXntso0HSMTDIzGFUp-dSEz8cn_U,21990
|
|
194
194
|
dtlpy/repositories/upload_element.py,sha256=R2KWIXmkp_dMAIr81tu3Y_VRfldj0ju8__V28ombkcg,10677
|
|
195
|
-
dtlpy/repositories/uploader.py,sha256=
|
|
195
|
+
dtlpy/repositories/uploader.py,sha256=Keu_1fgJPiBpUgBGrAfRErejUK_UvqLTNdwK-BmTPY8,32064
|
|
196
196
|
dtlpy/repositories/webhooks.py,sha256=IIpxOJ-7KeQp1TY9aJZz-FuycSjAoYx0TDk8z86KAK8,9033
|
|
197
197
|
dtlpy/services/__init__.py,sha256=VfVJy2otIrDra6i7Sepjyez2ujiE6171ChQZp-YgxsM,904
|
|
198
198
|
dtlpy/services/aihttp_retry.py,sha256=tgntZsAY0dW9v08rkjX1T5BLNDdDd8svtgn7nH8DSGU,5022
|
|
@@ -224,19 +224,19 @@ dtlpy/utilities/reports/report.py,sha256=3nEsNnIWmdPEsd21nN8vMMgaZVcPKn9iawKTTeO
|
|
|
224
224
|
dtlpy/utilities/videos/__init__.py,sha256=SV3w51vfPuGBxaMeNemx6qEMHw_C4lLpWNGXMvdsKSY,734
|
|
225
225
|
dtlpy/utilities/videos/video_player.py,sha256=LCxg0EZ_DeuwcT7U_r7MRC6Q19s0xdFb7x5Gk39PRms,24072
|
|
226
226
|
dtlpy/utilities/videos/videos.py,sha256=Dj916B4TQRIhI7HZVevl3foFrCsPp0eeWwvGbgX3-_A,21875
|
|
227
|
-
dtlpy-1.
|
|
228
|
-
dtlpy-1.
|
|
229
|
-
dtlpy-1.
|
|
227
|
+
dtlpy-1.108.7.data/scripts/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
|
|
228
|
+
dtlpy-1.108.7.data/scripts/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
|
|
229
|
+
dtlpy-1.108.7.data/scripts/dlp.py,sha256=tEokRaDINISXnq8yNx_CBw1qM5uwjYiZoJOYGqWB3RU,4267
|
|
230
230
|
tests/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
231
231
|
tests/assets/models_flow/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
232
232
|
tests/assets/models_flow/failedmain.py,sha256=n8F4eu_u7JPrJ1zedbJPvv9e3lHb3ihoErqrBIcseEc,1847
|
|
233
233
|
tests/assets/models_flow/main.py,sha256=vnDKyVZaae2RFpvwS22Hzi6Dt2LJerH4yQrmKtaT8_g,2123
|
|
234
234
|
tests/assets/models_flow/main_model.py,sha256=Hl_tv7Q6KaRL3yLkpUoLMRqu5-ab1QsUYPL6RPEoamw,2042
|
|
235
235
|
tests/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
236
|
-
tests/features/environment.py,sha256=
|
|
237
|
-
dtlpy-1.
|
|
238
|
-
dtlpy-1.
|
|
239
|
-
dtlpy-1.
|
|
240
|
-
dtlpy-1.
|
|
241
|
-
dtlpy-1.
|
|
242
|
-
dtlpy-1.
|
|
236
|
+
tests/features/environment.py,sha256=JcM956BxLBRvDqy6Kr1Nxd1FY_gxbE6XztZBVBMCGYM,18897
|
|
237
|
+
dtlpy-1.108.7.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
238
|
+
dtlpy-1.108.7.dist-info/METADATA,sha256=85hCn6Cm55e6XrMDSk1qOQFh9-YnFL9tG_Sr0qH4aqA,3205
|
|
239
|
+
dtlpy-1.108.7.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
|
240
|
+
dtlpy-1.108.7.dist-info/entry_points.txt,sha256=C4PyKthCs_no88HU39eioO68oei64STYXC2ooGZTc4Y,43
|
|
241
|
+
dtlpy-1.108.7.dist-info/top_level.txt,sha256=ZWuLmQGUOtWAdgTf4Fbx884w1o0vBYq9dEc1zLv9Mig,12
|
|
242
|
+
dtlpy-1.108.7.dist-info/RECORD,,
|
tests/features/environment.py
CHANGED
|
@@ -121,20 +121,21 @@ def after_feature(context, feature):
|
|
|
121
121
|
|
|
122
122
|
# update api call json
|
|
123
123
|
if hasattr(feature, 'dataloop_feature_dl'):
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
with
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
124
|
+
if not os.environ.get('IGNORE_API_CALLS', 'false') == 'true':
|
|
125
|
+
try:
|
|
126
|
+
api_calls_path = os.path.join(os.environ['DATALOOP_TEST_ASSETS'], 'api_calls.json')
|
|
127
|
+
with open(api_calls_path, 'r') as f:
|
|
128
|
+
api_calls = json.load(f)
|
|
129
|
+
if context.feature.name in api_calls:
|
|
130
|
+
api_calls[context.feature.name] += feature.dataloop_feature_dl.client_api.calls_counter.number
|
|
131
|
+
else:
|
|
132
|
+
api_calls[context.feature.name] = feature.dataloop_feature_dl.client_api.calls_counter.number
|
|
133
|
+
# lock the file for multi processes needs
|
|
134
|
+
with FileLock("api_calls.json.lock"):
|
|
135
|
+
with open(api_calls_path, 'w') as f:
|
|
136
|
+
json.dump(api_calls, f)
|
|
137
|
+
except Exception:
|
|
138
|
+
logging.exception('Failed to update api calls')
|
|
138
139
|
|
|
139
140
|
if hasattr(feature, 'dataloop_feature_compute'):
|
|
140
141
|
try:
|
|
@@ -293,7 +294,7 @@ def after_tag(context, tag):
|
|
|
293
294
|
pass
|
|
294
295
|
elif tag == 'wip':
|
|
295
296
|
pass
|
|
296
|
-
elif any(i_tag in tag for i_tag in ['DAT-', 'qa-', 'rc_only', 'skip_test']):
|
|
297
|
+
elif any(i_tag in tag for i_tag in ['DAT-', 'qa-', 'rc_only', 'skip_test', 'ATP', 'AIRGAPPED']):
|
|
297
298
|
pass
|
|
298
299
|
else:
|
|
299
300
|
raise ValueError('unknown tag: {}'.format(tag))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|