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 CHANGED
@@ -1 +1 @@
1
- version = '1.107.8'
1
+ version = '1.108.7'
@@ -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
+
@@ -45,6 +45,8 @@ class AnnotationType(str, Enum):
45
45
  SUBTITLE = "subtitle"
46
46
  TEXT = "text_mark"
47
47
  GIS = "gis"
48
+ SEMANTIC_3D = "ref_semantic_3d"
49
+ POLYLINE_3D = "polyline_3d"
48
50
 
49
51
 
50
52
  class ViewAnnotationOptions(str, Enum):
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
- preemtible: bool = False,
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.preemtible = preemtible
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
- preemtible=_json.get('preemtible'),
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
- 'preemtible': self.preemtible,
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
- self.add(field='type',
332
- values=['box', 'class', 'comparison', 'ellipse', 'point', 'segment', 'polyline', 'binary',
333
- 'subtitle', 'cube', 'cube_3d', 'pose', 'text_mark', 'text', 'ref_image', 'gis'],
334
- operator=FiltersOperations.IN,
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()
@@ -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
- raise exceptions.PlatformException(
20
- error='2001',
21
- message='Missing "project". need to set a Project entity or use project.apps repository')
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
 
@@ -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
- 'shared_contexts': [sc.to_json() for sc in shared_contexts],
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):
@@ -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.107.8
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
  ![logo.svg](docs%2F_static%2Flogo.svg)
47
+
47
48
  [![Documentation Status](https://readthedocs.org/projects/dtlpy/badge/?version=latest)](https://sdk-docs.dataloop.ai/en/latest/?badge=latest)
48
49
  [![pypi](https://img.shields.io/pypi/v/dtlpy.svg)](https://pypi.org/project/dtlpy/)
49
50
  [![versions](https://img.shields.io/pypi/pyversions/dtlpy.svg)](https://github.com/dataloop-ai/dtlpy)
50
51
  [![license](https://img.shields.io/github/license/dataloop-ai/dtlpy.svg)](https://github.com/dataloop-ai/dtlpy/blob/master/LICENSE)
51
52
  [![Downloads](https://static.pepy.tech/personalized-badge/dtlpy?period=total&units=international_system&left_color=grey&right_color=green&left_text=Downloads)](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
- ### Python Support
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=DyXSqQ9xDLitJutTU-b8vJ4YgdU54rdp_AMOoLtwOKE,20
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=HQ2p5IWmBqT5oG908poiDsSsQOnESsV_Y2rHASEHdcs,4943
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=qpMGn1GEEw1Zdam4rL0gPaE4f_2hIyd_-tbNhoZLFWg,68482
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=dVd87-mP22NWvec5nqA5VjZ8Qk3aJlgUcloIAAOAPUw,6968
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=6mN4ZRUTf28wc0YtFy7W4mONaoZI0DyIGvwosjQrsAA,14663
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=PUmgor77m3CWeUgvCdWMg3Bt5SxHXPVBbN5VmD_dglQ,22683
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=J-PDCPWVtvTLmzzkABs2-8zo9hGLk_z_sNR2JB1mB0c,15752
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=l0-FS3_8WEGG5tbtIR3ltsZc6MyHVkiYajHTCaeUugk,10156
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=5qQbsg701HrL8x0wWCRLPBP_dztqXEb31QfeZnh0SQk,31988
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.107.8.data/scripts/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
228
- dtlpy-1.107.8.data/scripts/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
229
- dtlpy-1.107.8.data/scripts/dlp.py,sha256=tEokRaDINISXnq8yNx_CBw1qM5uwjYiZoJOYGqWB3RU,4267
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=TMeUzSZkksHqbxNBDLk-LYBMD4G5dMo4ZLZXPwQImVE,18751
237
- dtlpy-1.107.8.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
238
- dtlpy-1.107.8.dist-info/METADATA,sha256=VTZNTqnNeuyZQM3xubZ68omm1J5fBp-e13CS7GRjjVA,3019
239
- dtlpy-1.107.8.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
240
- dtlpy-1.107.8.dist-info/entry_points.txt,sha256=C4PyKthCs_no88HU39eioO68oei64STYXC2ooGZTc4Y,43
241
- dtlpy-1.107.8.dist-info/top_level.txt,sha256=ZWuLmQGUOtWAdgTf4Fbx884w1o0vBYq9dEc1zLv9Mig,12
242
- dtlpy-1.107.8.dist-info/RECORD,,
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,,
@@ -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
- try:
125
- api_calls_path = os.path.join(os.environ['DATALOOP_TEST_ASSETS'], 'api_calls.json')
126
- with open(api_calls_path, 'r') as f:
127
- api_calls = json.load(f)
128
- if context.feature.name in api_calls:
129
- api_calls[context.feature.name] += feature.dataloop_feature_dl.client_api.calls_counter.number
130
- else:
131
- api_calls[context.feature.name] = feature.dataloop_feature_dl.client_api.calls_counter.number
132
- # lock the file for multi processes needs
133
- with FileLock("api_calls.json.lock"):
134
- with open(api_calls_path, 'w') as f:
135
- json.dump(api_calls, f)
136
- except Exception:
137
- logging.exception('Failed to update api calls')
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