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.

@@ -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[Literal["read", "write"]], spaces: set[str] | None = None, operation: str | None = None
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[Literal["read", "write"]]): The actions to validate access for.
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, actions_str = self._set_up_read_write(
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 {actions_str} the {humanize_collection(missing)!r} space(s). This is required to {operation}."
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[Literal["read", "write"]], spaces: set[str] | None = None, operation: str | None = None
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[Literal["read", "write"]]): The actions to validate access for.
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, action_str = self._set_up_read_write(
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 {action_str} instances in the {humanize_collection(missing)!r} space(s). This is required to {operation} instances."
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[Literal["read", "write"]],
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
- ) -> list[int] | None:
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[Literal["read", "write"]]): The actions to validate access for
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
- list[int] | None: Returns a list of dataset IDs if access is limited to these datasets, or None if access is granted to all datasets.
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
- raise NotImplementedError()
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[Literal["read", "write"]],
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
- ) -> list[int] | None:
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[Literal["read", "write"]]): The actions to validate access for
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: Returns a list of dataset IDs if access is limited to these datasets, or None if access is granted to all datasets.
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
- raise NotImplementedError()
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[Literal["read", "write"]],
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[Literal["read", "write"]]): The actions to validate access for.
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, actions_str = self._set_up_read_write(
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 {actions_str} time series in dataset {humanize_collection(missing)}. This is required to {operation}."
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[Literal["read", "write"]],
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[Literal["read", "write"]]): The actions to validate access for
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, actions_str = self._set_up_read_write(
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 {actions_str} files in dataset {humanize_collection(missing)}. This is required to {operation}."
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[Literal["read", "write"]],
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[Literal["read", "write"]]): The actions to validate access for
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, actions_str = self._set_up_read_write(
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 {actions_str} assets in dataset(s) {humanize_collection(missing)}. This is required to {operation}."
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 _set_up_read_write(
441
+ def _get_scopes(
292
442
  self,
293
- action: Sequence[Literal["read", "write"]],
443
+ action: Sequence[Action],
294
444
  read: Capability.Action,
295
445
  write: Capability.Action,
296
446
  operation: str,
297
447
  name: str,
298
- ) -> tuple[list[Capability.Scope], str]:
299
- actions_str = humanize_collection(action, bind_word="and")
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 {actions_str} {name}. This is required to {operation}."
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, actions_str
468
+ return scopes
@@ -12,7 +12,7 @@ jobs:
12
12
  environment: dev
13
13
  name: Deploy
14
14
  container:
15
- image: cognite/toolkit:0.6.83
15
+ image: cognite/toolkit:0.6.85
16
16
  env:
17
17
  CDF_CLUSTER: ${{ vars.CDF_CLUSTER }}
18
18
  CDF_PROJECT: ${{ vars.CDF_PROJECT }}
@@ -10,7 +10,7 @@ jobs:
10
10
  environment: dev
11
11
  name: Deploy Dry Run
12
12
  container:
13
- image: cognite/toolkit:0.6.83
13
+ image: cognite/toolkit:0.6.85
14
14
  env:
15
15
  CDF_CLUSTER: ${{ vars.CDF_CLUSTER }}
16
16
  CDF_PROJECT: ${{ vars.CDF_PROJECT }}
@@ -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.83"
7
+ version = "0.6.85"
8
8
 
9
9
  [alpha_flags]
10
10
  external-libraries = true
@@ -1 +1 @@
1
- __version__ = "0.6.83"
1
+ __version__ = "0.6.85"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cognite_toolkit
3
- Version: 0.6.83
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=NoDb44OMue8eXw7UG1FCeT7NcrsMhObnFzSRH_iUix8,23
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=ELiHFr-U31HvNq7yij-cXQsaYzRDWgMoa6meN74cZ4k,11768
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=TNQNYKfVSTeBbaGJOKnD5fc_U5QiWdb574QrAvkZd5g,2542
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=77QQd6vroe7LUOY9T1s6qW261XUjkrilL9AYM8pG_YY,5989
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=QDMGuNmbvd7NUjUlfjp_v2KWoXcx0lw75WZXxgVC9iA,14974
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=S5WuOAgbZTgU5kXyjqgTzm7e0hN9FI6IYOeQ9U-44Ow,6718
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=aZ9c7iVrKlvgX62ZbYRKlRqx5eThNu6lheaUIFQ_FOo,41281
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=GMKwpJWH-yQmS9QUFcjKklI_9Ynxwp58R-vZlzJOBuI,9411
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=s-oDIYu27zhsMRLKKIHJj862fQOMHwVVKoxh1I8jfIE,24964
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=JSxkDw9yqdv_jGS_tS_BuqkpSvBSFTkirxp6CMX6TRc,28777
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=0Q8htH7VM2mw0xx64R6lYrOLuLW8OJ4awO1kQgblh9E,23390
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=WU0E3YpDm2e2p7OTrIZ2eY8e9-CFaGpcL7HbAbzqj-8,15947
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=-0NVHg_dlLJ4GC1mhSagthU2BKGbCC2MGb_aX1j6uVg,14791
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=OZbAHAwQZdUoUp4l5yVtSjif-TDdKdqrRpaYs6Cno3o,667
288
- cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml,sha256=tDMSTeVoP8gVemK0DQpmYzWC7D-jSgY3o4BVZNC-NII,2430
289
- cognite_toolkit/_resources/cdf.toml,sha256=lp87nN7ZxGnPiocONpDzYsAeeOz3K-nec3Dd5ZR1u9Q,487
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.83.dist-info/METADATA,sha256=hw2mPua88MAh5KVj90XnAU9e-QA0OnU9PGrmzZKmTSY,4501
293
- cognite_toolkit-0.6.83.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
294
- cognite_toolkit-0.6.83.dist-info/entry_points.txt,sha256=JlR7MH1_UMogC3QOyN4-1l36VbrCX9xUdQoHGkuJ6-4,83
295
- cognite_toolkit-0.6.83.dist-info/licenses/LICENSE,sha256=CW0DRcx5tL-pCxLEN7ts2S9g2sLRAsWgHVEX4SN9_Mc,752
296
- cognite_toolkit-0.6.83.dist-info/RECORD,,
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,,