dtlpy 1.86.13__py3-none-any.whl → 1.87.18__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.
Files changed (39) hide show
  1. dtlpy/__init__.py +2 -2
  2. dtlpy/__version__.py +1 -1
  3. dtlpy/entities/annotation.py +10 -12
  4. dtlpy/entities/annotation_collection.py +0 -2
  5. dtlpy/entities/command.py +1 -1
  6. dtlpy/entities/dataset.py +4 -8
  7. dtlpy/entities/filters.py +12 -2
  8. dtlpy/entities/model.py +11 -2
  9. dtlpy/entities/node.py +6 -2
  10. dtlpy/entities/ontology.py +2 -2
  11. dtlpy/entities/package_function.py +3 -0
  12. dtlpy/entities/pipeline.py +7 -1
  13. dtlpy/entities/recipe.py +1 -1
  14. dtlpy/entities/service.py +22 -11
  15. dtlpy/entities/task.py +18 -1
  16. dtlpy/entities/trigger.py +7 -1
  17. dtlpy/ml/base_model_adapter.py +8 -10
  18. dtlpy/ml/train_utils.py +0 -1
  19. dtlpy/new_instance.py +5 -3
  20. dtlpy/repositories/artifacts.py +9 -15
  21. dtlpy/repositories/codebases.py +2 -14
  22. dtlpy/repositories/commands.py +6 -7
  23. dtlpy/repositories/datasets.py +73 -43
  24. dtlpy/repositories/downloader.py +1 -1
  25. dtlpy/repositories/models.py +7 -21
  26. dtlpy/repositories/packages.py +5 -4
  27. dtlpy/repositories/services.py +32 -5
  28. dtlpy/repositories/tasks.py +1 -1
  29. dtlpy/repositories/uploader.py +1 -1
  30. dtlpy/services/api_client.py +1 -1
  31. {dtlpy-1.86.13.dist-info → dtlpy-1.87.18.dist-info}/METADATA +1 -1
  32. {dtlpy-1.86.13.dist-info → dtlpy-1.87.18.dist-info}/RECORD +39 -39
  33. {dtlpy-1.86.13.data → dtlpy-1.87.18.data}/scripts/dlp +0 -0
  34. {dtlpy-1.86.13.data → dtlpy-1.87.18.data}/scripts/dlp.bat +0 -0
  35. {dtlpy-1.86.13.data → dtlpy-1.87.18.data}/scripts/dlp.py +0 -0
  36. {dtlpy-1.86.13.dist-info → dtlpy-1.87.18.dist-info}/LICENSE +0 -0
  37. {dtlpy-1.86.13.dist-info → dtlpy-1.87.18.dist-info}/WHEEL +0 -0
  38. {dtlpy-1.86.13.dist-info → dtlpy-1.87.18.dist-info}/entry_points.txt +0 -0
  39. {dtlpy-1.86.13.dist-info → dtlpy-1.87.18.dist-info}/top_level.txt +0 -0
@@ -1,5 +1,4 @@
1
1
  import numpy as np
2
- import warnings
3
2
  import logging
4
3
  import time
5
4
  import tqdm
@@ -10,7 +9,7 @@ from ..services.api_client import ApiClient
10
9
 
11
10
  logger = logging.getLogger(name='dtlpy')
12
11
 
13
- MAX_SLEEP_TIME = 8
12
+ MAX_SLEEP_TIME = 30
14
13
 
15
14
 
16
15
  class Commands:
@@ -71,15 +70,15 @@ class Commands:
71
70
  return entities.Command.from_json(client_api=self._client_api,
72
71
  _json=response.json())
73
72
 
74
- def wait(self, command_id, timeout=0, step=None, url=None, backoff_factor=0.1):
73
+ def wait(self, command_id, timeout=0, step=None, url=None, backoff_factor=1):
75
74
  """
76
75
  Wait for command to finish
77
76
 
78
77
  backoff_factor: A backoff factor to apply between attempts after the second try
79
78
  {backoff factor} * (2 ** ({number of total retries} - 1))
80
- seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep
81
- for [0.0s, 0.2s, 0.4s, ...] between retries. It will never be longer
82
- than 8 sec
79
+ seconds. If the backoff_factor is 1, then :func:`.sleep` will sleep
80
+ for [0s, 2s, 4s, ...] between retries. It will never be longer
81
+ than 30 sec
83
82
 
84
83
  :param str command_id: Command id to wait to
85
84
  :param int timeout: int, seconds to wait until TimeoutError is raised. if 0 - wait until done
@@ -103,7 +102,7 @@ class Commands:
103
102
  if not command.in_progress():
104
103
  break
105
104
  elapsed = time.time() - start
106
- sleep_time = np.min([timeout - elapsed, backoff_factor * (2 ** (num_tries - 1)), MAX_SLEEP_TIME])
105
+ sleep_time = np.min([timeout - elapsed, backoff_factor * (2 ** num_tries), MAX_SLEEP_TIME])
107
106
  num_tries += 1
108
107
  logger.debug("Command {!r} is running for {:.2f}[s] and now Going to sleep {:.2f}[s]".format(command.id,
109
108
  elapsed,
@@ -96,6 +96,21 @@ class Datasets:
96
96
  filters.add(field='dir', values=folder_path + '*')
97
97
  return filters
98
98
 
99
+ def _get_binaries_dataset(self):
100
+ filters = entities.Filters(resource=entities.FiltersResource.DATASET)
101
+ filters.add(field='name', values='Binaries')
102
+ filters.system_space = True
103
+ datasets = self.list(filters=filters)
104
+ if len(datasets) == 0:
105
+ # empty list
106
+ raise exceptions.PlatformException('404', 'Dataset not found. Name: "Binaries"')
107
+ # dataset = None
108
+ elif len(datasets) > 1:
109
+ raise exceptions.PlatformException('400', 'More than one dataset with same name.')
110
+ else:
111
+ dataset = datasets[0]
112
+ return dataset
113
+
99
114
  @property
100
115
  def platform_url(self):
101
116
  return self._client_api._get_resource_url("projects/{}/datasets".format(self.project.id))
@@ -165,58 +180,78 @@ class Datasets:
165
180
  self._client_api.state_io.put('dataset', dataset.to_json())
166
181
  logger.info('Checked out to dataset {}'.format(dataset.name))
167
182
 
168
- @_api_reference.add(path='/datasets', method='get')
169
- def list(self, name=None, creator=None) -> miscellaneous.List[entities.Dataset]:
183
+ @_api_reference.add(path='/datasets/query', method='post')
184
+ def list(self, name=None, creator=None, filters: entities.Filters = None) -> miscellaneous.List[entities.Dataset]:
170
185
  """
171
186
  List all datasets.
172
187
 
173
188
  **Prerequisites**: You must be an *owner* or *developer* to use this method.
174
189
 
175
190
  :param str name: list by name
176
- :param str creator: list by creator
191
+ :param str creator: list by
192
+ :param dtlpy.entities.filters.Filters filters: Filters entity containing filters parameters
177
193
  :return: List of datasets
178
194
  :rtype: list
179
195
 
180
196
  **Example**:
181
197
 
182
198
  .. code-block:: python
183
-
184
- datasets = project.datasets.list(name='name')
199
+ filters = dl.Filters(resource='datasets')
200
+ filters.add(field='readonly', values=False)
201
+ datasets = project.datasets.list(filters=filters)
185
202
  """
186
- url = '/datasets'
203
+ if filters is None:
204
+ filters = entities.Filters(resource=entities.FiltersResource.DATASET)
205
+ # assert type filters
206
+ elif not isinstance(filters, entities.Filters):
207
+ raise exceptions.PlatformException(error='400',
208
+ message='Unknown filters type: {!r}'.format(type(filters)))
209
+ if filters.resource != entities.FiltersResource.DATASET:
210
+ raise exceptions.PlatformException(
211
+ error='400',
212
+ message='Filters resource must to be FiltersResource.DATASET. Got: {!r}'.format(filters.resource))
187
213
 
188
- query_params = {
189
- 'name': name,
190
- 'creator': creator
191
- }
214
+ url = '/datasets/query'
192
215
 
216
+ if name is not None:
217
+ filters.add(field='name', values=name)
218
+ if creator is not None:
219
+ filters.add(field='creator', values=creator)
193
220
  if self._project is not None:
194
- query_params['projects'] = self.project.id
195
-
196
- url += '?{}'.format(urlencode({key: val for key, val in query_params.items() if val is not None}, doseq=True))
197
-
198
- success, response = self._client_api.gen_request(req_type='get',
199
- path=url)
200
- if success:
201
- pool = self._client_api.thread_pools('entity.create')
202
- datasets_json = response.json()
203
- jobs = [None for _ in range(len(datasets_json))]
204
- # return triggers list
205
- for i_dataset, dataset in enumerate(datasets_json):
206
- jobs[i_dataset] = pool.submit(entities.Dataset._protected_from_json,
207
- **{'client_api': self._client_api,
208
- '_json': dataset,
209
- 'datasets': self,
210
- 'project': self.project})
211
-
212
- # get all results
213
- results = [j.result() for j in jobs]
214
- # log errors
215
- _ = [logger.warning(r[1]) for r in results if r[0] is False]
216
- # return good jobs
217
- datasets = miscellaneous.List([r[1] for r in results if r[0] is True])
218
- else:
219
- raise exceptions.PlatformException(response)
221
+ filters.context = {"projects": [self._project.id]}
222
+ filters.page_size = 1000
223
+ filters.page = 0
224
+ datasets = list()
225
+ while True:
226
+ success, response = self._client_api.gen_request(req_type='POST',
227
+ json_req=filters.prepare(),
228
+ path=url,
229
+ headers={'user_query': filters._user_query})
230
+ if success:
231
+ pool = self._client_api.thread_pools('entity.create')
232
+ datasets_json = response.json()['items']
233
+ jobs = [None for _ in range(len(datasets_json))]
234
+ # return triggers list
235
+ for i_dataset, dataset in enumerate(datasets_json):
236
+ jobs[i_dataset] = pool.submit(entities.Dataset._protected_from_json,
237
+ **{'client_api': self._client_api,
238
+ '_json': dataset,
239
+ 'datasets': self,
240
+ 'project': self.project})
241
+
242
+ # get all results
243
+ results = [j.result() for j in jobs]
244
+ # log errors
245
+ _ = [logger.warning(r[1]) for r in results if r[0] is False]
246
+ # return good jobs
247
+ datasets.extend([r[1] for r in results if r[0] is True])
248
+ if response.json()['hasNextPage'] is True:
249
+ filters.page += 1
250
+ else:
251
+ break
252
+ else:
253
+ raise exceptions.PlatformException(response)
254
+ datasets = miscellaneous.List(datasets)
220
255
  return datasets
221
256
 
222
257
  @_api_reference.add(path='/datasets/{id}', method='get')
@@ -953,10 +988,5 @@ class Datasets:
953
988
 
954
989
  project.datasets.set_readonly(dataset='dataset_entity', state=True)
955
990
  """
956
- if dataset.readonly != state:
957
- patch = {'readonly': state}
958
- self.update(dataset=dataset,
959
- patch=patch)
960
- dataset._readonly = state
961
- else:
962
- logger.warning('Dataset is already "readonly={}". Nothing was done'.format(state))
991
+ import warnings
992
+ warnings.warn("`readonly` flag on dataset is deprecated, doing nothing.", DeprecationWarning)
@@ -816,7 +816,7 @@ class Downloader:
816
816
  total=3,
817
817
  read=3,
818
818
  connect=3,
819
- backoff_factor=0.3,
819
+ backoff_factor=1,
820
820
  )
821
821
  adapter = HTTPAdapter(max_retries=retry)
822
822
  s.mount('http://', adapter)
@@ -267,7 +267,7 @@ class Models:
267
267
  def create(
268
268
  self,
269
269
  model_name: str,
270
- dataset_id: str,
270
+ dataset_id: str = None,
271
271
  labels: list = None,
272
272
  ontology_id: str = None,
273
273
  description: str = None,
@@ -329,22 +329,22 @@ class Models:
329
329
  if output_type is None:
330
330
  output_type = entities.AnnotationType.CLASSIFICATION
331
331
 
332
+ if package is None and self._package is None:
333
+ raise exceptions.PlatformException('Must provide a Package or create from package.models')
334
+ elif package is None:
335
+ package = self._package
336
+
332
337
  # TODO need to remove the entire project id user interface - need to take it from dataset id (in BE)
333
338
  if project_id is None:
334
339
  if self._project is None:
335
340
  raise exceptions.PlatformException('Please provide project_id')
336
341
  project_id = self._project.id
337
342
  else:
338
- if project_id != self._project_id:
343
+ if project_id != self._project_id and not package.is_global:
339
344
  logger.warning(
340
345
  "Note! you are specified project_id {!r} which is different from repository context: {!r}".format(
341
346
  project_id, self._project_id))
342
347
 
343
- if package is None and self._package is None:
344
- raise exceptions.PlatformException('Must provide a Package or create from package.models')
345
- elif package is None:
346
- package = self._package
347
-
348
348
  if model_artifacts is None:
349
349
  model_artifacts = []
350
350
 
@@ -396,15 +396,6 @@ class Models:
396
396
  project=self._project,
397
397
  package=package)
398
398
 
399
- if dataset_id is None:
400
- logger.warning(
401
- "Model {!r} was created without a dataset. This may cause unexpected errors.".format(model.id))
402
- else:
403
- if model.dataset.readonly is False:
404
- logger.warning(
405
- "Model is using an unlocked dataset {!r}. Make it readonly for training reproducibility".format(
406
- model.dataset.name))
407
-
408
399
  return model
409
400
 
410
401
  def clone(self,
@@ -488,11 +479,6 @@ class Models:
488
479
  project=self._project,
489
480
  package=from_model._package)
490
481
 
491
- if new_model._dataset is not None and new_model._dataset.readonly is False:
492
- logger.warning(
493
- "Model is using an unlocked dataset {!r}. Make it readonly for training reproducibility".format(
494
- new_model.dataset.name))
495
-
496
482
  return new_model
497
483
 
498
484
  @property
@@ -513,17 +513,18 @@ class Packages:
513
513
 
514
514
  # get package json
515
515
  package_from_json = dict()
516
- if assets.paths.PACKAGE_FILENAME in os.listdir(src_path):
516
+ path_files = os.listdir(src_path) if src_path is not None else []
517
+ if assets.paths.PACKAGE_FILENAME in path_files:
517
518
  with open(os.path.join(src_path, assets.paths.PACKAGE_FILENAME), 'r') as f:
518
519
  package_from_json = json.load(f)
519
520
 
520
521
  if requirements is not None and not isinstance(requirements, list):
521
522
  requirements = [requirements]
522
523
 
523
- if requirements and assets.paths.REQUIREMENTS_FILENAME in os.listdir(src_path):
524
+ if requirements and assets.paths.REQUIREMENTS_FILENAME in path_files:
524
525
  logger.warning('Have both requirements param and requirements file will overwrite the requirements file')
525
526
 
526
- if not requirements and assets.paths.REQUIREMENTS_FILENAME in os.listdir(src_path):
527
+ if not requirements and assets.paths.REQUIREMENTS_FILENAME in path_files:
527
528
  req_path = os.path.join(src_path, assets.paths.REQUIREMENTS_FILENAME)
528
529
  req_from_file = self.build_requirements(filepath=req_path)
529
530
  requirements = req_from_file
@@ -709,7 +710,7 @@ class Packages:
709
710
  client_api=self._client_api,
710
711
  project=project_to_deploy)
711
712
 
712
- @_api_reference.add(path='/packages/{ids}', method='delete')
713
+ @_api_reference.add(path='/packages/{id}', method='delete')
713
714
  def delete(self, package: entities.Package = None, package_name=None, package_id=None):
714
715
  """
715
716
  Delete a Package object.
@@ -26,10 +26,17 @@ class Services:
26
26
  client_api: ApiClient,
27
27
  project: entities.Project = None,
28
28
  package: entities.Package = None,
29
- project_id=None):
29
+ project_id=None,
30
+ model_id=None,
31
+ model: entities.Model = None):
30
32
  self._client_api = client_api
31
33
  self._package = package
32
34
  self._project = project
35
+ self._model = model
36
+ if model_id is None:
37
+ if model is not None:
38
+ model_id = model.id
39
+ self._model_id = model_id
33
40
  if project_id is None:
34
41
  if project is not None:
35
42
  project_id = project.id
@@ -77,6 +84,26 @@ class Services:
77
84
  if not isinstance(project, entities.Project):
78
85
  raise ValueError('Must input a valid Project entity')
79
86
  self._project = project
87
+ self._project_id = project.id
88
+
89
+ @property
90
+ def model(self) -> entities.Model:
91
+ if self._model is None:
92
+ if self._model_id is not None:
93
+ self._model = self.project.models.get(model_id=self._model_id)
94
+ else:
95
+ raise exceptions.PlatformException(
96
+ error='2001',
97
+ message='Cannot perform action WITHOUT model entity in services repository. Please set a model')
98
+ assert isinstance(self._model, entities.Model)
99
+ return self._model
100
+
101
+ @model.setter
102
+ def model(self, model: entities.Model):
103
+ if not isinstance(model, entities.Model):
104
+ raise ValueError('Must input a valid model entity')
105
+ self._model = model
106
+ self._model_id = model.id
80
107
 
81
108
  @property
82
109
  def platform_url(self):
@@ -324,10 +351,10 @@ class Services:
324
351
  raise exceptions.PlatformException(
325
352
  error='400',
326
353
  message='Filters resource must to be FiltersResource.SERVICE. Got: {!r}'.format(filters.resource))
327
- if self._project is not None:
328
- filters.add(field='projectId', values=self._project.id)
329
- elif self._project_id is not None:
354
+ if self._project_id is not None:
330
355
  filters.add(field='projectId', values=self._project_id)
356
+ if self._model_id is not None:
357
+ filters.add(field='metadata.ml.modelId', values=self._model_id)
331
358
  if self._package is not None:
332
359
  filters.add(field='packageId', values=self._package.id)
333
360
 
@@ -1472,7 +1499,7 @@ class Services:
1472
1499
  path=url,
1473
1500
  json_req=payload)
1474
1501
 
1475
- def __polling_wait(self, organization, pod_type, backoff_factor=0.1):
1502
+ def __polling_wait(self, organization, pod_type, backoff_factor=1):
1476
1503
  fs_url_path = '/services/fs-cache?mode={}'.format('get')
1477
1504
  i = 1
1478
1505
  while True:
@@ -881,7 +881,7 @@ class Tasks:
881
881
  client_api=self._client_api)
882
882
  if not wait:
883
883
  return command
884
- backoff_factor = 0.1
884
+ backoff_factor = 2
885
885
  if command.type == 'BulkAddToTaskSetting':
886
886
  backoff_factor = 8
887
887
  command = command.wait(timeout=0, backoff_factor=backoff_factor)
@@ -552,7 +552,7 @@ class Uploader:
552
552
  total=3,
553
553
  read=3,
554
554
  connect=3,
555
- backoff_factor=0.3,
555
+ backoff_factor=1,
556
556
  )
557
557
  adapter = HTTPAdapter(max_retries=retry)
558
558
  s.mount('http://', adapter)
@@ -1206,7 +1206,7 @@ class ApiClient:
1206
1206
  total=5,
1207
1207
  read=5,
1208
1208
  connect=5,
1209
- backoff_factor=0.3,
1209
+ backoff_factor=1,
1210
1210
  # use on any request type
1211
1211
  allowed_methods=False,
1212
1212
  # force retry on those status responses
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dtlpy
3
- Version: 1.86.13
3
+ Version: 1.87.18
4
4
  Summary: SDK and CLI for Dataloop platform
5
5
  Home-page: https://github.com/dataloop-ai/dtlpy
6
6
  Author: Dataloop Team
@@ -1,7 +1,7 @@
1
- dtlpy/__init__.py,sha256=qy_9tK4NLzBNjx7ZnQKsTIE_U9qVOA8USQoVLtkyNEs,20071
2
- dtlpy/__version__.py,sha256=IHRFH823DZGTh4kPMdU-lsIwvj77zky63ys-LTF6jZA,20
1
+ dtlpy/__init__.py,sha256=T_6RQvFl0hF5gmKdFBBNDHg0RcLJFd31KthBJlYEXa4,20063
2
+ dtlpy/__version__.py,sha256=49Xc4KU8IhbrpGsUDcvj5etDsYp1n8Z2uEkCkDHSfbo,20
3
3
  dtlpy/exceptions.py,sha256=EQCKs3pwhwZhgMByQN3D3LpWpdxwcKPEEt-bIaDwURM,2871
4
- dtlpy/new_instance.py,sha256=FSO19l_6xmHb1zjFVE4l05VJY-mWQ2gGoeS8XD8kttI,5530
4
+ dtlpy/new_instance.py,sha256=_-F1NTJgGCCHnW68eIexwq7leLGTCHcPxodbw9mfasI,5555
5
5
  dtlpy/assets/__init__.py,sha256=D_hAa6NM8Zoy32sF_9b7m0b7I-BQEyBFg8-9Tg2WOeo,976
6
6
  dtlpy/assets/lock_open.png,sha256=vXHune4YF__fINPQ2l61G2zI3BeJPX_z5gkwzUNFAxs,24081
7
7
  dtlpy/assets/main.py,sha256=N1JUsx79qnXI7Hx22C8JOzHJdGHxvrXeTx5UZAxvJfE,1380
@@ -49,8 +49,8 @@ dtlpy/dlp/dlp.py,sha256=YjNBjeCDTXJ7tj8qdiGZ8lFb8DtPZl-FvViyjxt9xF8,4278
49
49
  dtlpy/dlp/parser.py,sha256=dU8hwomLdBs5MdCUsm574eipgo0Q4SJuvXPrc3KtlwY,30551
50
50
  dtlpy/entities/__init__.py,sha256=83j8Jxcfx-mcNVZly7qMAuWtTMJFSxnm_ub-q-qt5iA,4396
51
51
  dtlpy/entities/analytic.py,sha256=5eAavh_NmvSWsD7uzon2vQn08chbc-dh1nlJc0awkQI,11374
52
- dtlpy/entities/annotation.py,sha256=E4wtkmXJT2XOLrRVm6NXSsTbRTJefiwJYnpi24kwiF4,67623
53
- dtlpy/entities/annotation_collection.py,sha256=el-0Cc14OzzOlhj6946hD9cdqPAvYBep4ncNDG7rfRU,30043
52
+ dtlpy/entities/annotation.py,sha256=s-g39sdUFafhsbGN1Taf2DSqoKbyRtWc0TVNhPpEAwA,67515
53
+ dtlpy/entities/annotation_collection.py,sha256=Uh7pnyhAv4epMApHRtIdWRG_ro9U6p7yNV7Lnjzdzqk,29979
54
54
  dtlpy/entities/app.py,sha256=IuNNH-S1YGwOUZJGRPA7lZyTcb5ZhJoua4P5tdO7rCU,4850
55
55
  dtlpy/entities/app_module.py,sha256=0UiAbBX1q8iEImi3nY7ySWZZHoRRwu0qUXmyXmgVAc4,3645
56
56
  dtlpy/entities/artifact.py,sha256=wtLtBuidOPbnba0ok40JyunCCIBGbAl4bP_ebK39Kk4,5711
@@ -58,42 +58,42 @@ dtlpy/entities/assignment.py,sha256=LTUxE2ZB5iZSbSeoroHe5P7Kv6E_K2b5cdY-7TZ4HFE,
58
58
  dtlpy/entities/base_entity.py,sha256=i8VzoXdkkJbUJD7U7U-bkbQKiUWkRwZZhl-mQT5WUsc,7578
59
59
  dtlpy/entities/bot.py,sha256=is3NUCnPg56HSjsHIvFcVkymValMqDV0uHRDC1Ib-ds,3819
60
60
  dtlpy/entities/codebase.py,sha256=pwRkAq2GV0wvmzshg89IAmE-0I2Wsy_-QNOu8OV8uqc,8999
61
- dtlpy/entities/command.py,sha256=SJNGDonOHILhDyJlixt0ZYJngJBTCANjyGmLfkOfjVI,4978
62
- dtlpy/entities/dataset.py,sha256=n0IqJWFnAgkydmTk3Oxt-9a4e2Cj-r700zYFaRyEkME,45032
61
+ dtlpy/entities/command.py,sha256=dv7w0GfTqq4OeLUoAUElYCdOrvE2Lp9Cx-XdA9N4314,4976
62
+ dtlpy/entities/dataset.py,sha256=6n_0TeH4A8Je-ZUwX1Vc2GFJO9k8HU67n_j2hHWcFi4,44831
63
63
  dtlpy/entities/directory_tree.py,sha256=Rni6pLSWytR6yeUPgEdCCRfTg_cqLOdUc9uCqz9KT-Q,1186
64
64
  dtlpy/entities/dpk.py,sha256=l-wz4h9xB3ag1qgDTpUOJIzpKVBdjMdeVhXtvk2jW88,12620
65
65
  dtlpy/entities/driver.py,sha256=O_QdK1EaLjQyQkmvKsmkNgmvmMb1mPjKnJGxK43KrOA,7197
66
66
  dtlpy/entities/execution.py,sha256=xZxfF3tYtf7tJ_GKzwSoEkF1zhlnWmbBzLoVXrNl8DE,12800
67
67
  dtlpy/entities/feature.py,sha256=9fFjD0W57anOVSAVU55ypxN_WTCsWTG03Wkc3cAAj78,3732
68
68
  dtlpy/entities/feature_set.py,sha256=lKbaLLklYC8dZGCDzQa8T-LSYpUygqLwlC_jhHtOfLw,4326
69
- dtlpy/entities/filters.py,sha256=tq8gX_2q0yhGzWwCXYh34o-qwQ-TWREasUbJCZ70QZI,18520
69
+ dtlpy/entities/filters.py,sha256=HV06ipH6APG1r4PnlUVvlIMSoR76kbk7Nywz8-kcwpM,18826
70
70
  dtlpy/entities/integration.py,sha256=BaqdMbI4OqRVpB_GX1pHfNYgDO8OBfV06wKRNFR1ohI,5482
71
71
  dtlpy/entities/item.py,sha256=JGdBa8RDPWnVOdqRdKoz-T3o8rCOsLbKFdhs0KQDa6o,28369
72
72
  dtlpy/entities/label.py,sha256=ycDYavIgKhz806plIX-64c07_TeHpDa-V7LnfFVe4Rg,3869
73
73
  dtlpy/entities/links.py,sha256=FAmEwHtsrqKet3c0UHH9u_gHgG6_OwF1-rl4xK7guME,2516
74
74
  dtlpy/entities/message.py,sha256=ApJuaKEqxATpXjNYUjGdYPu3ibQzEMo8-LtJ_4xAcPI,5865
75
- dtlpy/entities/model.py,sha256=tkjebBZXEjPiu4M3vKE5WpAlIYJvGxGnL01ftIWE92o,23763
76
- dtlpy/entities/node.py,sha256=VtbsV1VjTnyUYXHPGAl5iLgpfRcfdQw7gQteb3_pEyw,37246
77
- dtlpy/entities/ontology.py,sha256=v1gaVSWwsz-2-HqChPInLBVavcb65NOjDTxixwOXVlw,29275
75
+ dtlpy/entities/model.py,sha256=SProbsv3FVyd_eld3bc3mD-RinldD6Gq797UueEz_EM,24144
76
+ dtlpy/entities/node.py,sha256=jpf_aQRoBxD6XEZ3xjpgTPp8Iuj6Z4mAQbK7RC0Larw,37463
77
+ dtlpy/entities/ontology.py,sha256=hpex7wLJ2JXMFq3lxLfN49LPz4M3GJIjqD-7HL5hOEw,29265
78
78
  dtlpy/entities/organization.py,sha256=AMkx8hNIIIjnu5pYlNjckMRuKt6H3lnOAqtEynkr7wg,9893
79
79
  dtlpy/entities/package.py,sha256=EA5cB3nFBlsbxVK-QroZILjol2bYSVGqCby-mOyJJjQ,26353
80
80
  dtlpy/entities/package_defaults.py,sha256=wTD7Z7rGYjVy8AcUxTFEnkOkviiJaLVZYvduiUBKNZo,211
81
- dtlpy/entities/package_function.py,sha256=DsJbhYICDWW_WivhUaVa-vUKWZJ-3K7s9DKiDtqsI2o,5903
81
+ dtlpy/entities/package_function.py,sha256=kQsfW-LOTAVd8oDm-F0iWLvKsFmAXSp5ZoBrXPvISRE,6067
82
82
  dtlpy/entities/package_module.py,sha256=MBaJ5j8eCERsP-s1SIO8_daTU1gEqcaDSpUBu_gUTAk,4035
83
83
  dtlpy/entities/package_slot.py,sha256=XBwCodQe618sQm0bmx46Npo94mEk-zUV7ZX0mDRcsD8,3946
84
84
  dtlpy/entities/paged_entities.py,sha256=A6_D0CUJsN52dBG6yn-oHHzjuVDkBNejTG5r-KxWOxI,5848
85
- dtlpy/entities/pipeline.py,sha256=Jdaz9EzXuRwNStf_g8HPvHZ0nMBMrsWmnMjW2vfB1yI,19797
85
+ dtlpy/entities/pipeline.py,sha256=-_Y50J3bFSfRbZVcqgg4H__x35Jp6fK6aX27o4jL1QQ,20070
86
86
  dtlpy/entities/pipeline_execution.py,sha256=2FKZhvcksWFYjTBQxnLtpRVy2PFGNkkt0EipWMan1JA,8907
87
87
  dtlpy/entities/project.py,sha256=ZUx8zA3mr6N145M62R3UDPCCzO1vxfyWO6vjES-bO-g,14653
88
88
  dtlpy/entities/prompt_item.py,sha256=42U1gp9CmasMUPjr6JdEXNGfek_lDn8_2M2Xb1GPeSw,2469
89
- dtlpy/entities/recipe.py,sha256=F4TtYG8mCaDYBf_jkzpW16CKBuQ568hL85FVTIX_zdg,10198
89
+ dtlpy/entities/recipe.py,sha256=m8EDczbNcEY5H8xyyendX5q1ECSC1qrpRmwDQrW221g,10193
90
90
  dtlpy/entities/reflect_dict.py,sha256=2NaSAL-CO0T0FYRYFQlaSpbsoLT2Q18AqdHgQSLX5Y4,3273
91
91
  dtlpy/entities/resource_execution.py,sha256=1HuVV__U4jAUOtOkWlWImnM3Yts8qxMSAkMA9sBhArY,5033
92
- dtlpy/entities/service.py,sha256=eLQSHSpMAFnsQNK728sXRMQCn3ILSfsbDP8XhnXsyf4,28027
92
+ dtlpy/entities/service.py,sha256=RP5tn0llzEr5wiuiV1H_ljWtgUdkRQDpaRsh1QnbkMo,28467
93
93
  dtlpy/entities/setting.py,sha256=F8QvHQKgeX5wM4jujYHpxgbpk28ukfUjLvBE9-rHoI8,8500
94
- dtlpy/entities/task.py,sha256=v6Bu_xDnsv8St1aJbI9FvX3LDIp0KZodCttjyU_Ys9Q,18977
94
+ dtlpy/entities/task.py,sha256=XHiEqZYFlrDCtmw1MXsysjoBLdIzAk7coMrVk8bNIiE,19534
95
95
  dtlpy/entities/time_series.py,sha256=336jWNckjuSn0G29WJFetB7nBoFAKqs4VH9_IB4m4FE,4017
96
- dtlpy/entities/trigger.py,sha256=3IFPl9hda3MhUiiLsp5nnv7g2y-j9657Xm23SSM98Eg,13984
96
+ dtlpy/entities/trigger.py,sha256=zh3wYUY2-zATh_7ous0Ck87Yojo9r9PAVQrkcESxoko,14266
97
97
  dtlpy/entities/user.py,sha256=hqEzwN6rl1oUTpKOV5eXvw9Z7dtpsiC4TAPSNBmkqcM,3865
98
98
  dtlpy/entities/webhook.py,sha256=6R06MgLxabvKySInGlSJmaf0AVmAMe3vKusWhqONRyU,3539
99
99
  dtlpy/entities/annotation_definitions/__init__.py,sha256=Y_L9JGbRoQQKkoPMCUnLotbytgYK6244WtR8sySmINQ,636
@@ -147,23 +147,23 @@ dtlpy/miscellaneous/json_utils.py,sha256=0P4YTlL6o_L7AUrvAeqkqA46MZZK_hDdTrdnmI5
147
147
  dtlpy/miscellaneous/list_print.py,sha256=leEg3RodgYfH5t_0JG8VuM8NiesR8sJLK_mRSttL5pY,4808
148
148
  dtlpy/miscellaneous/zipping.py,sha256=GMdPhAeHQXeMS5ClaiKWMJWVYQLBLAaJUWxvdYrL4Ro,5337
149
149
  dtlpy/ml/__init__.py,sha256=vPkyXpc9kcWWZ_PxyPEOsjKBJdEbowLkZr8FZIb_OBM,799
150
- dtlpy/ml/base_model_adapter.py,sha256=pZhk-J4bSkdxfaw8DQs9O-mV_DqzRE_SbULx4ctXtxE,38826
150
+ dtlpy/ml/base_model_adapter.py,sha256=5sD5qtMhm_eRLgnnQJT9A9q0L4MpLkzyZtLN_MS3QC0,38767
151
151
  dtlpy/ml/metrics.py,sha256=BG2E-1Mvjv2e2No9mIJKVmvzqBvLqytKcw3hA7wVUNc,20037
152
152
  dtlpy/ml/predictions_utils.py,sha256=He_84U14oS2Ss7T_-Zj5GDiBZwS-GjMPURUh7u7DjF8,12484
153
153
  dtlpy/ml/summary_writer.py,sha256=dehDi8zmGC1sAGyy_3cpSWGXoGQSiQd7bL_Thoo8yIs,2784
154
- dtlpy/ml/train_utils.py,sha256=avvT_TbwJ0Q23mwwHRf0cu6Wt4LU72plEb_lx5oxc1U,2444
154
+ dtlpy/ml/train_utils.py,sha256=R-BHKRfqDoLLhFyLzsRFyJ4E-8iedj9s9oZqy3IO2rg,2404
155
155
  dtlpy/repositories/__init__.py,sha256=RskGSdPzJwsukYEIgs_7MW_1tqVx6hTPQ2WUhQ5PA5w,1922
156
156
  dtlpy/repositories/analytics.py,sha256=dQPCYTPAIuyfVI_ppR49W7_GBj0033feIm9Gd7LW1V0,2966
157
157
  dtlpy/repositories/annotations.py,sha256=E7iHo8UwDAhdulqh0lGr3fGQ-TSwZXXGsEXZA-WJ_NA,35780
158
158
  dtlpy/repositories/apps.py,sha256=EBMP1ZHmQ1Xa18lNnty8NJkByc6Con3X32S8GyeHcw0,10482
159
- dtlpy/repositories/artifacts.py,sha256=TsZe2OY_sBhQKUzLBLuz37QrfNi1uMAOQGSlePWBlIU,19554
159
+ dtlpy/repositories/artifacts.py,sha256=Ke2ustTNw-1eQ0onLsWY7gL2aChjXPAX5p1uQ_EzMbo,19081
160
160
  dtlpy/repositories/assignments.py,sha256=M1vlixBdAjwStqCG1MQjHsj3dH15KT0Rb5UTDtyDpEQ,25464
161
161
  dtlpy/repositories/bots.py,sha256=q1SqH01JHloljKxknhHU09psV1vQx9lPhu3g8mBBeRg,8104
162
- dtlpy/repositories/codebases.py,sha256=5PgJsNWcMjYKnRZeZ3qHyWV6Tn1Ir91PNudvlBShLFg,25209
163
- dtlpy/repositories/commands.py,sha256=nfk-KFYArfekyFMsnJwj6IgT7VawVcJQs6GGO8q26_U,5233
162
+ dtlpy/repositories/codebases.py,sha256=fKxwXy8sNm5dSqhKPT0382uDg081oMnIh15QtI_Npe8,24528
163
+ dtlpy/repositories/commands.py,sha256=jJnHctZEloRH6Zxf1yFwpgWrv449EU_40QOexKwKlkw,5203
164
164
  dtlpy/repositories/compositions.py,sha256=H417BvlQAiWr5NH2eANFke6CfEO5o7DSvapYpf7v5Hk,2150
165
- dtlpy/repositories/datasets.py,sha256=M4v5iOClR97EiU4UAqg9c8tCwan0gq8o7VDnBzbCngE,43226
166
- dtlpy/repositories/downloader.py,sha256=kWjywckbDUUfrKZlGUX933ZJEnkrJnK6jpkdUB01EB4,41344
165
+ dtlpy/repositories/datasets.py,sha256=GjJLh5masXCdyuj8jTxvvLIvhxJuXtc0o4pn-Sfjr4A,45084
166
+ dtlpy/repositories/downloader.py,sha256=pNwL7Nid8xmOyYNiv4DB_WY4RoKlxQ-U9nG2V99Gyr8,41342
167
167
  dtlpy/repositories/dpks.py,sha256=4Cw-avBe1HmVP5I-YSeJOhbRBGcxYUZHD7e-S87DeQI,13793
168
168
  dtlpy/repositories/drivers.py,sha256=fF0UuHCyBzop8pHfryex23mf0kVFAkqzNdOmwBbaWxY,10204
169
169
  dtlpy/repositories/executions.py,sha256=LexiO2KaTNMpjkDKIxQ5NHRU3huTfvdDZPKAOqUCdSs,30314
@@ -172,27 +172,27 @@ dtlpy/repositories/features.py,sha256=PhsGA8MpWB4JiwKHivYawB61ex1NnbYDmShQee5LsX
172
172
  dtlpy/repositories/integrations.py,sha256=oT5N3CMmOtMTrhwJhC_j9GjG0OmHzTcoUDoWDPfszFs,11575
173
173
  dtlpy/repositories/items.py,sha256=DqJ3g9bc4OLMm9KqI-OebXbr-zcEiohO1wGZJ1uE2Lg,37874
174
174
  dtlpy/repositories/messages.py,sha256=zYcoz8Us6j8Tb5Z7luJuvtO9xSRTuOCS7pl-ztt97Ac,3082
175
- dtlpy/repositories/models.py,sha256=65-Mc5G29puPNBuEILHvxPTUev3rViPhJCO3kIz7MGY,33437
175
+ dtlpy/repositories/models.py,sha256=K3MUpSCypkTqfEfDR4ykKMuuTfkWrl2vwioPhZNr13c,32771
176
176
  dtlpy/repositories/nodes.py,sha256=xXJm_YA0vDUn0dVvaGeq6ORM0vI3YXvfjuylvGRtkxo,3061
177
177
  dtlpy/repositories/ontologies.py,sha256=unnMhD2isR9DVE5S8Fg6fSDf1ZZ5Xemxxufx4LEUT3w,19577
178
178
  dtlpy/repositories/organizations.py,sha256=6ijUDFbsogfRul1g_vUB5AZOb41MRmV5NhNU7WLHt3A,22825
179
- dtlpy/repositories/packages.py,sha256=uTDqst4x0g1OthBHhbX3ckucfZd83Rj10xF06Jf6TRQ,86567
179
+ dtlpy/repositories/packages.py,sha256=MTVhlcCq2vycUUvEZZdSqSmvf3FuCoQaxcysq0Qh6ok,86610
180
180
  dtlpy/repositories/pipeline_executions.py,sha256=j5t_PtAHm1s9AIqgBHmnrxC6Z1YqTrI53eYLWWlcMlU,14312
181
181
  dtlpy/repositories/pipelines.py,sha256=VDAOsGbgD1_AKdMrJl_qB3gxPs7f3pwUnPx0pT1iAWk,23977
182
182
  dtlpy/repositories/projects.py,sha256=tZyFLqVs-8ggTIi5echlX7XdGOJGW4LzKuXke7jkRnw,22140
183
183
  dtlpy/repositories/recipes.py,sha256=kPsN6htcEzdO4JLq3cidzSnZUdx8RDVW2fvNFXdPKWk,15756
184
184
  dtlpy/repositories/resource_executions.py,sha256=PyzsbdJxz6jf17Gx13GZmqdu6tZo3TTVv-DypnJ_sY0,5374
185
- dtlpy/repositories/services.py,sha256=ivjj6QSRJW9ACS1V8EkUUU056w-ZErMZkNRPwIDHxBc,65184
185
+ dtlpy/repositories/services.py,sha256=oOatkm_F3C1JMUYvNu8dNRgORvk0_VITck02e29jWEA,66217
186
186
  dtlpy/repositories/settings.py,sha256=pvqNse0ANCdU3NSLJEzHco-PZq__OIsPSPVJveB9E4I,12296
187
- dtlpy/repositories/tasks.py,sha256=bR3xl4I6z-l1GwvtSatixdJvkVZlXcnc0jlNmxTU3oc,48078
187
+ dtlpy/repositories/tasks.py,sha256=bbk0l0EZzFFEN_TjHBqDh6GNVum3yF902gdjO0iEFhk,48076
188
188
  dtlpy/repositories/times_series.py,sha256=m-bKFEgiZ13yQNelDjBfeXMUy_HgsPD_JAHj1GVx9fU,11420
189
189
  dtlpy/repositories/triggers.py,sha256=izdNyCN1gDc5uo7AXntso0HSMTDIzGFUp-dSEz8cn_U,21990
190
190
  dtlpy/repositories/upload_element.py,sha256=4CDZRKLubanOP0ZyGwxAHTtl6GLzwAyRAIm-PLYt0ck,10140
191
- dtlpy/repositories/uploader.py,sha256=e59be0jedGIX3D9y1ME_8CfgRhdc7WfBdGoiv8HINxo,30339
191
+ dtlpy/repositories/uploader.py,sha256=PzEq4yHsxJT1lv_wYGS-gh7Wmu37TA-14ww_r-6HBrc,30337
192
192
  dtlpy/repositories/webhooks.py,sha256=IIpxOJ-7KeQp1TY9aJZz-FuycSjAoYx0TDk8z86KAK8,9033
193
193
  dtlpy/services/__init__.py,sha256=VfVJy2otIrDra6i7Sepjyez2ujiE6171ChQZp-YgxsM,904
194
194
  dtlpy/services/aihttp_retry.py,sha256=tgntZsAY0dW9v08rkjX1T5BLNDdDd8svtgn7nH8DSGU,5022
195
- dtlpy/services/api_client.py,sha256=DwBd_Z03O5Sl5bZ8-_nN2929nkQ81oXiESuUvqgWoa8,65850
195
+ dtlpy/services/api_client.py,sha256=Ew3neG7P8giK3CwFXYWMJnbRAYbGFA2K_jIVavUqnB8,65848
196
196
  dtlpy/services/api_reference.py,sha256=cW-B3eoi9Xs3AwI87_Kr6GV_E6HPoC73aETFaGz3A-0,1515
197
197
  dtlpy/services/async_utils.py,sha256=lfpkTkRUvQoMTxaRZBHbPt5e43qdvpCGDe_-KcY2Jps,2810
198
198
  dtlpy/services/calls_counter.py,sha256=gr0io5rIsO5-7Cgc8neA1vK8kUtYhgFPmDQ2jXtiZZs,1036
@@ -220,14 +220,14 @@ dtlpy/utilities/reports/report.py,sha256=3nEsNnIWmdPEsd21nN8vMMgaZVcPKn9iawKTTeO
220
220
  dtlpy/utilities/videos/__init__.py,sha256=SV3w51vfPuGBxaMeNemx6qEMHw_C4lLpWNGXMvdsKSY,734
221
221
  dtlpy/utilities/videos/video_player.py,sha256=LCxg0EZ_DeuwcT7U_r7MRC6Q19s0xdFb7x5Gk39PRms,24072
222
222
  dtlpy/utilities/videos/videos.py,sha256=Dj916B4TQRIhI7HZVevl3foFrCsPp0eeWwvGbgX3-_A,21875
223
- dtlpy-1.86.13.data/scripts/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
224
- dtlpy-1.86.13.data/scripts/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
225
- dtlpy-1.86.13.data/scripts/dlp.py,sha256=tEokRaDINISXnq8yNx_CBw1qM5uwjYiZoJOYGqWB3RU,4267
223
+ dtlpy-1.87.18.data/scripts/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
224
+ dtlpy-1.87.18.data/scripts/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
225
+ dtlpy-1.87.18.data/scripts/dlp.py,sha256=tEokRaDINISXnq8yNx_CBw1qM5uwjYiZoJOYGqWB3RU,4267
226
226
  tests/features/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
227
227
  tests/features/environment.py,sha256=U3LVKfWcgRXWvG2mBy57uojhKpqbwFykPvae40Ac4ZY,13706
228
- dtlpy-1.86.13.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
229
- dtlpy-1.86.13.dist-info/METADATA,sha256=2JcfOOnpKjKNJHb_0EBNJEg8g6Nv9BzadfXtAhECTc8,3026
230
- dtlpy-1.86.13.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
231
- dtlpy-1.86.13.dist-info/entry_points.txt,sha256=C4PyKthCs_no88HU39eioO68oei64STYXC2ooGZTc4Y,43
232
- dtlpy-1.86.13.dist-info/top_level.txt,sha256=ZWuLmQGUOtWAdgTf4Fbx884w1o0vBYq9dEc1zLv9Mig,12
233
- dtlpy-1.86.13.dist-info/RECORD,,
228
+ dtlpy-1.87.18.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
229
+ dtlpy-1.87.18.dist-info/METADATA,sha256=ZGQRogBnEO5C7CsXRozVW4UchUthzfPw0P7LDZVpQNo,3026
230
+ dtlpy-1.87.18.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
231
+ dtlpy-1.87.18.dist-info/entry_points.txt,sha256=C4PyKthCs_no88HU39eioO68oei64STYXC2ooGZTc4Y,43
232
+ dtlpy-1.87.18.dist-info/top_level.txt,sha256=ZWuLmQGUOtWAdgTf4Fbx884w1o0vBYq9dEc1zLv9Mig,12
233
+ dtlpy-1.87.18.dist-info/RECORD,,
File without changes