dtlpy 1.116.6__py3-none-any.whl → 1.118.12__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/__init__.py +1 -1
- dtlpy/__version__.py +1 -1
- dtlpy/entities/__init__.py +1 -1
- dtlpy/entities/annotation.py +1 -1
- dtlpy/entities/app.py +1 -1
- dtlpy/entities/compute.py +1 -0
- dtlpy/entities/dataset.py +17 -2
- dtlpy/entities/feature_set.py +7 -0
- dtlpy/entities/item.py +16 -0
- dtlpy/entities/model.py +1 -1
- dtlpy/entities/ontology.py +1 -1
- dtlpy/entities/paged_entities.py +7 -3
- dtlpy/entities/service.py +11 -0
- dtlpy/ml/base_model_adapter.py +68 -37
- dtlpy/repositories/apps.py +12 -13
- dtlpy/repositories/datasets.py +165 -84
- dtlpy/repositories/downloader.py +299 -118
- dtlpy/repositories/feature_sets.py +159 -70
- dtlpy/repositories/recipes.py +15 -5
- dtlpy/services/api_client.py +5 -4
- {dtlpy-1.116.6.dist-info → dtlpy-1.118.12.dist-info}/METADATA +14 -15
- {dtlpy-1.116.6.dist-info → dtlpy-1.118.12.dist-info}/RECORD +29 -31
- {dtlpy-1.116.6.dist-info → dtlpy-1.118.12.dist-info}/WHEEL +1 -1
- {dtlpy-1.116.6.dist-info → dtlpy-1.118.12.dist-info}/top_level.txt +0 -1
- tests/features/__init__.py +0 -0
- tests/features/environment.py +0 -551
- {dtlpy-1.116.6.data → dtlpy-1.118.12.data}/scripts/dlp +0 -0
- {dtlpy-1.116.6.data → dtlpy-1.118.12.data}/scripts/dlp.bat +0 -0
- {dtlpy-1.116.6.data → dtlpy-1.118.12.data}/scripts/dlp.py +0 -0
- {dtlpy-1.116.6.dist-info → dtlpy-1.118.12.dist-info}/entry_points.txt +0 -0
- {dtlpy-1.116.6.dist-info → dtlpy-1.118.12.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
import copy
|
|
2
3
|
from .. import exceptions, entities, miscellaneous, _api_reference, repositories
|
|
3
4
|
from ..services.api_client import ApiClient
|
|
4
5
|
|
|
@@ -9,18 +10,25 @@ class FeatureSets:
|
|
|
9
10
|
"""
|
|
10
11
|
Feature Sets repository
|
|
11
12
|
"""
|
|
13
|
+
|
|
12
14
|
URL = '/features/sets'
|
|
13
15
|
|
|
14
|
-
def __init__(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
def __init__(
|
|
17
|
+
self,
|
|
18
|
+
client_api: ApiClient,
|
|
19
|
+
project_id: str = None,
|
|
20
|
+
project: entities.Project = None,
|
|
21
|
+
model_id: str = None,
|
|
22
|
+
model: entities.Model = None,
|
|
23
|
+
dataset_id: str = None,
|
|
24
|
+
dataset: entities.Dataset = None,
|
|
25
|
+
):
|
|
20
26
|
self._project = project
|
|
21
27
|
self._project_id = project_id
|
|
22
28
|
self._model = model
|
|
23
29
|
self._model_id = model_id
|
|
30
|
+
self._dataset = dataset
|
|
31
|
+
self._dataset_id = dataset_id
|
|
24
32
|
self._client_api = client_api
|
|
25
33
|
|
|
26
34
|
############
|
|
@@ -28,6 +36,9 @@ class FeatureSets:
|
|
|
28
36
|
############
|
|
29
37
|
@property
|
|
30
38
|
def project(self) -> entities.Project:
|
|
39
|
+
if self._project is None and self._project_id is None and self.dataset is not None:
|
|
40
|
+
self._project = self.dataset.project
|
|
41
|
+
self._project_id = self._project.id
|
|
31
42
|
if self._project is None and self._project_id is not None:
|
|
32
43
|
# get from id
|
|
33
44
|
self._project = repositories.Projects(client_api=self._client_api).get(project_id=self._project_id)
|
|
@@ -38,9 +49,8 @@ class FeatureSets:
|
|
|
38
49
|
self._project = entities.Project.from_json(_json=project, client_api=self._client_api)
|
|
39
50
|
if self._project is None:
|
|
40
51
|
raise exceptions.PlatformException(
|
|
41
|
-
error='2001',
|
|
42
|
-
|
|
43
|
-
' Please checkout or set a project')
|
|
52
|
+
error='2001', message='Cannot perform action WITHOUT Project entity in FeatureSets repository.' ' Please checkout or set a project'
|
|
53
|
+
)
|
|
44
54
|
assert isinstance(self._project, entities.Project)
|
|
45
55
|
return self._project
|
|
46
56
|
|
|
@@ -50,21 +60,27 @@ class FeatureSets:
|
|
|
50
60
|
# get from id
|
|
51
61
|
self._model = repositories.Models(client_api=self._client_api).get(model_id=self._model_id)
|
|
52
62
|
if self._model is None:
|
|
53
|
-
raise exceptions.PlatformException(
|
|
54
|
-
error='2001',
|
|
55
|
-
message='Cannot perform action WITHOUT Model entity in FeatureSets repository.')
|
|
63
|
+
raise exceptions.PlatformException(error='2001', message='Cannot perform action WITHOUT Model entity in FeatureSets repository.')
|
|
56
64
|
assert isinstance(self._model, entities.Model)
|
|
57
65
|
return self._model
|
|
58
66
|
|
|
67
|
+
@property
|
|
68
|
+
def dataset(self) -> entities.Dataset:
|
|
69
|
+
if self._dataset is None and self._dataset_id is not None:
|
|
70
|
+
# get from id
|
|
71
|
+
self._dataset = repositories.Datasets(client_api=self._client_api).get(dataset_id=self._dataset_id)
|
|
72
|
+
if self._dataset is None:
|
|
73
|
+
return None
|
|
74
|
+
assert isinstance(self._dataset, entities.Dataset)
|
|
75
|
+
return self._dataset
|
|
76
|
+
|
|
59
77
|
###########
|
|
60
78
|
# methods #
|
|
61
79
|
###########
|
|
62
80
|
|
|
63
81
|
def _list(self, filters: entities.Filters):
|
|
64
82
|
# request
|
|
65
|
-
success, response = self._client_api.gen_request(req_type='POST',
|
|
66
|
-
path='/features/sets/query',
|
|
67
|
-
json_req=filters.prepare())
|
|
83
|
+
success, response = self._client_api.gen_request(req_type='POST', path='/features/sets/query', json_req=filters.prepare())
|
|
68
84
|
if not success:
|
|
69
85
|
raise exceptions.PlatformException(response)
|
|
70
86
|
return response.json()
|
|
@@ -78,29 +94,101 @@ class FeatureSets:
|
|
|
78
94
|
:return: Paged entity
|
|
79
95
|
:rtype: dtlpy.entities.paged_entities.PagedEntities
|
|
80
96
|
"""
|
|
81
|
-
#
|
|
97
|
+
# Step 1: Initialize filter (create empty if None)
|
|
82
98
|
if filters is None:
|
|
83
99
|
filters = entities.Filters(resource=entities.FiltersResource.FEATURE_SET)
|
|
84
|
-
if self._project is not None:
|
|
85
|
-
filters.context = {'projects': [self._project.id]}
|
|
86
|
-
|
|
87
|
-
# assert type filters
|
|
88
|
-
if not isinstance(filters, entities.Filters):
|
|
89
|
-
raise exceptions.PlatformException(error='400',
|
|
90
|
-
message='Unknown filters type: {!r}'.format(type(filters)))
|
|
91
100
|
|
|
92
101
|
if filters.resource != entities.FiltersResource.FEATURE_SET:
|
|
93
102
|
raise exceptions.PlatformException(
|
|
94
103
|
error='400',
|
|
95
|
-
message='Filters resource must to be FiltersResource.FEATURE_SET. Got: {!r}'.format(filters.resource)
|
|
104
|
+
message='Filters resource must to be FiltersResource.FEATURE_SET. Got: {!r}'.format(filters.resource),
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
# Step 2: Extract IDs inline (no helper functions, no property access)
|
|
108
|
+
# Extract project_id inline
|
|
109
|
+
if self._project_id is not None:
|
|
110
|
+
project_id = self._project_id
|
|
111
|
+
elif self._project is not None:
|
|
112
|
+
project_id = self._project.id
|
|
113
|
+
else:
|
|
114
|
+
raise exceptions.PlatformException(
|
|
115
|
+
error='2001', message='Cannot perform action WITHOUT Project entity in FeatureSets repository.' ' Please checkout or set a project'
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Extract dataset_id inline (only when needed for filtering)
|
|
119
|
+
if self._dataset_id is not None:
|
|
120
|
+
dataset_id = self._dataset_id
|
|
121
|
+
elif self._dataset is not None:
|
|
122
|
+
dataset_id = self._dataset.id
|
|
123
|
+
else:
|
|
124
|
+
dataset_id = None # No dataset filtering needed
|
|
125
|
+
|
|
126
|
+
# Set context with project_id
|
|
127
|
+
filters.context = {'projects': [project_id]}
|
|
128
|
+
|
|
129
|
+
# Preserve original page and page size values before any operations that might modify them
|
|
130
|
+
received_filter = copy.deepcopy(filters)
|
|
131
|
+
|
|
132
|
+
# Step 3: Execute received filter - Run filter with appropriate pagination
|
|
133
|
+
# When dataset_id is None: use original pagination (respect user's page request)
|
|
134
|
+
# When dataset_id is not None: start from page 0 to collect all IDs (pagination applied later)
|
|
135
|
+
if dataset_id is not None:
|
|
136
|
+
page_offset = 0
|
|
137
|
+
received_filter_paged = entities.PagedEntities(
|
|
138
|
+
items_repository=self,
|
|
139
|
+
filters=filters,
|
|
140
|
+
page_offset=page_offset,
|
|
141
|
+
page_size=filters.page_size,
|
|
142
|
+
client_api=self._client_api,
|
|
143
|
+
)
|
|
144
|
+
# Step 5: Dataset_id exists and items exist - extract IDs from all pages
|
|
145
|
+
# Extract feature set IDs from all pages (received_filter_paged.all() will fetch all pages starting from page 0)
|
|
146
|
+
filter_fs_ids = [feature_set.id for feature_set in received_filter_paged.all()]
|
|
147
|
+
|
|
148
|
+
# Step 6: Run aggregation API (when dataset_id exists)
|
|
149
|
+
payload = {
|
|
150
|
+
"projectId": project_id,
|
|
151
|
+
"datasetIds": [dataset_id],
|
|
152
|
+
}
|
|
153
|
+
success, response = self._client_api.gen_request(req_type="POST", path="/features/vectors/project-count-aggregation", json_req=payload)
|
|
154
|
+
if not success:
|
|
155
|
+
raise exceptions.PlatformException(response)
|
|
156
|
+
result = response.json()
|
|
157
|
+
# Extract dataset feature set IDs from response, filtering out entries where count == 0
|
|
158
|
+
dataset_fs_ids = [item['featureSetId'] for item in result if item.get('count', 0) > 0]
|
|
159
|
+
|
|
160
|
+
# Step 7: Intersect IDs
|
|
161
|
+
final_fs_ids = list(set(filter_fs_ids).intersection(set(dataset_fs_ids)))
|
|
162
|
+
|
|
163
|
+
# Step 8: Final return path - Create filter with intersected IDs (no join needed)
|
|
164
|
+
intersected_ids_filter = entities.Filters(resource=entities.FiltersResource.FEATURE_SET)
|
|
165
|
+
intersected_ids_filter.add(field='id', operator=entities.FiltersOperations.IN, values=final_fs_ids)
|
|
166
|
+
intersected_ids_filter.page = received_filter.page # Preserve original pagination
|
|
167
|
+
intersected_ids_filter.page_size = received_filter.page_size
|
|
168
|
+
intersected_ids_filter.context = {'projects': [project_id]}
|
|
96
169
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
170
|
+
filter_paged = entities.PagedEntities(
|
|
171
|
+
items_repository=self,
|
|
172
|
+
filters=intersected_ids_filter,
|
|
173
|
+
page_offset=intersected_ids_filter.page,
|
|
174
|
+
page_size=intersected_ids_filter.page_size,
|
|
175
|
+
client_api=self._client_api,
|
|
176
|
+
)
|
|
177
|
+
filter_paged.get_page()
|
|
178
|
+
|
|
179
|
+
else:
|
|
180
|
+
page_offset = filters.page if dataset_id is None else 0
|
|
181
|
+
|
|
182
|
+
filter_paged = entities.PagedEntities(
|
|
183
|
+
items_repository=self,
|
|
184
|
+
filters=filters,
|
|
185
|
+
page_offset=page_offset,
|
|
186
|
+
page_size=filters.page_size,
|
|
187
|
+
client_api=self._client_api,
|
|
188
|
+
)
|
|
189
|
+
filter_paged.get_page()
|
|
190
|
+
|
|
191
|
+
return filter_paged
|
|
104
192
|
|
|
105
193
|
@_api_reference.add(path='/features/sets/{id}', method='get')
|
|
106
194
|
def get(self, feature_set_name: str = None, feature_set_id: str = None) -> entities.Feature:
|
|
@@ -112,45 +200,31 @@ class FeatureSets:
|
|
|
112
200
|
:return: Feature object
|
|
113
201
|
"""
|
|
114
202
|
if feature_set_id is not None:
|
|
115
|
-
success, response = self._client_api.gen_request(req_type="GET",
|
|
116
|
-
path="{}/{}".format(self.URL, feature_set_id))
|
|
203
|
+
success, response = self._client_api.gen_request(req_type="GET", path="{}/{}".format(self.URL, feature_set_id))
|
|
117
204
|
if not success:
|
|
118
205
|
raise exceptions.PlatformException(response)
|
|
119
|
-
feature_set = entities.FeatureSet.from_json(client_api=self._client_api,
|
|
120
|
-
_json=response.json())
|
|
206
|
+
feature_set = entities.FeatureSet.from_json(client_api=self._client_api, _json=response.json())
|
|
121
207
|
elif feature_set_name is not None:
|
|
122
208
|
if not isinstance(feature_set_name, str):
|
|
123
|
-
raise exceptions.PlatformException(
|
|
124
|
-
error='400',
|
|
125
|
-
message='feature_set_name must be string')
|
|
209
|
+
raise exceptions.PlatformException(error='400', message='feature_set_name must be string')
|
|
126
210
|
filters = entities.Filters(resource=entities.FiltersResource.FEATURE_SET)
|
|
127
211
|
filters.add(field='name', values=feature_set_name)
|
|
128
212
|
feature_sets = self.list(filters=filters)
|
|
129
213
|
if feature_sets.items_count == 0:
|
|
130
|
-
raise exceptions.PlatformException(
|
|
131
|
-
error='404',
|
|
132
|
-
message='Feature set not found. name: {!r}'.format(feature_set_name))
|
|
214
|
+
raise exceptions.PlatformException(error='404', message='Feature set not found. name: {!r}'.format(feature_set_name))
|
|
133
215
|
elif feature_sets.items_count > 1:
|
|
134
216
|
# more than one matching project
|
|
135
|
-
raise exceptions.PlatformException(
|
|
136
|
-
error='404',
|
|
137
|
-
message='More than one feature_set with same name. Please "get" by id')
|
|
217
|
+
raise exceptions.PlatformException(error='404', message='More than one feature_set with same name. Please "get" by id')
|
|
138
218
|
else:
|
|
139
219
|
feature_set = feature_sets.items[0]
|
|
140
220
|
else:
|
|
141
|
-
raise exceptions.PlatformException(
|
|
142
|
-
error='400',
|
|
143
|
-
message='Must provide an identifier in inputs, feature_set_name or feature_set_id')
|
|
221
|
+
raise exceptions.PlatformException(error='400', message='Must provide an identifier in inputs, feature_set_name or feature_set_id')
|
|
144
222
|
return feature_set
|
|
145
223
|
|
|
146
224
|
@_api_reference.add(path='/features/sets', method='post')
|
|
147
|
-
def create(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
entity_type: entities.FeatureEntityType,
|
|
151
|
-
project_id: str = None,
|
|
152
|
-
model_id: set = None,
|
|
153
|
-
org_id: str = None):
|
|
225
|
+
def create(
|
|
226
|
+
self, name: str, size: int, set_type: str, entity_type: entities.FeatureEntityType, project_id: str = None, model_id: set = None, org_id: str = None
|
|
227
|
+
):
|
|
154
228
|
"""
|
|
155
229
|
Create a new Feature Set
|
|
156
230
|
|
|
@@ -169,25 +243,17 @@ class FeatureSets:
|
|
|
169
243
|
else:
|
|
170
244
|
project_id = self._project.id
|
|
171
245
|
|
|
172
|
-
payload = {'name': name,
|
|
173
|
-
'size': size,
|
|
174
|
-
'type': set_type,
|
|
175
|
-
'project': project_id,
|
|
176
|
-
'modelId': model_id,
|
|
177
|
-
'entityType': entity_type}
|
|
246
|
+
payload = {'name': name, 'size': size, 'type': set_type, 'project': project_id, 'modelId': model_id, 'entityType': entity_type}
|
|
178
247
|
if org_id is not None:
|
|
179
248
|
payload['org'] = org_id
|
|
180
|
-
success, response = self._client_api.gen_request(req_type="post",
|
|
181
|
-
json_req=payload,
|
|
182
|
-
path=self.URL)
|
|
249
|
+
success, response = self._client_api.gen_request(req_type="post", json_req=payload, path=self.URL)
|
|
183
250
|
|
|
184
251
|
# exception handling
|
|
185
252
|
if not success:
|
|
186
253
|
raise exceptions.PlatformException(response)
|
|
187
254
|
|
|
188
255
|
# return entity
|
|
189
|
-
return entities.FeatureSet.from_json(client_api=self._client_api,
|
|
190
|
-
_json=response.json()[0])
|
|
256
|
+
return entities.FeatureSet.from_json(client_api=self._client_api, _json=response.json()[0])
|
|
191
257
|
|
|
192
258
|
@_api_reference.add(path='/features/sets/{id}', method='delete')
|
|
193
259
|
def delete(self, feature_set_id: str):
|
|
@@ -199,8 +265,7 @@ class FeatureSets:
|
|
|
199
265
|
:rtype: bool
|
|
200
266
|
"""
|
|
201
267
|
|
|
202
|
-
success, response = self._client_api.gen_request(req_type="delete",
|
|
203
|
-
path="{}/{}".format(self.URL, feature_set_id))
|
|
268
|
+
success, response = self._client_api.gen_request(req_type="delete", path=f"{self.URL}/{feature_set_id}")
|
|
204
269
|
|
|
205
270
|
# check response
|
|
206
271
|
if success:
|
|
@@ -209,14 +274,38 @@ class FeatureSets:
|
|
|
209
274
|
else:
|
|
210
275
|
raise exceptions.PlatformException(response)
|
|
211
276
|
|
|
277
|
+
@_api_reference.add(path='/features/set/{id}', method='patch')
|
|
278
|
+
def update(self, feature_set: entities.FeatureSet) -> entities.FeatureSet:
|
|
279
|
+
"""
|
|
280
|
+
Update a Feature Set
|
|
281
|
+
|
|
282
|
+
**Prerequisites**: You must be in the role of an *owner* or *developer*.
|
|
283
|
+
|
|
284
|
+
:param dtlpy.entities.FeatureSet feature_set: FeatureSet object
|
|
285
|
+
:return: FeatureSet
|
|
286
|
+
:rtype: dtlpy.entities.FeatureSet
|
|
287
|
+
|
|
288
|
+
**Example**:
|
|
289
|
+
|
|
290
|
+
.. code-block:: python
|
|
291
|
+
|
|
292
|
+
dl.feature_sets.update(feature_set='feature_set')
|
|
293
|
+
"""
|
|
294
|
+
success, response = self._client_api.gen_request(req_type="patch", path=f"{self.URL}/{feature_set.id}", json_req=feature_set.to_json())
|
|
295
|
+
if not success:
|
|
296
|
+
raise exceptions.PlatformException(response)
|
|
297
|
+
|
|
298
|
+
logger.debug("feature_set updated successfully")
|
|
299
|
+
# update dataset labels
|
|
300
|
+
feature_set = entities.FeatureSet.from_json(_json=response.json(), client_api=self._client_api, is_fetched=True)
|
|
301
|
+
return feature_set
|
|
302
|
+
|
|
212
303
|
def _build_entities_from_response(self, response_items) -> miscellaneous.List[entities.Item]:
|
|
213
304
|
pool = self._client_api.thread_pools(pool_name='entity.create')
|
|
214
305
|
jobs = [None for _ in range(len(response_items))]
|
|
215
306
|
# return triggers list
|
|
216
307
|
for i_item, item in enumerate(response_items):
|
|
217
|
-
jobs[i_item] = pool.submit(entities.FeatureSet._protected_from_json,
|
|
218
|
-
**{'client_api': self._client_api,
|
|
219
|
-
'_json': item})
|
|
308
|
+
jobs[i_item] = pool.submit(entities.FeatureSet._protected_from_json, **{'client_api': self._client_api, '_json': item})
|
|
220
309
|
# get all results
|
|
221
310
|
results = [j.result() for j in jobs]
|
|
222
311
|
# log errors
|
dtlpy/repositories/recipes.py
CHANGED
|
@@ -42,10 +42,6 @@ class Recipes:
|
|
|
42
42
|
@property
|
|
43
43
|
def project(self) -> entities.Project:
|
|
44
44
|
if self._project is None:
|
|
45
|
-
project = self._client_api.state_io.get('project')
|
|
46
|
-
if project is not None:
|
|
47
|
-
self._project = entities.Project.from_json(_json=project, client_api=self._client_api)
|
|
48
|
-
self._project_id = self._project.id
|
|
49
45
|
if self._project_id is None:
|
|
50
46
|
if self._dataset is None:
|
|
51
47
|
raise exceptions.PlatformException(
|
|
@@ -122,7 +118,21 @@ class Recipes:
|
|
|
122
118
|
if attributes is None:
|
|
123
119
|
attributes = list()
|
|
124
120
|
if project_ids is None:
|
|
125
|
-
|
|
121
|
+
if self._dataset is not None:
|
|
122
|
+
project_ids = [self._dataset.project.id]
|
|
123
|
+
else:
|
|
124
|
+
# get from cache
|
|
125
|
+
project = self._client_api.state_io.get('project')
|
|
126
|
+
if project is not None:
|
|
127
|
+
# build entity from json
|
|
128
|
+
p = entities.Project.from_json(_json=project, client_api=self._client_api)
|
|
129
|
+
project_ids = [p.id]
|
|
130
|
+
else:
|
|
131
|
+
# get from self.project property
|
|
132
|
+
try:
|
|
133
|
+
project_ids = [self.project.id]
|
|
134
|
+
except exceptions.PlatformException:
|
|
135
|
+
raise exceptions.PlatformException('Must provide project_ids')
|
|
126
136
|
if ontology_ids is None:
|
|
127
137
|
ontolgies = repositories.Ontologies(client_api=self._client_api,
|
|
128
138
|
recipe=None)
|
dtlpy/services/api_client.py
CHANGED
|
@@ -830,10 +830,11 @@ class ApiClient:
|
|
|
830
830
|
environments = self.environments
|
|
831
831
|
if environment in environments:
|
|
832
832
|
logger.warning('Environment exists. Overwriting. env: {}'.format(environment))
|
|
833
|
-
if
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
833
|
+
if alias is not None:
|
|
834
|
+
keys_to_remove = [e for e, v in environments.items() if v.get('alias') == alias]
|
|
835
|
+
for e in keys_to_remove:
|
|
836
|
+
logger.warning('Alias exists. Overwriting. alias: {}'.format(alias))
|
|
837
|
+
environments.pop(e)
|
|
837
838
|
environments[environment] = {'audience': audience,
|
|
838
839
|
'client_id': client_id,
|
|
839
840
|
'auth0_url': auth0_url,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dtlpy
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.118.12
|
|
4
4
|
Summary: SDK and CLI for Dataloop platform
|
|
5
5
|
Home-page: https://github.com/dataloop-ai/dtlpy
|
|
6
6
|
Author: Dataloop Team
|
|
@@ -9,12 +9,12 @@ License: Apache License 2.0
|
|
|
9
9
|
Classifier: Programming Language :: Python
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
11
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
15
12
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
-
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
+
Requires-Python: >=3.8
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: urllib3>=1.26
|
|
@@ -30,7 +30,7 @@ Requires-Dist: tabulate>=0.8.9
|
|
|
30
30
|
Requires-Dist: Pillow>=7.2
|
|
31
31
|
Requires-Dist: PyJWT>=2.4
|
|
32
32
|
Requires-Dist: jinja2>=2.11.3
|
|
33
|
-
Requires-Dist: attrs
|
|
33
|
+
Requires-Dist: attrs<25.0,>=22.2.0
|
|
34
34
|
Requires-Dist: prompt_toolkit>=2.0.9
|
|
35
35
|
Requires-Dist: fuzzyfinder<=2.1.0
|
|
36
36
|
Requires-Dist: dictdiffer>=0.8.1
|
|
@@ -41,8 +41,7 @@ Requires-Dist: diskcache>=5.4
|
|
|
41
41
|
Requires-Dist: redis>=3.5
|
|
42
42
|
Requires-Dist: inquirer
|
|
43
43
|
Requires-Dist: dtlpymetrics
|
|
44
|
-
Requires-Dist:
|
|
45
|
-
Requires-Dist: bson
|
|
44
|
+
Requires-Dist: pymongo<5.0,>=4.9
|
|
46
45
|
Dynamic: author
|
|
47
46
|
Dynamic: author-email
|
|
48
47
|
Dynamic: classifier
|
|
@@ -144,13 +143,13 @@ dlp datasets ls --project-name your-project-name
|
|
|
144
143
|
|
|
145
144
|
DTLPY supports multiple Python versions as follows:
|
|
146
145
|
|
|
147
|
-
| Python Version
|
|
148
|
-
|
|
149
|
-
| **dtlpy >= 1.
|
|
150
|
-
| **dtlpy 1.
|
|
151
|
-
| **dtlpy
|
|
152
|
-
| **dtlpy 1.
|
|
153
|
-
| **dtlpy
|
|
146
|
+
| Python Version | 3.14 | 3.13 | 3.12 | 3.11 | 3.10 | 3.9 | 3.8 | 3.7 |
|
|
147
|
+
|---------------------|------|------|------|------|------|-----|-----|-----|
|
|
148
|
+
| **dtlpy >= 1.118** | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
|
149
|
+
| **dtlpy 1.99–1.117**| ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
150
|
+
| **dtlpy 1.76–1.98** | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
151
|
+
| **dtlpy >= 1.61** | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
|
|
152
|
+
| **dtlpy 1.50–1.60** | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
|
|
154
153
|
|
|
155
154
|
---
|
|
156
155
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
dtlpy/__init__.py,sha256=
|
|
2
|
-
dtlpy/__version__.py,sha256=
|
|
1
|
+
dtlpy/__init__.py,sha256=p9qDLEQ01cTj0Xx8FkxJPHSmP7LMHMv8b5-ZWW1FPrU,20625
|
|
2
|
+
dtlpy/__version__.py,sha256=zzDq0O015CukNUyAYZIC27rY6zu8_tSZPOwxCHkmfnw,21
|
|
3
3
|
dtlpy/exceptions.py,sha256=EQCKs3pwhwZhgMByQN3D3LpWpdxwcKPEEt-bIaDwURM,2871
|
|
4
4
|
dtlpy/new_instance.py,sha256=XegQav2hzPrPAUzuRFvUIGSPidoK-rbb02Q43NPsIpo,9982
|
|
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=Zv9yoXwNAx4gkED-JiayN-ZkX2dPn4FB0SDx9qc7muo,4404
|
|
45
45
|
dtlpy/dlp/parser.py,sha256=p-TFaiAU2c3QkI97TXzL2LDR3Eq0hGDFrTc9J2jWLh4,30551
|
|
46
|
-
dtlpy/entities/__init__.py,sha256=
|
|
46
|
+
dtlpy/entities/__init__.py,sha256=tHndgUHZOaiXJdOY-NTvGoHcJ29EkGzz389sWQPWyaI,5050
|
|
47
47
|
dtlpy/entities/analytic.py,sha256=6bMG4FD7VIDr3ca8hJ25yd9IyAuzPdaN1lsV4VD7z2Q,13739
|
|
48
|
-
dtlpy/entities/annotation.py,sha256=
|
|
48
|
+
dtlpy/entities/annotation.py,sha256=OPnkYtSC6C87tc8gWPgaPXSJmhsdZsDmg4SEM1hTJpY,66666
|
|
49
49
|
dtlpy/entities/annotation_collection.py,sha256=CEYSBHhhDkC0VJdHsBSrA6TgdKGMcKeI3tFM40UJwS8,29838
|
|
50
|
-
dtlpy/entities/app.py,sha256=
|
|
50
|
+
dtlpy/entities/app.py,sha256=zGqJYSpq7r6D4jauSCk5vt2lqlaolFSoDvSISLa0oyA,6997
|
|
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,31 +56,31 @@ dtlpy/entities/bot.py,sha256=is3NUCnPg56HSjsHIvFcVkymValMqDV0uHRDC1Ib-ds,3819
|
|
|
56
56
|
dtlpy/entities/codebase.py,sha256=7ZxEGhG_52mdZWfjg9ge6vkgLf3NDh1INZMkCHns-6Y,8864
|
|
57
57
|
dtlpy/entities/collection.py,sha256=FPPPfIxOsBG1ujORPJVq8uXyF8vhIqC6N4EiI9SJzl0,1160
|
|
58
58
|
dtlpy/entities/command.py,sha256=5RMQYjOGLRF8JZd7QFAPyE8utsp4eZzLApI2dEAbaqo,5301
|
|
59
|
-
dtlpy/entities/compute.py,sha256=
|
|
60
|
-
dtlpy/entities/dataset.py,sha256=
|
|
59
|
+
dtlpy/entities/compute.py,sha256=egdoRQCaJ2e5E3bA72n0nUmUfIjWBhD9sWr8nTWI3G8,15031
|
|
60
|
+
dtlpy/entities/dataset.py,sha256=p0AmaYsX8IlUr8lkJphXG-ke6EcONa8ediwZo2o6PgQ,55425
|
|
61
61
|
dtlpy/entities/directory_tree.py,sha256=Rni6pLSWytR6yeUPgEdCCRfTg_cqLOdUc9uCqz9KT-Q,1186
|
|
62
62
|
dtlpy/entities/dpk.py,sha256=XrK8X8p4Ag6LMjDrDpMstY-h_yTll_sMmKTZT6bLbWE,17923
|
|
63
63
|
dtlpy/entities/driver.py,sha256=usyWqlM8KxQ-L9uCTSAmPXCu2dU4fordAN8uL0I2wRM,7720
|
|
64
64
|
dtlpy/entities/execution.py,sha256=uQe535w9OcAoDiNWf96KcpFzUDEUU-DYsUalv5VziyM,13673
|
|
65
65
|
dtlpy/entities/feature.py,sha256=9fFjD0W57anOVSAVU55ypxN_WTCsWTG03Wkc3cAAj78,3732
|
|
66
|
-
dtlpy/entities/feature_set.py,sha256=
|
|
66
|
+
dtlpy/entities/feature_set.py,sha256=fCBEJVyo91SWz9bw8HczduRfgPJkBsAgeT6PPrYfy5k,4600
|
|
67
67
|
dtlpy/entities/filters.py,sha256=6CK66kkh5LbLjnzKoGe9jsLP8KBfdBRvNumkj-4EtfM,29399
|
|
68
68
|
dtlpy/entities/gis_item.py,sha256=Uk-wMBxwcHsImjz4qOjP-EyZAohbRzN43kMpCaVjCXU,3982
|
|
69
69
|
dtlpy/entities/integration.py,sha256=XraOApW9jbT6EdZraRX2In6sMbfNgEGf2V5Um2RCRqA,6001
|
|
70
|
-
dtlpy/entities/item.py,sha256=
|
|
70
|
+
dtlpy/entities/item.py,sha256=JoF3vTlsBUXwsC7b5KCkvDOeGP7Iby--Ww4PJQ5_UF4,35586
|
|
71
71
|
dtlpy/entities/label.py,sha256=ycDYavIgKhz806plIX-64c07_TeHpDa-V7LnfFVe4Rg,3869
|
|
72
72
|
dtlpy/entities/links.py,sha256=FAmEwHtsrqKet3c0UHH9u_gHgG6_OwF1-rl4xK7guME,2516
|
|
73
73
|
dtlpy/entities/message.py,sha256=ApJuaKEqxATpXjNYUjGdYPu3ibQzEMo8-LtJ_4xAcPI,5865
|
|
74
|
-
dtlpy/entities/model.py,sha256=
|
|
74
|
+
dtlpy/entities/model.py,sha256=YvkLjH4Gdk9vUcuWJ3KLJe6v9fY82692kzjqCuAAU4Y,27815
|
|
75
75
|
dtlpy/entities/node.py,sha256=RiCqG659Pb1PZNMewR-F7eNbU5tt713fiZY9xW6-Pes,39199
|
|
76
|
-
dtlpy/entities/ontology.py,sha256=
|
|
76
|
+
dtlpy/entities/ontology.py,sha256=qA8XOhHPiZ7fUK2QPBola2xA8SGEdzsgCy5oozgARwc,32534
|
|
77
77
|
dtlpy/entities/organization.py,sha256=Zm-tTHV82PvYyTNetRRXqvmvzBCbXEwS-gAENf7Zny4,9874
|
|
78
78
|
dtlpy/entities/package.py,sha256=QSDePHlp4ik19aUE3dAUC7edh0oUUVjzSmMG867avc4,26363
|
|
79
79
|
dtlpy/entities/package_defaults.py,sha256=wTD7Z7rGYjVy8AcUxTFEnkOkviiJaLVZYvduiUBKNZo,211
|
|
80
80
|
dtlpy/entities/package_function.py,sha256=M42Kvw9A8b6msAkv-wRNAQg_-UC2bejniCjeKDugudc,6314
|
|
81
81
|
dtlpy/entities/package_module.py,sha256=cOkIITATkzzCQpE0sdPiBUisAz8ImlPG2YGZ0K7SypA,5151
|
|
82
82
|
dtlpy/entities/package_slot.py,sha256=XBwCodQe618sQm0bmx46Npo94mEk-zUV7ZX0mDRcsD8,3946
|
|
83
|
-
dtlpy/entities/paged_entities.py,sha256=
|
|
83
|
+
dtlpy/entities/paged_entities.py,sha256=S7QyjUPkQhXIxS0saFU8oOfiybP5BpbNRy772GWkbGs,11175
|
|
84
84
|
dtlpy/entities/pipeline.py,sha256=nDSAQlYPw7LtpdwkbjeSiORLURmuc2jHlaQ8sAdKLgY,21766
|
|
85
85
|
dtlpy/entities/pipeline_execution.py,sha256=EQhW4W_G1bIPShYbJSAT--1WNQuvxVQbcQ_MCHIX0KI,9938
|
|
86
86
|
dtlpy/entities/project.py,sha256=ZUx8zA3mr6N145M62R3UDPCCzO1vxfyWO6vjES-bO-g,14653
|
|
@@ -88,7 +88,7 @@ dtlpy/entities/prompt_item.py,sha256=S_cgekiUsAK0OLP_XXbfvpNv7Zr5XT86jCB2w1yyyjQ
|
|
|
88
88
|
dtlpy/entities/recipe.py,sha256=SX0T7gw-_9Cs2FZyC_htIxQd7CwDwb2zA3SqB37vymM,11917
|
|
89
89
|
dtlpy/entities/reflect_dict.py,sha256=2NaSAL-CO0T0FYRYFQlaSpbsoLT2Q18AqdHgQSLX5Y4,3273
|
|
90
90
|
dtlpy/entities/resource_execution.py,sha256=1HuVV__U4jAUOtOkWlWImnM3Yts8qxMSAkMA9sBhArY,5033
|
|
91
|
-
dtlpy/entities/service.py,sha256=
|
|
91
|
+
dtlpy/entities/service.py,sha256=3E4pqn7Zg5pDaaagpyHfHuKK1uSDZ8-UbPrIzJfXuu4,33932
|
|
92
92
|
dtlpy/entities/service_driver.py,sha256=N3fL_xTPLu75UBFQZO5Plxx2kpED-UIILxTYbD58rzQ,3917
|
|
93
93
|
dtlpy/entities/setting.py,sha256=uXagJHtcCR3nJYClR_AUGZjz_kx3TejPcUZ8ginHFIA,8561
|
|
94
94
|
dtlpy/entities/task.py,sha256=ajVIkB-3Aqm9Udn87ITvIsGwduyCTtGeqV-FjSYtZKg,19605
|
|
@@ -149,7 +149,7 @@ dtlpy/miscellaneous/list_print.py,sha256=fBGTMXFUwDG8DD4W6HyR8BTGtbTckLf4W09quNR
|
|
|
149
149
|
dtlpy/miscellaneous/zipping.py,sha256=JplTc8UDFvO8WaD5vKuumVLN0lU_-GtHoE0doWKtmKg,5383
|
|
150
150
|
dtlpy/ml/__init__.py,sha256=vPkyXpc9kcWWZ_PxyPEOsjKBJdEbowLkZr8FZIb_OBM,799
|
|
151
151
|
dtlpy/ml/base_feature_extractor_adapter.py,sha256=iiEGYAx0Rdn4K46H_FlKrAv3ebTXHSxNVAmio0BxhaI,1178
|
|
152
|
-
dtlpy/ml/base_model_adapter.py,sha256=
|
|
152
|
+
dtlpy/ml/base_model_adapter.py,sha256=qXikBauw3jBsy3iO4CRLXku8RFTSQj8jLhgKYSWy7Jg,64136
|
|
153
153
|
dtlpy/ml/metrics.py,sha256=BG2E-1Mvjv2e2No9mIJKVmvzqBvLqytKcw3hA7wVUNc,20037
|
|
154
154
|
dtlpy/ml/predictions_utils.py,sha256=He_84U14oS2Ss7T_-Zj5GDiBZwS-GjMPURUh7u7DjF8,12484
|
|
155
155
|
dtlpy/ml/summary_writer.py,sha256=dehDi8zmGC1sAGyy_3cpSWGXoGQSiQd7bL_Thoo8yIs,2784
|
|
@@ -157,7 +157,7 @@ dtlpy/ml/train_utils.py,sha256=t607DfyGBRrUQZ9jPmPe4V9Udzfk0hPWuw4OvKZKAeo,2440
|
|
|
157
157
|
dtlpy/repositories/__init__.py,sha256=D2YI3ZLlSx0OlgVr8y_E9rsj-IxCDOj0MB6QTlv2NSA,2061
|
|
158
158
|
dtlpy/repositories/analytics.py,sha256=dQPCYTPAIuyfVI_ppR49W7_GBj0033feIm9Gd7LW1V0,2966
|
|
159
159
|
dtlpy/repositories/annotations.py,sha256=idTKzanNt-ncB0eIKE5p6WclrVGNjceI2Y7dAzDFtzY,43595
|
|
160
|
-
dtlpy/repositories/apps.py,sha256=
|
|
160
|
+
dtlpy/repositories/apps.py,sha256=miCYJNqte8TVFkBezE8yzueMsz593jNO9sSUfZRVV7M,15969
|
|
161
161
|
dtlpy/repositories/artifacts.py,sha256=Ke2ustTNw-1eQ0onLsWY7gL2aChjXPAX5p1uQ_EzMbo,19081
|
|
162
162
|
dtlpy/repositories/assignments.py,sha256=1VwJZ7ctQe1iaDDDpeYDgoj2G-TCgzolVLUEqUocd2w,25506
|
|
163
163
|
dtlpy/repositories/bots.py,sha256=q1SqH01JHloljKxknhHU09psV1vQx9lPhu3g8mBBeRg,8104
|
|
@@ -166,12 +166,12 @@ dtlpy/repositories/collections.py,sha256=lA4T7irQ_dtI_bcVxrHHikClcglp8ltsoPcLwHy
|
|
|
166
166
|
dtlpy/repositories/commands.py,sha256=aismmQOkZbpo9vN1fVYTHXrsJoQNrN7wiANUCiUWUmY,5717
|
|
167
167
|
dtlpy/repositories/compositions.py,sha256=H417BvlQAiWr5NH2eANFke6CfEO5o7DSvapYpf7v5Hk,2150
|
|
168
168
|
dtlpy/repositories/computes.py,sha256=K1a28vJn3tB-h_Xvl8blr-lOytfz3MvyzFzauCja8UA,16936
|
|
169
|
-
dtlpy/repositories/datasets.py,sha256=
|
|
170
|
-
dtlpy/repositories/downloader.py,sha256=
|
|
169
|
+
dtlpy/repositories/datasets.py,sha256=1-ud7Ulc8z5IwQezjrW4C6V24xVUhR0U_dgix76zDYw,72778
|
|
170
|
+
dtlpy/repositories/downloader.py,sha256=EkCscU8QHa6H0-t17laFZn49Up-wNHbFd2DxVIqX8Fc,56209
|
|
171
171
|
dtlpy/repositories/dpks.py,sha256=Cu8pqFZr6MlrdidjysQT_X1hyKaL5YNUn81puOM5FX0,18508
|
|
172
172
|
dtlpy/repositories/drivers.py,sha256=z9qu4I2lwa0aujkKxj0bvn71Zzs8U8byqSx8S9DAIQw,19553
|
|
173
173
|
dtlpy/repositories/executions.py,sha256=BuFv7J6U2Q7om4OlC0q6tnk-1Vcw5m0adfR9a5Mj98Y,32361
|
|
174
|
-
dtlpy/repositories/feature_sets.py,sha256=
|
|
174
|
+
dtlpy/repositories/feature_sets.py,sha256=ueYIGQIz-XYbbiuQy0YnpqO3dqJKGwtbGK0H5ZgkaBs,13892
|
|
175
175
|
dtlpy/repositories/features.py,sha256=SNmECqKSfHlNgjjG_RlX-GAU3udYN9_ZYOe8mFNy010,10671
|
|
176
176
|
dtlpy/repositories/integrations.py,sha256=Y5c37fQCaIkw1p5jPEbAqytgRVXuqe771eHC1hNDE7A,19491
|
|
177
177
|
dtlpy/repositories/items.py,sha256=u2Vg0jOTZ9EhV1sPJdAeIUyfqBRv63Gl-IXaMlon8PM,40028
|
|
@@ -184,7 +184,7 @@ dtlpy/repositories/packages.py,sha256=QhkXMZkpseCt0pDropJuqoHJL0RMa5plk8AN0V3w6N
|
|
|
184
184
|
dtlpy/repositories/pipeline_executions.py,sha256=sEC03bu5DsHc554z3xDbMCP529rhfADcktXgWkswEwI,17281
|
|
185
185
|
dtlpy/repositories/pipelines.py,sha256=5qosyxLFgNbcmL7uoTr9klAj1VM-7mWvsOvngbUU1Qk,24320
|
|
186
186
|
dtlpy/repositories/projects.py,sha256=TKLCuL7Inlv4GwgcQcuXkPQtgacfrXYjsTQng8nPC7Y,21623
|
|
187
|
-
dtlpy/repositories/recipes.py,sha256=
|
|
187
|
+
dtlpy/repositories/recipes.py,sha256=q1FMk4kBPzBS-QIbkxeSsMcAJmYuS7gpYL8t3XIBWII,17117
|
|
188
188
|
dtlpy/repositories/resource_executions.py,sha256=PyzsbdJxz6jf17Gx13GZmqdu6tZo3TTVv-DypnJ_sY0,5374
|
|
189
189
|
dtlpy/repositories/schema.py,sha256=kTKDrbwm7BfQnBAK81LpAl9ChNFdyUweSLNazlJJhjk,3953
|
|
190
190
|
dtlpy/repositories/service_drivers.py,sha256=rxbhLUtT7TCbkVxH4HJtFT9ywcikByPFdX7_4kiTiK0,6766
|
|
@@ -198,7 +198,7 @@ dtlpy/repositories/uploader.py,sha256=I9mP-Ikj0zUOdMTf-7FN_huHWXYeWc8gzVRpfUPAXj
|
|
|
198
198
|
dtlpy/repositories/webhooks.py,sha256=IIpxOJ-7KeQp1TY9aJZz-FuycSjAoYx0TDk8z86KAK8,9033
|
|
199
199
|
dtlpy/services/__init__.py,sha256=VfVJy2otIrDra6i7Sepjyez2ujiE6171ChQZp-YgxsM,904
|
|
200
200
|
dtlpy/services/aihttp_retry.py,sha256=tgntZsAY0dW9v08rkjX1T5BLNDdDd8svtgn7nH8DSGU,5022
|
|
201
|
-
dtlpy/services/api_client.py,sha256=
|
|
201
|
+
dtlpy/services/api_client.py,sha256=MbpTsGVgFonv04pWCfYkOP0shM3LcfCOrucVEXvNn4M,71907
|
|
202
202
|
dtlpy/services/api_reference.py,sha256=cW-B3eoi9Xs3AwI87_Kr6GV_E6HPoC73aETFaGz3A-0,1515
|
|
203
203
|
dtlpy/services/async_utils.py,sha256=kaYHTPw0Lg8PeJJq8whPyzrBYkzD7offs5hsKRZXJm8,3960
|
|
204
204
|
dtlpy/services/calls_counter.py,sha256=gr0io5rIsO5-7Cgc8neA1vK8kUtYhgFPmDQ2jXtiZZs,1036
|
|
@@ -226,14 +226,12 @@ dtlpy/utilities/reports/report.py,sha256=3nEsNnIWmdPEsd21nN8vMMgaZVcPKn9iawKTTeO
|
|
|
226
226
|
dtlpy/utilities/videos/__init__.py,sha256=SV3w51vfPuGBxaMeNemx6qEMHw_C4lLpWNGXMvdsKSY,734
|
|
227
227
|
dtlpy/utilities/videos/video_player.py,sha256=LCxg0EZ_DeuwcT7U_r7MRC6Q19s0xdFb7x5Gk39PRms,24072
|
|
228
228
|
dtlpy/utilities/videos/videos.py,sha256=Dj916B4TQRIhI7HZVevl3foFrCsPp0eeWwvGbgX3-_A,21875
|
|
229
|
-
dtlpy-1.
|
|
230
|
-
dtlpy-1.
|
|
231
|
-
dtlpy-1.
|
|
232
|
-
dtlpy-1.
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
dtlpy-1.
|
|
236
|
-
dtlpy-1.
|
|
237
|
-
dtlpy-1.
|
|
238
|
-
dtlpy-1.116.6.dist-info/top_level.txt,sha256=ZWuLmQGUOtWAdgTf4Fbx884w1o0vBYq9dEc1zLv9Mig,12
|
|
239
|
-
dtlpy-1.116.6.dist-info/RECORD,,
|
|
229
|
+
dtlpy-1.118.12.data/scripts/dlp,sha256=-F0vSCWuSOOtgERAtsPMPyMmzitjhB7Yeftg_PDlDjw,10
|
|
230
|
+
dtlpy-1.118.12.data/scripts/dlp.bat,sha256=QOvx8Dlx5dUbCTMpwbhOcAIXL1IWmgVRSboQqDhIn3A,37
|
|
231
|
+
dtlpy-1.118.12.data/scripts/dlp.py,sha256=ZpfJvYE1_OTSorEYBphqTOutnHSb5TqOXh0y_mUCTJs,4393
|
|
232
|
+
dtlpy-1.118.12.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
233
|
+
dtlpy-1.118.12.dist-info/METADATA,sha256=-R4pN-l-KYSHK8DgWK-kWCA5eLuISDOrpK-7nIUmd9I,5908
|
|
234
|
+
dtlpy-1.118.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
235
|
+
dtlpy-1.118.12.dist-info/entry_points.txt,sha256=C4PyKthCs_no88HU39eioO68oei64STYXC2ooGZTc4Y,43
|
|
236
|
+
dtlpy-1.118.12.dist-info/top_level.txt,sha256=MSr60TGZYlwXCKxlLoZCfILRZ6pU_3L-20d2SZvygyA,6
|
|
237
|
+
dtlpy-1.118.12.dist-info/RECORD,,
|
tests/features/__init__.py
DELETED
|
File without changes
|