cognite-toolkit 0.6.83__py3-none-any.whl → 0.6.85__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.
Potentially problematic release.
This version of cognite-toolkit might be problematic. Click here for more details.
- cognite_toolkit/_cdf_tk/apps/_purge.py +84 -4
- cognite_toolkit/_cdf_tk/client/_toolkit_client.py +3 -1
- cognite_toolkit/_cdf_tk/client/api/lookup.py +128 -73
- cognite_toolkit/_cdf_tk/client/testing.py +2 -0
- cognite_toolkit/_cdf_tk/commands/_download.py +1 -2
- cognite_toolkit/_cdf_tk/commands/_migrate/creators.py +5 -4
- cognite_toolkit/_cdf_tk/commands/_purge.py +173 -348
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py +1 -1
- cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py +23 -17
- cognite_toolkit/_cdf_tk/storageio/_asset_centric.py +105 -37
- cognite_toolkit/_cdf_tk/utils/aggregators.py +47 -9
- cognite_toolkit/_cdf_tk/utils/validate_access.py +205 -43
- cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml +1 -1
- cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml +1 -1
- cognite_toolkit/_resources/cdf.toml +1 -1
- cognite_toolkit/_version.py +1 -1
- {cognite_toolkit-0.6.83.dist-info → cognite_toolkit-0.6.85.dist-info}/METADATA +1 -1
- {cognite_toolkit-0.6.83.dist-info → cognite_toolkit-0.6.85.dist-info}/RECORD +21 -21
- {cognite_toolkit-0.6.83.dist-info → cognite_toolkit-0.6.85.dist-info}/WHEEL +0 -0
- {cognite_toolkit-0.6.83.dist-info → cognite_toolkit-0.6.85.dist-info}/entry_points.txt +0 -0
- {cognite_toolkit-0.6.83.dist-info → cognite_toolkit-0.6.85.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,19 +1,32 @@
|
|
|
1
1
|
from collections.abc import Sequence
|
|
2
|
-
from typing import Literal
|
|
2
|
+
from typing import Literal, TypeAlias, overload
|
|
3
3
|
|
|
4
4
|
from cognite.client.data_classes.capabilities import (
|
|
5
|
+
AllScope,
|
|
5
6
|
AssetsAcl,
|
|
6
7
|
Capability,
|
|
7
8
|
DataModelInstancesAcl,
|
|
8
9
|
DataModelsAcl,
|
|
10
|
+
DataSetScope,
|
|
11
|
+
EventsAcl,
|
|
12
|
+
ExtractionPipelinesAcl,
|
|
9
13
|
FilesAcl,
|
|
14
|
+
LabelsAcl,
|
|
15
|
+
RelationshipsAcl,
|
|
16
|
+
SequencesAcl,
|
|
17
|
+
ThreeDAcl,
|
|
10
18
|
TimeSeriesAcl,
|
|
19
|
+
TransformationsAcl,
|
|
20
|
+
WorkflowOrchestrationAcl,
|
|
11
21
|
)
|
|
12
22
|
|
|
13
23
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
14
24
|
from cognite_toolkit._cdf_tk.exceptions import AuthorizationError
|
|
25
|
+
from cognite_toolkit._cdf_tk.tk_warnings import HighSeverityWarning
|
|
15
26
|
from cognite_toolkit._cdf_tk.utils import humanize_collection
|
|
16
27
|
|
|
28
|
+
Action: TypeAlias = Literal["read", "write"]
|
|
29
|
+
|
|
17
30
|
|
|
18
31
|
class ValidateAccess:
|
|
19
32
|
def __init__(self, client: ToolkitClient, default_operation: str) -> None:
|
|
@@ -21,12 +34,12 @@ class ValidateAccess:
|
|
|
21
34
|
self.default_operation = default_operation
|
|
22
35
|
|
|
23
36
|
def data_model(
|
|
24
|
-
self, action: Sequence[
|
|
37
|
+
self, action: Sequence[Action], spaces: set[str] | None = None, operation: str | None = None
|
|
25
38
|
) -> list[str] | None:
|
|
26
39
|
"""Validate access to data models.
|
|
27
40
|
|
|
28
41
|
Args:
|
|
29
|
-
action (Sequence[
|
|
42
|
+
action (Sequence[Action]): The actions to validate access for.
|
|
30
43
|
spaces (Set[str] | None): The space IDs to check access for. If None, checks access for all spaces.
|
|
31
44
|
operation (str | None): The operation being performed, used for error messages.
|
|
32
45
|
|
|
@@ -38,7 +51,7 @@ class ValidateAccess:
|
|
|
38
51
|
AuthorizationError: If the user does not have permission to perform the specified action on the given space.
|
|
39
52
|
"""
|
|
40
53
|
operation = operation or self.default_operation
|
|
41
|
-
model_scopes
|
|
54
|
+
model_scopes = self._get_scopes(
|
|
42
55
|
action, DataModelsAcl.Action.Read, DataModelsAcl.Action.Write, operation, "data models"
|
|
43
56
|
)
|
|
44
57
|
if len(model_scopes) != 1:
|
|
@@ -51,19 +64,20 @@ class ValidateAccess:
|
|
|
51
64
|
return model_scope.space_ids
|
|
52
65
|
if missing := spaces - set(model_scope.space_ids):
|
|
53
66
|
raise AuthorizationError(
|
|
54
|
-
f"You have no permission to {
|
|
67
|
+
f"You have no permission to {humanize_collection(action)} the {humanize_collection(missing)!r} "
|
|
68
|
+
f"space(s). This is required to {operation}."
|
|
55
69
|
)
|
|
56
70
|
return None
|
|
57
71
|
else:
|
|
58
72
|
raise ValueError(f"Unexpected data model scope type: {type(model_scope)}. Expected SpaceID or All.")
|
|
59
73
|
|
|
60
74
|
def instances(
|
|
61
|
-
self, action: Sequence[
|
|
75
|
+
self, action: Sequence[Action], spaces: set[str] | None = None, operation: str | None = None
|
|
62
76
|
) -> list[str] | None:
|
|
63
77
|
"""Validate access to data model instances.
|
|
64
78
|
|
|
65
79
|
Args:
|
|
66
|
-
action (Sequence[
|
|
80
|
+
action (Sequence[Action]): The actions to validate access for.
|
|
67
81
|
spaces (Set[str] | None): The space IDs to check access for. If None, checks access for all spaces.
|
|
68
82
|
operation (str | None): The operation being performed, used for error messages.
|
|
69
83
|
|
|
@@ -75,7 +89,7 @@ class ValidateAccess:
|
|
|
75
89
|
AuthorizationError: If the user does not have permission to perform the specified action on the given space.
|
|
76
90
|
"""
|
|
77
91
|
operation = operation or self.default_operation
|
|
78
|
-
instance_scopes
|
|
92
|
+
instance_scopes = self._get_scopes(
|
|
79
93
|
action, DataModelInstancesAcl.Action.Read, DataModelInstancesAcl.Action.Write, operation, "instances"
|
|
80
94
|
)
|
|
81
95
|
if len(instance_scopes) != 1:
|
|
@@ -88,7 +102,8 @@ class ValidateAccess:
|
|
|
88
102
|
return instance_scope.space_ids
|
|
89
103
|
if missing := spaces - set(instance_scope.space_ids):
|
|
90
104
|
raise AuthorizationError(
|
|
91
|
-
f"You have no permission to {
|
|
105
|
+
f"You have no permission to {humanize_collection(action)} instances in the "
|
|
106
|
+
f"{humanize_collection(missing)!r} space(s). This is required to {operation} instances."
|
|
92
107
|
)
|
|
93
108
|
return None
|
|
94
109
|
elif isinstance(instance_scope, DataModelInstancesAcl.Scope.All):
|
|
@@ -98,12 +113,37 @@ class ValidateAccess:
|
|
|
98
113
|
f"Unexpected data model instance scope type: {type(instance_scope)}. Expected SpaceID or All."
|
|
99
114
|
)
|
|
100
115
|
|
|
116
|
+
@overload
|
|
117
|
+
def dataset_data(
|
|
118
|
+
self,
|
|
119
|
+
action: Sequence[Action],
|
|
120
|
+
dataset_ids: set[int],
|
|
121
|
+
operation: str | None = None,
|
|
122
|
+
missing_access: Literal["raise", "warn"] = "raise",
|
|
123
|
+
) -> None: ...
|
|
124
|
+
|
|
125
|
+
@overload
|
|
101
126
|
def dataset_data(
|
|
102
127
|
self,
|
|
103
|
-
action: Sequence[
|
|
128
|
+
action: Sequence[Action],
|
|
129
|
+
dataset_ids: None = None,
|
|
130
|
+
operation: str | None = None,
|
|
131
|
+
missing_access: Literal["raise", "warn"] = "raise",
|
|
132
|
+
) -> (
|
|
133
|
+
dict[Literal["assets", "events", "time series", "files", "relationships", "labels", "3D models"], list[int]]
|
|
134
|
+
| None
|
|
135
|
+
): ...
|
|
136
|
+
|
|
137
|
+
def dataset_data(
|
|
138
|
+
self,
|
|
139
|
+
action: Sequence[Action],
|
|
104
140
|
dataset_ids: set[int] | None = None,
|
|
105
141
|
operation: str | None = None,
|
|
106
|
-
|
|
142
|
+
missing_access: Literal["raise", "warn"] = "raise",
|
|
143
|
+
) -> (
|
|
144
|
+
dict[Literal["assets", "events", "time series", "files", "relationships", "labels", "3D models"], list[int]]
|
|
145
|
+
| None
|
|
146
|
+
):
|
|
107
147
|
"""Validate access to dataset data.
|
|
108
148
|
|
|
109
149
|
Dataset data resources are:
|
|
@@ -117,23 +157,69 @@ class ValidateAccess:
|
|
|
117
157
|
- 3D models
|
|
118
158
|
|
|
119
159
|
Args:
|
|
120
|
-
action (Sequence[
|
|
160
|
+
action (Sequence[Action]): The actions to validate access for
|
|
121
161
|
dataset_ids (Set[int] | None): The dataset IDs to check access for. If None, checks access for all datasets.
|
|
122
|
-
operation (str | None): The operation being performed, used for error messages.
|
|
162
|
+
operation (str | None): The operation being performed, used for error and warning messages.
|
|
163
|
+
missing_access (Literal["raise", "warn"]): Whether to raise an error or warn when access is missing for specified datasets.
|
|
164
|
+
|
|
123
165
|
Returns:
|
|
124
|
-
|
|
166
|
+
dict[
|
|
167
|
+
Literal["assets", "events", "time series", "files", "relationships", "labels", "3D models"], list[int]
|
|
168
|
+
] | None:
|
|
169
|
+
If dataset_ids is None, returns a dictionary with keys as dataset data resource names and values as lists of dataset IDs the user has access to.
|
|
170
|
+
If dataset_ids is provided, returns None if the user has access to all specified datasets for all dataset data resources.
|
|
125
171
|
Raises:
|
|
126
172
|
ValueError: If the client.token.get_scope() returns an unexpected dataset data scope type.
|
|
127
173
|
AuthorizationError: If the user does not have permission to perform the specified action on the given dataset.
|
|
128
174
|
"""
|
|
129
|
-
|
|
175
|
+
acls: list[tuple[str, list[Capability.Action], list[Capability.Action]]] = [
|
|
176
|
+
("assets", [AssetsAcl.Action.Read], [AssetsAcl.Action.Write]),
|
|
177
|
+
("events", [EventsAcl.Action.Read], [EventsAcl.Action.Write]),
|
|
178
|
+
("time series", [TimeSeriesAcl.Action.Read], [TimeSeriesAcl.Action.Write]),
|
|
179
|
+
("files", [FilesAcl.Action.Read], [FilesAcl.Action.Write]),
|
|
180
|
+
("sequences", [SequencesAcl.Action.Read], [SequencesAcl.Action.Write]),
|
|
181
|
+
("relationships", [RelationshipsAcl.Action.Read], [RelationshipsAcl.Action.Write]),
|
|
182
|
+
("labels", [LabelsAcl.Action.Read], [LabelsAcl.Action.Write]),
|
|
183
|
+
(
|
|
184
|
+
"3D models",
|
|
185
|
+
[ThreeDAcl.Action.Read],
|
|
186
|
+
[ThreeDAcl.Action.Create, ThreeDAcl.Action.Update, ThreeDAcl.Action.Delete],
|
|
187
|
+
),
|
|
188
|
+
]
|
|
189
|
+
# MyPy does not understand that with the acl above, we get the correct return value.
|
|
190
|
+
return self._dataset_access_check( # type: ignore[return-value]
|
|
191
|
+
action,
|
|
192
|
+
dataset_ids=dataset_ids,
|
|
193
|
+
operation=operation,
|
|
194
|
+
acls=acls,
|
|
195
|
+
missing_access=missing_access,
|
|
196
|
+
)
|
|
130
197
|
|
|
198
|
+
@overload
|
|
131
199
|
def dataset_configurations(
|
|
132
200
|
self,
|
|
133
|
-
action: Sequence[
|
|
201
|
+
action: Sequence[Action],
|
|
202
|
+
dataset_ids: set[int],
|
|
203
|
+
operation: str | None = None,
|
|
204
|
+
missing_access: Literal["raise", "warn"] = "raise",
|
|
205
|
+
) -> None: ...
|
|
206
|
+
|
|
207
|
+
@overload
|
|
208
|
+
def dataset_configurations(
|
|
209
|
+
self,
|
|
210
|
+
action: Sequence[Action],
|
|
211
|
+
dataset_ids: None = None,
|
|
212
|
+
operation: str | None = None,
|
|
213
|
+
missing_access: Literal["raise", "warn"] = "raise",
|
|
214
|
+
) -> dict[Literal["transformations", "workflows", "extraction pipelines"], list[int]] | None: ...
|
|
215
|
+
|
|
216
|
+
def dataset_configurations(
|
|
217
|
+
self,
|
|
218
|
+
action: Sequence[Action],
|
|
134
219
|
dataset_ids: set[int] | None = None,
|
|
135
220
|
operation: str | None = None,
|
|
136
|
-
|
|
221
|
+
missing_access: Literal["raise", "warn"] = "raise",
|
|
222
|
+
) -> dict[Literal["transformations", "workflows", "extraction pipelines"], list[int]] | None:
|
|
137
223
|
"""Validate access configuration resources.
|
|
138
224
|
|
|
139
225
|
Configuration resources are:
|
|
@@ -142,26 +228,92 @@ class ValidateAccess:
|
|
|
142
228
|
- Extraction pipelines
|
|
143
229
|
|
|
144
230
|
Args:
|
|
145
|
-
action (Sequence[
|
|
231
|
+
action (Sequence[Action]): The actions to validate access for
|
|
146
232
|
dataset_ids (Set[int] | None): The dataset IDs to check access for. If None, checks access for all datasets.
|
|
147
|
-
operation (str | None): The operation being performed, used for error messages.
|
|
233
|
+
operation (str | None): The operation being performed, used for error and warning messages.
|
|
234
|
+
missing_access (Literal["raise", "warn"]): Whether to raise an error or warn when access is missing for specified datasets.
|
|
235
|
+
|
|
148
236
|
Returns:
|
|
149
|
-
list[int] | None:
|
|
237
|
+
dict[Literal["transformations", "workflows", "extraction pipelines"], list[int] | None]:
|
|
238
|
+
If dataset_ids is None, returns a dictionary with keys as configuration resource names and values as lists of dataset IDs the user has access to.
|
|
239
|
+
If dataset_ids is provided, returns None if the user has access to all specified datasets for all configuration resources.
|
|
240
|
+
|
|
150
241
|
Raises:
|
|
151
242
|
ValueError: If the client.token.get_scope() returns an unexpected dataset configuration scope type.
|
|
152
243
|
AuthorizationError: If the user does not have permission to perform the specified action on the given dataset.
|
|
153
244
|
"""
|
|
154
|
-
|
|
245
|
+
acls: list[tuple[str, list[Capability.Action], list[Capability.Action]]] = [
|
|
246
|
+
("transformations", [TransformationsAcl.Action.Read], [TransformationsAcl.Action.Write]),
|
|
247
|
+
("workflows", [WorkflowOrchestrationAcl.Action.Read], [WorkflowOrchestrationAcl.Action.Write]),
|
|
248
|
+
("extraction pipelines", [ExtractionPipelinesAcl.Action.Read], [ExtractionPipelinesAcl.Action.Write]),
|
|
249
|
+
]
|
|
250
|
+
# MyPy does not understand that with the acl above, we get the correct return value.
|
|
251
|
+
return self._dataset_access_check( # type: ignore[return-value]
|
|
252
|
+
action,
|
|
253
|
+
dataset_ids=dataset_ids,
|
|
254
|
+
operation=operation,
|
|
255
|
+
acls=acls,
|
|
256
|
+
missing_access=missing_access,
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
def _dataset_access_check(
|
|
260
|
+
self,
|
|
261
|
+
action: Sequence[Action],
|
|
262
|
+
dataset_ids: set[int] | None,
|
|
263
|
+
operation: str | None,
|
|
264
|
+
missing_access: Literal["raise", "warn"],
|
|
265
|
+
acls: Sequence[tuple[str, list[Capability.Action], list[Capability.Action]]],
|
|
266
|
+
) -> dict[str, list[int]] | None:
|
|
267
|
+
need_access_to = set(dataset_ids) if dataset_ids is not None else None
|
|
268
|
+
no_access: list[str] = []
|
|
269
|
+
output: dict[str, list[int]] = {}
|
|
270
|
+
for name, read_actions, write_actions in acls:
|
|
271
|
+
actions = [
|
|
272
|
+
acl_action for word in action for acl_action in {"read": read_actions, "write": write_actions}[word]
|
|
273
|
+
]
|
|
274
|
+
scopes = self.client.token.get_scope(actions)
|
|
275
|
+
if scopes is None:
|
|
276
|
+
no_access.append(name)
|
|
277
|
+
continue
|
|
278
|
+
# First check for 'all' scope
|
|
279
|
+
for scope in scopes:
|
|
280
|
+
if isinstance(scope, AllScope):
|
|
281
|
+
break
|
|
282
|
+
else:
|
|
283
|
+
# No 'all' scope found, check dataset scopes
|
|
284
|
+
for scope in scopes:
|
|
285
|
+
if isinstance(scope, DataSetScope):
|
|
286
|
+
if need_access_to is None:
|
|
287
|
+
output[name] = scope.ids
|
|
288
|
+
break
|
|
289
|
+
missing_data_set = need_access_to - set(scope.ids)
|
|
290
|
+
if missing_data_set:
|
|
291
|
+
no_access.append(name)
|
|
292
|
+
break
|
|
293
|
+
operation = operation or self.default_operation
|
|
294
|
+
if no_access:
|
|
295
|
+
message = f"You have no permission to {humanize_collection(action)} {humanize_collection(no_access)}."
|
|
296
|
+
if dataset_ids:
|
|
297
|
+
dataset_external_ids = self.client.lookup.data_sets.external_id(list(dataset_ids))
|
|
298
|
+
plural = "s" if len(dataset_external_ids) > 1 else ""
|
|
299
|
+
message = f"{message[:-1]} on dataset{plural} {humanize_collection(dataset_external_ids)}."
|
|
300
|
+
if missing_access == "raise":
|
|
301
|
+
raise AuthorizationError(f"{message} This is required to {operation}.")
|
|
302
|
+
else:
|
|
303
|
+
HighSeverityWarning(f"{message}. You will have limited functionality to {operation}.").print_warning()
|
|
304
|
+
elif dataset_ids is not None:
|
|
305
|
+
return None
|
|
306
|
+
return output or None
|
|
155
307
|
|
|
156
308
|
def timeseries(
|
|
157
309
|
self,
|
|
158
|
-
action: Sequence[
|
|
310
|
+
action: Sequence[Action],
|
|
159
311
|
dataset_ids: set[int] | None = None,
|
|
160
312
|
operation: str | None = None,
|
|
161
313
|
) -> dict[str, list[str]] | None:
|
|
162
314
|
"""Validate access to time series.
|
|
163
315
|
Args:
|
|
164
|
-
action (Sequence[
|
|
316
|
+
action (Sequence[Action]): The actions to validate access for.
|
|
165
317
|
dataset_ids (Set[int] | None): The dataset IDs to check access for. If None, checks access for all datasets.
|
|
166
318
|
operation (str | None): The operation being performed, used for error messages.
|
|
167
319
|
Returns:
|
|
@@ -171,7 +323,7 @@ class ValidateAccess:
|
|
|
171
323
|
AuthorizationError: If the user does not have permission to perform the specified action on the given dataset or time series.
|
|
172
324
|
"""
|
|
173
325
|
operation = operation or self.default_operation
|
|
174
|
-
timeseries_scopes
|
|
326
|
+
timeseries_scopes = self._get_scopes(
|
|
175
327
|
action, TimeSeriesAcl.Action.Read, TimeSeriesAcl.Action.Write, operation, "time series"
|
|
176
328
|
)
|
|
177
329
|
|
|
@@ -185,7 +337,7 @@ class ValidateAccess:
|
|
|
185
337
|
if not missing:
|
|
186
338
|
return None
|
|
187
339
|
raise AuthorizationError(
|
|
188
|
-
f"You have no permission to {
|
|
340
|
+
f"You have no permission to {humanize_collection(action)} time series in dataset {humanize_collection(missing)}. This is required to {operation}."
|
|
189
341
|
)
|
|
190
342
|
output: dict[str, list[str]] = {}
|
|
191
343
|
for scope in timeseries_scopes:
|
|
@@ -204,14 +356,14 @@ class ValidateAccess:
|
|
|
204
356
|
|
|
205
357
|
def files(
|
|
206
358
|
self,
|
|
207
|
-
action: Sequence[
|
|
359
|
+
action: Sequence[Action],
|
|
208
360
|
dataset_ids: set[int] | None = None,
|
|
209
361
|
operation: str | None = None,
|
|
210
362
|
) -> dict[str, list[str]] | None:
|
|
211
363
|
"""Validate access to files.
|
|
212
364
|
|
|
213
365
|
Args:
|
|
214
|
-
action (Sequence[
|
|
366
|
+
action (Sequence[Action]): The actions to validate access for
|
|
215
367
|
dataset_ids (Set[int] | None): The dataset IDs to check access for. If None, checks access for all datasets.
|
|
216
368
|
operation (str | None): The operation being performed, used for error messages.
|
|
217
369
|
Returns:
|
|
@@ -222,9 +374,7 @@ class ValidateAccess:
|
|
|
222
374
|
dataset.
|
|
223
375
|
"""
|
|
224
376
|
operation = operation or self.default_operation
|
|
225
|
-
file_scopes
|
|
226
|
-
action, FilesAcl.Action.Read, FilesAcl.Action.Write, operation, "files"
|
|
227
|
-
)
|
|
377
|
+
file_scopes = self._get_scopes(action, FilesAcl.Action.Read, FilesAcl.Action.Write, operation, "files")
|
|
228
378
|
if isinstance(file_scopes[0], FilesAcl.Scope.All):
|
|
229
379
|
return None
|
|
230
380
|
if dataset_ids is not None:
|
|
@@ -235,7 +385,8 @@ class ValidateAccess:
|
|
|
235
385
|
if not missing:
|
|
236
386
|
return None
|
|
237
387
|
raise AuthorizationError(
|
|
238
|
-
f"You have no permission to {
|
|
388
|
+
f"You have no permission to {humanize_collection(action)} files in dataset "
|
|
389
|
+
f"{humanize_collection(missing)}. This is required to {operation}."
|
|
239
390
|
)
|
|
240
391
|
output: dict[str, list[str]] = {}
|
|
241
392
|
for scope in file_scopes:
|
|
@@ -247,13 +398,13 @@ class ValidateAccess:
|
|
|
247
398
|
|
|
248
399
|
def assets(
|
|
249
400
|
self,
|
|
250
|
-
action: Sequence[
|
|
401
|
+
action: Sequence[Action],
|
|
251
402
|
dataset_ids: set[int] | None = None,
|
|
252
403
|
operation: str | None = None,
|
|
253
404
|
) -> dict[str, list[str]] | None:
|
|
254
405
|
"""Validate access to assets.
|
|
255
406
|
Args:
|
|
256
|
-
action (Sequence[
|
|
407
|
+
action (Sequence[Action]): The actions to validate access for
|
|
257
408
|
dataset_ids (Set[int] | None): The dataset IDs to check access for. If None, checks access for all datasets.
|
|
258
409
|
operation (str | None): The operation being performed, used for error messages.
|
|
259
410
|
Returns:
|
|
@@ -265,9 +416,7 @@ class ValidateAccess:
|
|
|
265
416
|
dataset.
|
|
266
417
|
"""
|
|
267
418
|
operation = operation or self.default_operation
|
|
268
|
-
asset_scopes
|
|
269
|
-
action, AssetsAcl.Action.Read, AssetsAcl.Action.Write, operation, "assets"
|
|
270
|
-
)
|
|
419
|
+
asset_scopes = self._get_scopes(action, AssetsAcl.Action.Read, AssetsAcl.Action.Write, operation, "assets")
|
|
271
420
|
if isinstance(asset_scopes[0], AssetsAcl.Scope.All):
|
|
272
421
|
return None
|
|
273
422
|
if dataset_ids is not None:
|
|
@@ -278,7 +427,8 @@ class ValidateAccess:
|
|
|
278
427
|
if not missing:
|
|
279
428
|
return None
|
|
280
429
|
raise AuthorizationError(
|
|
281
|
-
f"You have no permission to {
|
|
430
|
+
f"You have no permission to {humanize_collection(action)} assets in dataset(s) "
|
|
431
|
+
f"{humanize_collection(missing)}. This is required to {operation}."
|
|
282
432
|
)
|
|
283
433
|
output: dict[str, list[str]] = {}
|
|
284
434
|
for scope in asset_scopes:
|
|
@@ -288,19 +438,31 @@ class ValidateAccess:
|
|
|
288
438
|
raise ValueError(f"Unexpected asset scope type: {type(scope)}. Expected DataSet or All.")
|
|
289
439
|
return output
|
|
290
440
|
|
|
291
|
-
def
|
|
441
|
+
def _get_scopes(
|
|
292
442
|
self,
|
|
293
|
-
action: Sequence[
|
|
443
|
+
action: Sequence[Action],
|
|
294
444
|
read: Capability.Action,
|
|
295
445
|
write: Capability.Action,
|
|
296
446
|
operation: str,
|
|
297
447
|
name: str,
|
|
298
|
-
) ->
|
|
299
|
-
|
|
448
|
+
) -> list[Capability.Scope]:
|
|
449
|
+
"""Helper method to get scopes for the given action.
|
|
450
|
+
|
|
451
|
+
Args:
|
|
452
|
+
action (Sequence[Action]): The actions to validate access for.
|
|
453
|
+
read (Capability.Action): The read action.
|
|
454
|
+
write (Capability.Action): The write action.
|
|
455
|
+
operation (str): The operation being performed, used for error messages.
|
|
456
|
+
name (str): The name of the resource being accessed, used for error messages.
|
|
457
|
+
|
|
458
|
+
Returns:
|
|
459
|
+
list[Capability.Scope]: The scopes for the given action.
|
|
460
|
+
"""
|
|
300
461
|
actions = [{"read": read, "write": write}[a] for a in action]
|
|
301
462
|
scopes = self.client.token.get_scope(actions)
|
|
302
463
|
if scopes is None:
|
|
303
464
|
raise AuthorizationError(
|
|
304
|
-
f"You have no permission to {
|
|
465
|
+
f"You have no permission to {humanize_collection(action, bind_word='and')} {name}. "
|
|
466
|
+
f"This is required to {operation}."
|
|
305
467
|
)
|
|
306
|
-
return scopes
|
|
468
|
+
return scopes
|
|
@@ -4,7 +4,7 @@ default_env = "<DEFAULT_ENV_PLACEHOLDER>"
|
|
|
4
4
|
[modules]
|
|
5
5
|
# This is the version of the modules. It should not be changed manually.
|
|
6
6
|
# It will be updated by the 'cdf modules upgrade' command.
|
|
7
|
-
version = "0.6.
|
|
7
|
+
version = "0.6.85"
|
|
8
8
|
|
|
9
9
|
[alpha_flags]
|
|
10
10
|
external-libraries = true
|
cognite_toolkit/_version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.6.
|
|
1
|
+
__version__ = "0.6.85"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cognite_toolkit
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.85
|
|
4
4
|
Summary: Official Cognite Data Fusion tool for project templates and configuration deployment
|
|
5
5
|
Project-URL: Homepage, https://docs.cognite.com/cdf/deploy/cdf_toolkit/
|
|
6
6
|
Project-URL: Changelog, https://github.com/cognitedata/toolkit/releases
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
cognite_toolkit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
cognite_toolkit/_cdf.py,sha256=1OSAvbOeuIrnsczEG2BtGqRP3L3sq0VMPthmugnqCUw,5821
|
|
3
|
-
cognite_toolkit/_version.py,sha256=
|
|
3
|
+
cognite_toolkit/_version.py,sha256=fSvL3Nga6Lczp2I4CiTq0ik_l-HhTaEENmTQBPEDsxU,23
|
|
4
4
|
cognite_toolkit/_cdf_tk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
cognite_toolkit/_cdf_tk/cdf_toml.py,sha256=DAUmHf19ByVIGH4MDPdXKHZ0G97CxdD5J-EzHTq66C8,8025
|
|
6
6
|
cognite_toolkit/_cdf_tk/constants.py,sha256=e9XmGvQCqGq7zYQrNoopU5e2KnYZYBPyUC5raGShK7k,6364
|
|
@@ -20,7 +20,7 @@ cognite_toolkit/_cdf_tk/apps/_landing_app.py,sha256=tV8hpqxLm2YgqB-TWieheK7ucN-J
|
|
|
20
20
|
cognite_toolkit/_cdf_tk/apps/_migrate_app.py,sha256=xkXo1h3eQ14D5uQ0qQdq01etS1FV_fg6ZnvxMt8H-os,30580
|
|
21
21
|
cognite_toolkit/_cdf_tk/apps/_modules_app.py,sha256=95_H2zccRJl2mWn0oQ5mjCaEDnG63sPKOkB81IgWcIk,7637
|
|
22
22
|
cognite_toolkit/_cdf_tk/apps/_profile_app.py,sha256=vSRJW54bEvIul8_4rOqyOYA7ztXx7TFOvZRZWZTxMbg,7007
|
|
23
|
-
cognite_toolkit/_cdf_tk/apps/_purge.py,sha256=
|
|
23
|
+
cognite_toolkit/_cdf_tk/apps/_purge.py,sha256=e8IgDK2Fib2u30l71Q2trbJ1az90zSLWr5TViTINmL0,15415
|
|
24
24
|
cognite_toolkit/_cdf_tk/apps/_repo_app.py,sha256=jOf_s7oUWJqnRyz89JFiSzT2l8GlyQ7wqidHUQavGo0,1455
|
|
25
25
|
cognite_toolkit/_cdf_tk/apps/_run.py,sha256=nJtIu1hG79MgTIH63FovftczlJHMztLk5Y1Z6u4OzSE,8502
|
|
26
26
|
cognite_toolkit/_cdf_tk/apps/_upload_app.py,sha256=OfXRUEoqCWFaZTb-KzuZrVdrAZ_f4DR4Wm1Votbs2W8,2146
|
|
@@ -35,10 +35,10 @@ cognite_toolkit/_cdf_tk/builders/_streamlit.py,sha256=8Pu_zgyKZjbAsPWywjzB2KWD7h
|
|
|
35
35
|
cognite_toolkit/_cdf_tk/builders/_transformation.py,sha256=STB42zhzOW5M_-b8cKOQ_cegnr7FtMoMxZ87gPLXft4,4723
|
|
36
36
|
cognite_toolkit/_cdf_tk/client/__init__.py,sha256=a6rQXDGfW2g7K5WwrOW5oakh1TdFlBjUVjf9wusOox8,135
|
|
37
37
|
cognite_toolkit/_cdf_tk/client/_constants.py,sha256=COUGcea37mDF2sf6MGqJXWmecTY_6aCImslxXrYW1I0,73
|
|
38
|
-
cognite_toolkit/_cdf_tk/client/_toolkit_client.py,sha256=
|
|
38
|
+
cognite_toolkit/_cdf_tk/client/_toolkit_client.py,sha256=lwVpUOTfkN2dx-0rKYIVi7BNPF17lMpf-LEaEdnS4ZM,2622
|
|
39
39
|
cognite_toolkit/_cdf_tk/client/api_client.py,sha256=CQdD_gfDqQkz5OYHrTnKvBvEvzHPdHDB1BkZPWRoahg,440
|
|
40
40
|
cognite_toolkit/_cdf_tk/client/config.py,sha256=weMR43z-gqHMn-Jqvfmh_nJ0HbgEdyeCGtISuEf3OuY,4269
|
|
41
|
-
cognite_toolkit/_cdf_tk/client/testing.py,sha256=
|
|
41
|
+
cognite_toolkit/_cdf_tk/client/testing.py,sha256=lpcxC2l6Dj8foZr4IboqbIzVxR85NI6G_5saH2DHSfg,6055
|
|
42
42
|
cognite_toolkit/_cdf_tk/client/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
43
|
cognite_toolkit/_cdf_tk/client/api/canvas.py,sha256=i2NwyhvmklTPx3e-yd4lvSxyn6JEjSpv8WXa1SxtmV8,8789
|
|
44
44
|
cognite_toolkit/_cdf_tk/client/api/charts.py,sha256=t-VOrRGwpjmYUtUqGObQWYwGb5gOHVp4cHZBm8ZVGn0,4953
|
|
@@ -50,7 +50,7 @@ cognite_toolkit/_cdf_tk/client/api/extended_raw.py,sha256=9DVbM2aWmIyzbaW-lh10_p
|
|
|
50
50
|
cognite_toolkit/_cdf_tk/client/api/extended_timeseries.py,sha256=xK7XhTfe4W9FvaueUIfR7Q64JOIDwq_svHRjORM76Q4,17774
|
|
51
51
|
cognite_toolkit/_cdf_tk/client/api/fixed_transformations.py,sha256=m66cqbx4oCtjv5TBQOWLNFrz475qVTCXBu_pTxbdCD4,5589
|
|
52
52
|
cognite_toolkit/_cdf_tk/client/api/location_filters.py,sha256=TIbomUbpUNDxOON_a3pwBmCBdltxL1jMQBXKcIjRx44,3759
|
|
53
|
-
cognite_toolkit/_cdf_tk/client/api/lookup.py,sha256=
|
|
53
|
+
cognite_toolkit/_cdf_tk/client/api/lookup.py,sha256=c-cvtgfGGGYyk8ROcJu44qlo1ocqbk0o1zafCql79fU,17652
|
|
54
54
|
cognite_toolkit/_cdf_tk/client/api/migration.py,sha256=eIKcUAXHblL0vL9UzyZgifnL4bW2N4TUt613hTTFf1w,15156
|
|
55
55
|
cognite_toolkit/_cdf_tk/client/api/project.py,sha256=Hj0uDCLyPofG-T4626EdeoRRtBaovhU-SMAQ7VWJ1M4,1063
|
|
56
56
|
cognite_toolkit/_cdf_tk/client/api/search.py,sha256=L4cDPip7pJVP7bEgAiSOjqINIHg8AULNBtR29G5khEQ,612
|
|
@@ -95,9 +95,9 @@ cognite_toolkit/_cdf_tk/commands/__init__.py,sha256=OJYtHiERtUBXm3cjUTyPVaYIMVQp
|
|
|
95
95
|
cognite_toolkit/_cdf_tk/commands/_base.py,sha256=m2hnXo_AAHhsoSayHZO_zUa4xEt5w5oMB4WCHmJr-AY,2595
|
|
96
96
|
cognite_toolkit/_cdf_tk/commands/_changes.py,sha256=DIwuiRpDhWBDpsW3R3yqj0eWLAE3c_kPbmCaUkxjFuo,24852
|
|
97
97
|
cognite_toolkit/_cdf_tk/commands/_cli_commands.py,sha256=TK6U_rm6VZT_V941kTyHMoulWgJzbDC8YIIQDPJ5x3w,1011
|
|
98
|
-
cognite_toolkit/_cdf_tk/commands/_download.py,sha256=
|
|
98
|
+
cognite_toolkit/_cdf_tk/commands/_download.py,sha256=qkbzHzd6FZydNiG83vwciBJEmQAG0t9EFfvZb0K89TA,6693
|
|
99
99
|
cognite_toolkit/_cdf_tk/commands/_profile.py,sha256=_4iX3AHAI6eLmRVUlWXCSvVHx1BZW2yDr_i2i9ECg6U,43120
|
|
100
|
-
cognite_toolkit/_cdf_tk/commands/_purge.py,sha256=
|
|
100
|
+
cognite_toolkit/_cdf_tk/commands/_purge.py,sha256=RadQHsmkPez3fZ5HCP9b82o2_fBx8P_-bTo7prkvWXU,32525
|
|
101
101
|
cognite_toolkit/_cdf_tk/commands/_upload.py,sha256=kXYmP1YMg-JvsuN1iYaMuZH1qZfapya2j-RABGhqGHo,11860
|
|
102
102
|
cognite_toolkit/_cdf_tk/commands/_utils.py,sha256=ARlbqA_5ZWlgN3-xF-zanzSx4B0-9ULnguA5QgHmKGA,1225
|
|
103
103
|
cognite_toolkit/_cdf_tk/commands/_virtual_env.py,sha256=GFAid4hplixmj9_HkcXqU5yCLj-fTXm4cloGD6U2swY,2180
|
|
@@ -119,7 +119,7 @@ cognite_toolkit/_cdf_tk/commands/_migrate/base.py,sha256=aS32Wa-gd7vFNOdCTKEIpSS
|
|
|
119
119
|
cognite_toolkit/_cdf_tk/commands/_migrate/canvas.py,sha256=Tv4OG9V6tDsQbSH13YW8M0n8Ury5gU16oJB-OISVR0w,6398
|
|
120
120
|
cognite_toolkit/_cdf_tk/commands/_migrate/command.py,sha256=RtC5CMQC1Wy5RmOwlCM67Mc8fZEExXubJLvzDzk2IMA,14097
|
|
121
121
|
cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py,sha256=Eol-0ruQ14fwS-bx2pEmbXdICodfknSJ_OsAASa6jkY,9592
|
|
122
|
-
cognite_toolkit/_cdf_tk/commands/_migrate/creators.py,sha256=
|
|
122
|
+
cognite_toolkit/_cdf_tk/commands/_migrate/creators.py,sha256=FTu7w3G8KyPY8pagG3KdPpOmpLcjehaAg2auEy6iM7A,9605
|
|
123
123
|
cognite_toolkit/_cdf_tk/commands/_migrate/data_classes.py,sha256=eF3Fv-tm_A8iaRUAOVOdg1DKPN7OYVPwrLQMvawsO14,8572
|
|
124
124
|
cognite_toolkit/_cdf_tk/commands/_migrate/data_mapper.py,sha256=L9HJGmcTiAkC8Sftrngp8FyHBtAbkZtb9HrpLFg-ED0,6006
|
|
125
125
|
cognite_toolkit/_cdf_tk/commands/_migrate/data_model.py,sha256=i1eUsNX6Dueol9STIEwyksBnBsWUk13O8qHIjW964pM,7860
|
|
@@ -134,7 +134,7 @@ cognite_toolkit/_cdf_tk/cruds/_data_cruds.py,sha256=3FYKow5uOBWt2-6kzszRJE8YgqxJ
|
|
|
134
134
|
cognite_toolkit/_cdf_tk/cruds/_worker.py,sha256=-jbl4JV18Ow3y8BcecYPx8XxDIP897A80yD7frwuilc,9369
|
|
135
135
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/__init__.py,sha256=IE6WxGh9AthWxwHnDmj8EJDd7q6W2OGf1vMnr_lrKAY,2769
|
|
136
136
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/agent.py,sha256=2pcpwAJQ4GPvW2jM0J-Odm7d1sTlaaoBLKEXPHHz2VQ,5091
|
|
137
|
-
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py,sha256=
|
|
137
|
+
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py,sha256=iGG2_btpEqip3o6OKpcKfrh5IljOH9NbrJcGBKX0bn4,24971
|
|
138
138
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/classic.py,sha256=JIY5qC2mg3kV5zIMZRvUuTi3z7NM7gGbd3eiTN8nI8o,25716
|
|
139
139
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/configuration.py,sha256=KrL7bj8q5q18mGB2V-NDkW5U5nfseZOyorXiUbp2uLw,6100
|
|
140
140
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/data_organization.py,sha256=iXn9iAtwA8mhH-7j9GF-MlLomTcaw3GhEbFY28Wx0iA,9927
|
|
@@ -142,7 +142,7 @@ cognite_toolkit/_cdf_tk/cruds/_resource_cruds/datamodel.py,sha256=KED-wNXTZbkrK4
|
|
|
142
142
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/extraction_pipeline.py,sha256=G27TZF1aTN3aruJ1HTfpvhI4fZyHkn-uD6NJpKgkSow,18605
|
|
143
143
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/fieldops.py,sha256=Gtcu-i-nejPCN0Uxn8O5_QakdX2wgDcVCJn1X7AMu-I,11638
|
|
144
144
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/file.py,sha256=F3n2FOWAPder4z3OTYs81VB-6C6r3oUzJsHvigdhaD0,15500
|
|
145
|
-
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py,sha256=
|
|
145
|
+
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py,sha256=3qWJPy5syAAILaQRnsn_EfLyL23w3E6WLLdrrvUj7KI,29158
|
|
146
146
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/group_scoped.py,sha256=WEg8-CxMP64WfE_XXIlH114zM51K0uLaYa4atd992zI,1690
|
|
147
147
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/hosted_extractors.py,sha256=7y2ffuLjUAafGIXfZqqRkXopQKemmFr_IPi_lD4k-fo,15434
|
|
148
148
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/industrial_tool.py,sha256=x_hHlFZ1AURmixRKltWQ680JgrEr6CswMFyaG3N-fnk,8011
|
|
@@ -227,7 +227,7 @@ cognite_toolkit/_cdf_tk/resource_classes/robotics/location.py,sha256=dbc9HT-bc2Q
|
|
|
227
227
|
cognite_toolkit/_cdf_tk/resource_classes/robotics/map.py,sha256=j77z7CzCMiMj8r94BdUKCum9EuZRUjaSlUAy9K9DL_Q,942
|
|
228
228
|
cognite_toolkit/_cdf_tk/storageio/__init__.py,sha256=aM-skaPnKTH1B7HG0faeTUNf7u1b-sT8l7hh5JRZ1E8,2288
|
|
229
229
|
cognite_toolkit/_cdf_tk/storageio/_applications.py,sha256=bhyG1d2_9duPkX-otC2brVcpChvdXSPkYhBHS5T_72g,4343
|
|
230
|
-
cognite_toolkit/_cdf_tk/storageio/_asset_centric.py,sha256=
|
|
230
|
+
cognite_toolkit/_cdf_tk/storageio/_asset_centric.py,sha256=spFAdoHxGKDDEWItM4RovSddudwoPIa_uev8WCAQ9zs,27027
|
|
231
231
|
cognite_toolkit/_cdf_tk/storageio/_base.py,sha256=yqAaBlZcE53V_HKcKi_q-OjpC2Nnhkw13cbSvXjx2wY,8682
|
|
232
232
|
cognite_toolkit/_cdf_tk/storageio/_data_classes.py,sha256=s3TH04BJ1q7rXndRhEbVMEnoOXjxrGg4n-w9Z5uUL-o,3480
|
|
233
233
|
cognite_toolkit/_cdf_tk/storageio/_instances.py,sha256=_tKOdlo7tMJoh7y-47o7sySfDMRa-G-AFVprmzjn3EQ,9311
|
|
@@ -245,7 +245,7 @@ cognite_toolkit/_cdf_tk/tk_warnings/fileread.py,sha256=d2Kx6YyLmCkyFNjK8MO6eKGce
|
|
|
245
245
|
cognite_toolkit/_cdf_tk/tk_warnings/other.py,sha256=4T-WRqMG-KKFS0AV3w6ilea22G_MTXFcOKpbd2z6MNE,5624
|
|
246
246
|
cognite_toolkit/_cdf_tk/utils/__init__.py,sha256=-X01eYNwz3l0W2jby0DZzlDIe9HEhUUj-dK8DBhYki8,1413
|
|
247
247
|
cognite_toolkit/_cdf_tk/utils/_auxiliary.py,sha256=tvvgFiWwLOCVDkPg83U5XqBLfOOt_gI3697EQr7-GSE,1198
|
|
248
|
-
cognite_toolkit/_cdf_tk/utils/aggregators.py,sha256=
|
|
248
|
+
cognite_toolkit/_cdf_tk/utils/aggregators.py,sha256=JJlBYtolnIQjD_L1dLdij06ED-4GUgKAr77YnYIQwSI,17925
|
|
249
249
|
cognite_toolkit/_cdf_tk/utils/auth.py,sha256=O_VuLXS8xYdjBeTATIHWht7KtemmhZIfxUrzgqCdrMQ,23106
|
|
250
250
|
cognite_toolkit/_cdf_tk/utils/auxiliary.py,sha256=BLhWEBz8ErY4CVwJOaN6H9pUrkMJBT-ylYNuvDORMXQ,814
|
|
251
251
|
cognite_toolkit/_cdf_tk/utils/cdf.py,sha256=hxLBhen-ad60FsGk26b1fp-dMper6Ue-qmD643A79i4,18282
|
|
@@ -268,7 +268,7 @@ cognite_toolkit/_cdf_tk/utils/table_writers.py,sha256=Rxp_CZDDWrNPERNq6u1xsAX1Ov
|
|
|
268
268
|
cognite_toolkit/_cdf_tk/utils/text.py,sha256=EpIXjaQ5C5q5fjbUjAW7tncXpdJfiQeV7CYSbr70Bl0,3106
|
|
269
269
|
cognite_toolkit/_cdf_tk/utils/thread_safe_dict.py,sha256=NbRHcZvWpF9xHP5OkOMGFpxrPNbi0Q3Eea6PUNbGlt4,3426
|
|
270
270
|
cognite_toolkit/_cdf_tk/utils/useful_types.py,sha256=tPZOcK1PR1hNogMCgF863APMK6p3528t5kKaKbVl0-s,1352
|
|
271
|
-
cognite_toolkit/_cdf_tk/utils/validate_access.py,sha256
|
|
271
|
+
cognite_toolkit/_cdf_tk/utils/validate_access.py,sha256=1puswcpgEDNCwdk91dhLqCBSu_aaUAd3Hsw21d-YVFs,21955
|
|
272
272
|
cognite_toolkit/_cdf_tk/utils/fileio/__init__.py,sha256=_rZp6E2HaqixzPC57XQGaSm6xm1pFNXNJ4hBAnvGx1c,1137
|
|
273
273
|
cognite_toolkit/_cdf_tk/utils/fileio/_base.py,sha256=MpWaD3lR9vrJ-kGzTiDOtChXhvFD7-xrP-Pzp7vjnLY,756
|
|
274
274
|
cognite_toolkit/_cdf_tk/utils/fileio/_compression.py,sha256=8BAPgg5OKc3vkEEkqOvYsuyh12iXVNuEmC0omWwyJNQ,2355
|
|
@@ -284,13 +284,13 @@ cognite_toolkit/_repo_files/.gitignore,sha256=ip9kf9tcC5OguF4YF4JFEApnKYw0nG0vPi
|
|
|
284
284
|
cognite_toolkit/_repo_files/AzureDevOps/.devops/README.md,sha256=OLA0D7yCX2tACpzvkA0IfkgQ4_swSd-OlJ1tYcTBpsA,240
|
|
285
285
|
cognite_toolkit/_repo_files/AzureDevOps/.devops/deploy-pipeline.yml,sha256=brULcs8joAeBC_w_aoWjDDUHs3JheLMIR9ajPUK96nc,693
|
|
286
286
|
cognite_toolkit/_repo_files/AzureDevOps/.devops/dry-run-pipeline.yml,sha256=OBFDhFWK1mlT4Dc6mDUE2Es834l8sAlYG50-5RxRtHk,723
|
|
287
|
-
cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml,sha256=
|
|
288
|
-
cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml,sha256=
|
|
289
|
-
cognite_toolkit/_resources/cdf.toml,sha256=
|
|
287
|
+
cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml,sha256=oypvpptzzkRZcztIcOxkwipNPTJ54zZGTRUIHwpbTrQ,667
|
|
288
|
+
cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml,sha256=wOg0WNsPFO4Kd14lD9OTlLL7m-W7kF5YbgNZL_uv9zg,2430
|
|
289
|
+
cognite_toolkit/_resources/cdf.toml,sha256=NwEvIORLNsZ8IaxYk-mUhrTuw3b7bKXswk79nxWjRvM,487
|
|
290
290
|
cognite_toolkit/demo/__init__.py,sha256=-m1JoUiwRhNCL18eJ6t7fZOL7RPfowhCuqhYFtLgrss,72
|
|
291
291
|
cognite_toolkit/demo/_base.py,sha256=6xKBUQpXZXGQ3fJ5f7nj7oT0s2n7OTAGIa17ZlKHZ5U,8052
|
|
292
|
-
cognite_toolkit-0.6.
|
|
293
|
-
cognite_toolkit-0.6.
|
|
294
|
-
cognite_toolkit-0.6.
|
|
295
|
-
cognite_toolkit-0.6.
|
|
296
|
-
cognite_toolkit-0.6.
|
|
292
|
+
cognite_toolkit-0.6.85.dist-info/METADATA,sha256=xmey3u0EyVh4Ef5qgxa0VibUKZ_FLz6jAYQ5opMl_6g,4501
|
|
293
|
+
cognite_toolkit-0.6.85.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
294
|
+
cognite_toolkit-0.6.85.dist-info/entry_points.txt,sha256=JlR7MH1_UMogC3QOyN4-1l36VbrCX9xUdQoHGkuJ6-4,83
|
|
295
|
+
cognite_toolkit-0.6.85.dist-info/licenses/LICENSE,sha256=CW0DRcx5tL-pCxLEN7ts2S9g2sLRAsWgHVEX4SN9_Mc,752
|
|
296
|
+
cognite_toolkit-0.6.85.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|