cognite-toolkit 0.5.60__py3-none-any.whl → 0.5.62__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.
@@ -1,5 +1,20 @@
1
1
  from abc import ABC, abstractmethod
2
- from typing import ClassVar, Literal
2
+ from typing import ClassVar, Generic, Literal, TypeVar
3
+
4
+ from cognite.client.data_classes import (
5
+ AssetFilter,
6
+ EventFilter,
7
+ FileMetadataFilter,
8
+ SequenceFilter,
9
+ TimeSeriesFilter,
10
+ Transformation,
11
+ filters,
12
+ )
13
+ from cognite.client.data_classes.assets import AssetProperty
14
+ from cognite.client.data_classes.documents import SourceFileProperty
15
+ from cognite.client.data_classes.events import EventProperty
16
+ from cognite.client.data_classes.sequences import SequenceProperty
17
+ from cognite.client.data_classes.time_series import TimeSeriesProperty
3
18
 
4
19
  from cognite_toolkit._cdf_tk.client import ToolkitClient
5
20
  from cognite_toolkit._cdf_tk.utils.cdf import (
@@ -8,6 +23,13 @@ from cognite_toolkit._cdf_tk.utils.cdf import (
8
23
  metadata_key_counts,
9
24
  relationship_aggregate_count,
10
25
  )
26
+ from cognite_toolkit._cdf_tk.utils.sql_parser import SQLParser
27
+
28
+ T_CogniteFilter = TypeVar(
29
+ "T_CogniteFilter",
30
+ bound=AssetFilter | EventFilter | FileMetadataFilter | TimeSeriesFilter | SequenceFilter,
31
+ contravariant=True,
32
+ )
11
33
 
12
34
 
13
35
  class AssetCentricAggregator(ABC):
@@ -22,7 +44,7 @@ class AssetCentricAggregator(ABC):
22
44
  raise NotImplementedError()
23
45
 
24
46
  @abstractmethod
25
- def count(self) -> int:
47
+ def count(self, hierarchy: str | None = None, data_set_external_id: str | None = None) -> int:
26
48
  raise NotImplementedError
27
49
 
28
50
  def transformation_count(self) -> int:
@@ -33,8 +55,57 @@ class AssetCentricAggregator(ABC):
33
55
  transformation_count += len(chunk)
34
56
  return transformation_count
35
57
 
58
+ @abstractmethod
59
+ def used_data_sets(self, hierarchy: str | None = None) -> list[str]:
60
+ """Returns a list of data sets used by the resource."""
61
+ raise NotImplementedError
62
+
63
+ def used_transformations(self, data_set_external_ids: list[str]) -> list[Transformation]:
64
+ """Returns a list of transformations used by the resource."""
65
+ data_set_ids = self.client.lookup.data_sets.id(data_set_external_ids, allow_empty=True)
66
+ found_transformations: list[Transformation] = []
67
+ for destination in self._transformation_destination:
68
+ for chunk in self.client.transformations(chunk_size=1000, destination_type=destination, limit=None):
69
+ for transformation in chunk:
70
+ if SQLParser(transformation.query or "", operation="profiling").is_using_data_set(
71
+ data_set_ids, data_set_external_ids
72
+ ):
73
+ found_transformations.append(transformation)
74
+ return found_transformations
75
+
76
+ @staticmethod
77
+ def _to_unique_int_list(results: list) -> list[int]:
78
+ """Converts a list of results to a unique list of integers.
79
+
80
+ This method does the following:
81
+ * Converts each item in the results to an integer, if possible.
82
+ * Filters out None.
83
+ * Removes duplicates
84
+
85
+ This is used as the aggregation results are inconsistently implemented for the different resources,
86
+ when aggregating dataSetIds, Sequences, TimeSeries, and Files return a list of strings, while
87
+ Assets and Events return a list of integers. In addition, the files aggregation can return
88
+ duplicated values.
89
+ """
90
+ seen: set[int] = set()
91
+ ids: list[int] = []
92
+ for id_ in results:
93
+ if isinstance(id_, int) and id_ not in seen:
94
+ ids.append(id_)
95
+ seen.add(id_)
96
+ try:
97
+ int_id = int(id_) # type: ignore[arg-type]
98
+ except (ValueError, TypeError):
99
+ continue
100
+ if int_id not in seen:
101
+ ids.append(int_id)
102
+ seen.add(int_id)
103
+ return ids
104
+
105
+
106
+ class MetadataAggregator(AssetCentricAggregator, ABC, Generic[T_CogniteFilter]):
107
+ filter_cls: type[T_CogniteFilter]
36
108
 
37
- class MetadataAggregator(AssetCentricAggregator, ABC):
38
109
  def __init__(
39
110
  self, client: ToolkitClient, resource_name: Literal["assets", "events", "files", "timeseries", "sequences"]
40
111
  ) -> None:
@@ -44,14 +115,27 @@ class MetadataAggregator(AssetCentricAggregator, ABC):
44
115
  def metadata_key_count(self) -> int:
45
116
  return len(metadata_key_counts(self.client, self.resource_name))
46
117
 
118
+ @classmethod
119
+ def create_filter(
120
+ cls, hierarchy: str | None = None, data_set_external_id: str | None = None
121
+ ) -> T_CogniteFilter | None:
122
+ """Creates a filter for the resource based on hierarchy and data set external ID."""
123
+ if hierarchy is None and data_set_external_id is None:
124
+ return None
125
+ return cls.filter_cls(
126
+ asset_subtree_ids=[{"externalId": hierarchy}] if hierarchy is not None else None,
127
+ data_set_ids=[{"externalId": data_set_external_id}] if data_set_external_id is not None else None,
128
+ )
129
+
47
130
 
48
- class LabelAggregator(MetadataAggregator, ABC):
131
+ class LabelAggregator(MetadataAggregator, ABC, Generic[T_CogniteFilter]):
49
132
  def label_count(self) -> int:
50
133
  return len(label_count(self.client, self.resource_name))
51
134
 
52
135
 
53
- class AssetAggregator(LabelAggregator):
136
+ class AssetAggregator(LabelAggregator[AssetFilter]):
54
137
  _transformation_destination = ("assets", "asset_hierarchy")
138
+ filter_cls = AssetFilter
55
139
 
56
140
  def __init__(self, client: ToolkitClient) -> None:
57
141
  super().__init__(client, "assets")
@@ -60,12 +144,20 @@ class AssetAggregator(LabelAggregator):
60
144
  def display_name(self) -> str:
61
145
  return "Assets"
62
146
 
63
- def count(self) -> int:
64
- return self.client.assets.aggregate_count()
147
+ def count(self, hierarchy: str | None = None, data_set_external_id: str | None = None) -> int:
148
+ return self.client.assets.aggregate_count(filter=self.create_filter(hierarchy, data_set_external_id))
65
149
 
150
+ def used_data_sets(self, hierarchy: str | None = None) -> list[str]:
151
+ """Returns a list of data sets used by the resource."""
152
+ results = self.client.assets.aggregate_unique_values(
153
+ AssetProperty.data_set_id, filter=self.create_filter(hierarchy)
154
+ )
155
+ return self.client.lookup.data_sets.external_id([id_ for id_ in results.unique if isinstance(id_, int)])
66
156
 
67
- class EventAggregator(MetadataAggregator):
157
+
158
+ class EventAggregator(MetadataAggregator[EventFilter]):
68
159
  _transformation_destination = ("events",)
160
+ filter_cls = EventFilter
69
161
 
70
162
  def __init__(self, client: ToolkitClient) -> None:
71
163
  super().__init__(client, "events")
@@ -74,12 +166,20 @@ class EventAggregator(MetadataAggregator):
74
166
  def display_name(self) -> str:
75
167
  return "Events"
76
168
 
77
- def count(self) -> int:
78
- return self.client.events.aggregate_count()
169
+ def count(self, hierarchy: str | None = None, data_set_external_id: str | None = None) -> int:
170
+ return self.client.events.aggregate_count(filter=self.create_filter(hierarchy, data_set_external_id))
171
+
172
+ def used_data_sets(self, hierarchy: str | None = None) -> list[str]:
173
+ """Returns a list of data sets used by the resource."""
174
+ results = self.client.events.aggregate_unique_values(
175
+ property=EventProperty.data_set_id, filter=self.create_filter(hierarchy)
176
+ )
177
+ return self.client.lookup.data_sets.external_id([id_ for id_ in results.unique if isinstance(id_, int)])
79
178
 
80
179
 
81
- class FileAggregator(LabelAggregator):
180
+ class FileAggregator(LabelAggregator[FileMetadataFilter]):
82
181
  _transformation_destination = ("files",)
182
+ filter_cls = FileMetadataFilter
83
183
 
84
184
  def __init__(self, client: ToolkitClient) -> None:
85
185
  super().__init__(client, "files")
@@ -88,16 +188,28 @@ class FileAggregator(LabelAggregator):
88
188
  def display_name(self) -> str:
89
189
  return "Files"
90
190
 
91
- def count(self) -> int:
92
- response = self.client.files.aggregate()
191
+ def count(self, hierarchy: str | None = None, data_set_external_id: str | None = None) -> int:
192
+ response = self.client.files.aggregate(filter=self.create_filter(hierarchy, data_set_external_id))
93
193
  if response:
94
194
  return response[0].count
95
195
  else:
96
196
  return 0
97
197
 
198
+ def used_data_sets(self, hierarchy: str | None = None) -> list[str]:
199
+ """Returns a list of data sets used by the resource."""
200
+ filter_: filters.Filter | None = None
201
+ if hierarchy is not None:
202
+ filter_ = filters.InAssetSubtree("assetExternalIds", [hierarchy])
203
+ results = self.client.documents.aggregate_unique_values(
204
+ property=SourceFileProperty.data_set_id, filter=filter_, limit=1000
205
+ )
206
+ ids = self._to_unique_int_list(results.unique)
207
+ return self.client.lookup.data_sets.external_id(list(ids))
208
+
98
209
 
99
- class TimeSeriesAggregator(MetadataAggregator):
210
+ class TimeSeriesAggregator(MetadataAggregator[TimeSeriesFilter]):
100
211
  _transformation_destination = ("timeseries",)
212
+ filter_cls = TimeSeriesFilter
101
213
 
102
214
  def __init__(self, client: ToolkitClient) -> None:
103
215
  super().__init__(client, "timeseries")
@@ -106,12 +218,21 @@ class TimeSeriesAggregator(MetadataAggregator):
106
218
  def display_name(self) -> str:
107
219
  return "TimeSeries"
108
220
 
109
- def count(self) -> int:
110
- return self.client.time_series.aggregate_count()
221
+ def count(self, hierarchy: str | None = None, data_set_external_id: str | None = None) -> int:
222
+ return self.client.time_series.aggregate_count(filter=self.create_filter(hierarchy, data_set_external_id))
223
+
224
+ def used_data_sets(self, hierarchy: str | None = None) -> list[str]:
225
+ """Returns a list of data sets used by the resource."""
226
+ results = self.client.time_series.aggregate_unique_values(
227
+ property=TimeSeriesProperty.data_set_id, filter=self.create_filter(hierarchy)
228
+ )
229
+ ids = self._to_unique_int_list(results.unique)
230
+ return self.client.lookup.data_sets.external_id(ids)
111
231
 
112
232
 
113
233
  class SequenceAggregator(MetadataAggregator):
114
234
  _transformation_destination = ("sequences",)
235
+ filter_cls = SequenceFilter
115
236
 
116
237
  def __init__(self, client: ToolkitClient) -> None:
117
238
  super().__init__(client, "sequences")
@@ -120,8 +241,16 @@ class SequenceAggregator(MetadataAggregator):
120
241
  def display_name(self) -> str:
121
242
  return "Sequences"
122
243
 
123
- def count(self) -> int:
124
- return self.client.sequences.aggregate_count()
244
+ def count(self, hierarchy: str | None = None, data_set_external_id: str | None = None) -> int:
245
+ return self.client.sequences.aggregate_count(filter=self.create_filter(hierarchy, data_set_external_id))
246
+
247
+ def used_data_sets(self, hierarchy: str | None = None) -> list[str]:
248
+ """Returns a list of data sets used by the resource."""
249
+ results = self.client.sequences.aggregate_unique_values(
250
+ property=SequenceProperty.data_set_id, filter=self.create_filter(hierarchy)
251
+ )
252
+ ids = self._to_unique_int_list(results.unique)
253
+ return self.client.lookup.data_sets.external_id(ids)
125
254
 
126
255
 
127
256
  class RelationshipAggregator(AssetCentricAggregator):
@@ -131,10 +260,15 @@ class RelationshipAggregator(AssetCentricAggregator):
131
260
  def display_name(self) -> str:
132
261
  return "Relationships"
133
262
 
134
- def count(self) -> int:
263
+ def count(self, hierarchy: str | None = None, data_set_external_id: str | None = None) -> int:
264
+ if hierarchy is not None or data_set_external_id is not None:
265
+ raise NotImplementedError()
135
266
  results = relationship_aggregate_count(self.client)
136
267
  return sum(result.count for result in results)
137
268
 
269
+ def used_data_sets(self, hierarchy: str | None = None) -> list[str]:
270
+ raise NotImplementedError()
271
+
138
272
 
139
273
  class LabelCountAggregator(AssetCentricAggregator):
140
274
  _transformation_destination = ("labels",)
@@ -143,5 +277,10 @@ class LabelCountAggregator(AssetCentricAggregator):
143
277
  def display_name(self) -> str:
144
278
  return "Labels"
145
279
 
146
- def count(self) -> int:
280
+ def count(self, hierarchy: str | None = None, data_set_external_id: str | None = None) -> int:
281
+ if hierarchy is not None or data_set_external_id is not None:
282
+ raise NotImplementedError()
147
283
  return label_aggregate_count(self.client)
284
+
285
+ def used_data_sets(self, hierarchy: str | None = None) -> list[str]:
286
+ raise NotImplementedError()
@@ -45,6 +45,20 @@ class SQLParser:
45
45
  self.parse()
46
46
  return self._destination_columns
47
47
 
48
+ def is_using_data_set(
49
+ self, data_set_ids: list[int] | None = None, data_set_external_ids: list[str] | None = None
50
+ ) -> bool:
51
+ """Check if the SQL query uses any of the provided data set IDs or external IDs."""
52
+ for data_set_id in data_set_ids or []:
53
+ if f"{data_set_id} " in self.query:
54
+ return True
55
+ for data_set_external_id in data_set_external_ids or []:
56
+ if f'dataset_id("{data_set_external_id}")' in self.query:
57
+ return True
58
+ elif f"dataset_id('{data_set_external_id}')" in self.query:
59
+ return True
60
+ return False
61
+
48
62
  def parse(self) -> None:
49
63
  """Parse the SQL query and extract table names."""
50
64
  import sqlparse
@@ -12,7 +12,7 @@ jobs:
12
12
  environment: dev
13
13
  name: Deploy
14
14
  container:
15
- image: cognite/toolkit:0.5.60
15
+ image: cognite/toolkit:0.5.62
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.5.60
13
+ image: cognite/toolkit:0.5.62
14
14
  env:
15
15
  CDF_CLUSTER: ${{ vars.CDF_CLUSTER }}
16
16
  CDF_PROJECT: ${{ vars.CDF_PROJECT }}
@@ -1 +1 @@
1
- __version__ = "0.5.60"
1
+ __version__ = "0.5.62"
@@ -0,0 +1,7 @@
1
+ environment:
2
+ name: dev
3
+ project: consul-dev
4
+ validation-type: dev
5
+ selected:
6
+ - modules/
7
+ variables: {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cognite_toolkit
3
- Version: 0.5.60
3
+ Version: 0.5.62
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
@@ -52,7 +52,7 @@ It supports three different modes of operation:
52
52
  1. As an **interactive command-line tool** used alongside the Cognite Data Fusion web application to retrieve and
53
53
  push configuration of the different Cognite Data Fusion services like data sets, data models, transformations,
54
54
  and more. This mode also supports configuration of new Cognite Data Fusion projects to quickly get started.
55
- 2. As tool to support the **project life-cyle by scripting and automating** configuration and management of Cognite Data
55
+ 2. As tool to support the **project life-cycle by scripting and automating** configuration and management of Cognite Data
56
56
  Fusion projects where CDF configurations are kept as yaml-files that can be checked into version
57
57
  control. This mode also supports DevOps workflows with development, staging, and production projects.
58
58
  3. As a **tool to deploy official Cognite project templates** to your Cognite Data Fusion project. The tool comes
@@ -1,10 +1,11 @@
1
1
  cognite_toolkit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  cognite_toolkit/_cdf.py,sha256=WWMslI-y2VbIYDMH19wnINebGwlOvAeYr-qkPRC1f68,5834
3
- cognite_toolkit/_version.py,sha256=xROrxsSxSpqVHtv-pJTcaTLEOpCP6xdof-WFSk2UCjU,23
3
+ cognite_toolkit/_version.py,sha256=fTpVYKhDGFXtOWGEUIjMCKrmXus7JYNBnA_m_Tqs5cw,23
4
+ cognite_toolkit/config.dev.yaml,sha256=CIDmi1OGNOJ-70h2BNCozZRmhvU5BfpZoh6Q04b8iMs,109
4
5
  cognite_toolkit/_builtin_modules/README.md,sha256=roU3G05E6ogP5yhw4hdIvVDKV831zCh2pzt9BVddtBg,307
5
6
  cognite_toolkit/_builtin_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- cognite_toolkit/_builtin_modules/cdf.toml,sha256=f4GMneLCdzTGrZWsF33TMl4WVeWP9-dUilbIwFjm7oU,273
7
- cognite_toolkit/_builtin_modules/package.toml,sha256=RdY44Sxvh6sUtAkgp1dHID1mtqkOTzP_rbZL2Q27fYw,1147
7
+ cognite_toolkit/_builtin_modules/cdf.toml,sha256=xO_fCIiJ0cPWc1BOJhKuQcAh1HOKcsYdSUVM-ktp4oE,273
8
+ cognite_toolkit/_builtin_modules/packages.toml,sha256=RdY44Sxvh6sUtAkgp1dHID1mtqkOTzP_rbZL2Q27fYw,1147
8
9
  cognite_toolkit/_builtin_modules/bootcamp/README.md,sha256=iTVqoy3PLpC-xPi5pbuMIAEHILBSfWTGLexwa1AltpY,211
9
10
  cognite_toolkit/_builtin_modules/bootcamp/default.config.yaml,sha256=MqYTcRiz03bow4LT8E3jumnd_BsqC5SvjgYOVVkHGE0,93
10
11
  cognite_toolkit/_builtin_modules/bootcamp/module.toml,sha256=kdB-p9fQopXdkfnRJBsu9DCaKIfiIM4Y7-G8rtBqHWM,97
@@ -479,10 +480,10 @@ cognite_toolkit/_builtin_modules/sourcesystem/cdf_sharepoint/workflows/populatio
479
480
  cognite_toolkit/_builtin_modules/sourcesystem/cdf_sharepoint/workflows/trigger.WorkflowTrigger.yaml,sha256=9cfJenjYYm1O2IEY0P1jHohUgif6QHjbjp7UDoM2pCQ,253
480
481
  cognite_toolkit/_builtin_modules/sourcesystem/cdf_sharepoint/workflows/v1.WorkflowVersion.yaml,sha256=YgGGZKlEro-ViFtOCU9RYVqnjflJjkCU_nBgmCE0SQk,322
481
482
  cognite_toolkit/_cdf_tk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
482
- cognite_toolkit/_cdf_tk/cdf_toml.py,sha256=Eg608y-ZIMcH5MaDmuH_TZba0JhBq0zrEaXOW-3llgA,6620
483
+ cognite_toolkit/_cdf_tk/cdf_toml.py,sha256=e76CvC-KM0tOuDz181-vYciAeAm0h2I0-efkyj8yrtg,7955
483
484
  cognite_toolkit/_cdf_tk/constants.py,sha256=c722pX6JYm0LD69T-lF8eT6MarExBKgE2eiiij1H0_U,5750
484
485
  cognite_toolkit/_cdf_tk/exceptions.py,sha256=HJZ6kpQ0mJcXsueOyRLCesONiEx_G4QA-EkRuEwXvqo,5118
485
- cognite_toolkit/_cdf_tk/feature_flags.py,sha256=0WsbBbAW1f08rA0o-UlVL_pHIer-qoBVW5OfTAFSPcA,2549
486
+ cognite_toolkit/_cdf_tk/feature_flags.py,sha256=dUtVp9OLpTXY9pk09_HMARUau81uio4_UDVfLC0JbEY,2743
486
487
  cognite_toolkit/_cdf_tk/hints.py,sha256=M832_PM_GcbkmOHtMGtujLW0qHfdmAr0fE66Zqp5YLI,6510
487
488
  cognite_toolkit/_cdf_tk/plugins.py,sha256=XpSVJnePU8Yd6r7_xAU7nj3p6dxVo83YE8kfsEbLUZ4,819
488
489
  cognite_toolkit/_cdf_tk/tracker.py,sha256=ZafqhkCe-CcWuj9fOa3i558ydFRDBpjnKVb1IvtHuAY,6306
@@ -499,9 +500,9 @@ cognite_toolkit/_cdf_tk/apps/_core_app.py,sha256=-4ABeNtC0cxw7XvCRouPzTvlmqsS0NR
499
500
  cognite_toolkit/_cdf_tk/apps/_dump_app.py,sha256=UXmB8oFwVLOmxJBlxxLIBMLPCLwdgyaFfuG6Ex-GZh4,25608
500
501
  cognite_toolkit/_cdf_tk/apps/_landing_app.py,sha256=v4t2ryxzFre7y9IkEPIDwmyJDO8VDIIv6hIcft5TjpQ,422
501
502
  cognite_toolkit/_cdf_tk/apps/_migrate_app.py,sha256=GRsOlqYAWB0rsZsdTJTGfjPm1OkbUq7xBrM4pzQRKoY,3708
502
- cognite_toolkit/_cdf_tk/apps/_modules_app.py,sha256=SQxUYa_w_MCP2fKOCzQoJJhxQw5bE4iSgYBZYduOgIQ,6596
503
+ cognite_toolkit/_cdf_tk/apps/_modules_app.py,sha256=tjCP-QbuPYd7iw6dkxnhrrWf514Lr25_oVgSJyJcaL8,6642
503
504
  cognite_toolkit/_cdf_tk/apps/_populate_app.py,sha256=PGUqK_USOqdPCDvUJI-4ne9TN6EssC33pUbEeCmiLPg,2805
504
- cognite_toolkit/_cdf_tk/apps/_profile_app.py,sha256=c50iGKOaIj4_ySEOivmGkObqG13ru_paMPEQ29V_G6U,1293
505
+ cognite_toolkit/_cdf_tk/apps/_profile_app.py,sha256=kceXE60pZz57cRr73DBbOUxShJ3R1tccUQ2L18zPJJw,1317
505
506
  cognite_toolkit/_cdf_tk/apps/_purge.py,sha256=RxlUx2vzOuxETBszARUazK8azDpZsf-Y_HHuG9PBVd4,4089
506
507
  cognite_toolkit/_cdf_tk/apps/_repo_app.py,sha256=jOf_s7oUWJqnRyz89JFiSzT2l8GlyQ7wqidHUQavGo0,1455
507
508
  cognite_toolkit/_cdf_tk/apps/_run.py,sha256=vAuPzYBYfAAFJ_0myn5AxFXG3BJWq8A0HKrhMZ7PaHI,8539
@@ -544,6 +545,7 @@ cognite_toolkit/_cdf_tk/client/data_classes/__init__.py,sha256=47DEQpj8HBSa-_TIm
544
545
  cognite_toolkit/_cdf_tk/client/data_classes/agent_tools.py,sha256=n26oUmKvRz4HwCJrVDXKsb_mepBr8VFah39TLWLXXAE,2609
545
546
  cognite_toolkit/_cdf_tk/client/data_classes/agents.py,sha256=7kNrUV2d95iyIpDg0ty6SegHLNrecZogLw9ew6rYU30,4866
546
547
  cognite_toolkit/_cdf_tk/client/data_classes/apm_config_v1.py,sha256=0bPq7R0qvdf8SMFS06kX7TXHIClDcJNHwdTBweQB-GU,20150
548
+ cognite_toolkit/_cdf_tk/client/data_classes/canvas.py,sha256=yfckaS0JJQNF2PEL1VFLAiqdlLmy-hw1GTfH7UFsb9U,17463
547
549
  cognite_toolkit/_cdf_tk/client/data_classes/extendable_cognite_file.py,sha256=jFusjXtg769RMEMqQkqbkwn6nJN6tfjQqidEn3bj_yA,9722
548
550
  cognite_toolkit/_cdf_tk/client/data_classes/extended_timeseries.py,sha256=yAvJCHePO_JPhvx5UTQ_qUdCXC5t_aSQY6YxuMnkGIQ,5378
549
551
  cognite_toolkit/_cdf_tk/client/data_classes/functions.py,sha256=wF1IUDoDyhASfeeglJ-u52--SlthCp4hXK69TNCh_Nc,414
@@ -559,12 +561,12 @@ cognite_toolkit/_cdf_tk/client/data_classes/streamlit_.py,sha256=OGoMQ_K88F9vSZu
559
561
  cognite_toolkit/_cdf_tk/client/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
560
562
  cognite_toolkit/_cdf_tk/client/utils/_concurrency.py,sha256=z6gqFv-kw80DsEpbaR7sI0-_WvZdOdAsR4VoFvTqvyU,1309
561
563
  cognite_toolkit/_cdf_tk/client/utils/_http_client.py,sha256=oXNKrIaizG4WiSAhL_kSCHAuL4aaaEhCU4pOJGxh6Xs,483
562
- cognite_toolkit/_cdf_tk/commands/__init__.py,sha256=OsydnUZws0IrKoxLfMILfGgQIOH3eyUrY2yHRZMyiOQ,1171
564
+ cognite_toolkit/_cdf_tk/commands/__init__.py,sha256=-9OGZp44naD2ACg4UjBQjc5wqlppll-BgeMd6scu6CQ,1195
563
565
  cognite_toolkit/_cdf_tk/commands/_base.py,sha256=3Zc3ffR8mjZ1eV7WrC-Y1sYmyMzdbbJDDmsiKEMEJwo,2480
564
566
  cognite_toolkit/_cdf_tk/commands/_changes.py,sha256=3bR_C8p02IW6apexwAAoXuneBM4RcUGdX6Hw_Rtx7Kg,24775
565
567
  cognite_toolkit/_cdf_tk/commands/_cli_commands.py,sha256=6nezoDrw3AkF8hANHjUILgTj_nbdzgT0siweaKI35Fk,1047
566
568
  cognite_toolkit/_cdf_tk/commands/_populate.py,sha256=59VXEFRc4521xhTmCuQnjgWNYE3z4TUkUq8YbFREDGc,12280
567
- cognite_toolkit/_cdf_tk/commands/_profile.py,sha256=8oIQkEKfs-k-SyDVoK3tTOAJJEr2_8ON3JNXeHiytH8,4864
569
+ cognite_toolkit/_cdf_tk/commands/_profile.py,sha256=gZ1Ic0LBudnxH7QgQbK_rB9aL991po8VIAdbvUIiNHI,9182
568
570
  cognite_toolkit/_cdf_tk/commands/_purge.py,sha256=bE2ytMMlMuZc5xGyktKayvZ25x0kdzoKspjwgfab1Qs,26483
569
571
  cognite_toolkit/_cdf_tk/commands/_utils.py,sha256=_IfPBLyfOUc7ubbABiHPpg1MzNGNCxElQ-hmV-vfFDc,1271
570
572
  cognite_toolkit/_cdf_tk/commands/_virtual_env.py,sha256=45_aEPZJeyfGmS2Ph_lucaO7ujY7AF5L5N1K3UH3F0o,2216
@@ -577,7 +579,7 @@ cognite_toolkit/_cdf_tk/commands/dump_data.py,sha256=U_e-fEAEphpkJMlDTHQvQ1F0k3q
577
579
  cognite_toolkit/_cdf_tk/commands/dump_resource.py,sha256=Dt8jlkmtpRtzPDMEjKdpOJPFr92k7Mw-BWkRsE9CJ8s,20515
578
580
  cognite_toolkit/_cdf_tk/commands/featureflag.py,sha256=VPz7FrjVQFqjkz8BYTP2Np3k7BTLFMq_eooNSqmb2ms,1034
579
581
  cognite_toolkit/_cdf_tk/commands/init.py,sha256=M9Qs6OVw5mKS4HkWX9DbWwFES1l65J2G90AXqUpyO4c,1744
580
- cognite_toolkit/_cdf_tk/commands/modules.py,sha256=MrmZzviSrif2jAWtkuNmy8C2jSStqncgBkd7DgYt4oc,30553
582
+ cognite_toolkit/_cdf_tk/commands/modules.py,sha256=lYImbi7eX07j2lbE_8xJ5uix9xa2lL6vBk7IzjGPlhw,35946
581
583
  cognite_toolkit/_cdf_tk/commands/pull.py,sha256=t7KQCxpoFDNBWTYPohK7chrRzPyAOGVmfaY7iBLnTqM,39286
582
584
  cognite_toolkit/_cdf_tk/commands/repo.py,sha256=vQfLMTzSnI4w6eYCQuMnZ_xXVAVjyLnST4Tmu2zgNfE,3874
583
585
  cognite_toolkit/_cdf_tk/commands/run.py,sha256=88AkfCdS4gXHA4I5ZhdU3HWWA5reOTGbfaauM-Yvp8o,37407
@@ -597,7 +599,7 @@ cognite_toolkit/_cdf_tk/data_classes/_deploy_results.py,sha256=BhGvCiuR2LI2DuJae
597
599
  cognite_toolkit/_cdf_tk/data_classes/_module_directories.py,sha256=wQ-hM-0onMrFHHFb3c-V9hFuN-FToEFVzCLG7UrzvbQ,11882
598
600
  cognite_toolkit/_cdf_tk/data_classes/_module_resources.py,sha256=SsZM3vwCqDbc1ejyFtuX-SOY9K_kLGBfIC7JTlQ7QnM,9160
599
601
  cognite_toolkit/_cdf_tk/data_classes/_module_toml.py,sha256=35VFoP_rLMUKhztrePt-uey0SgpVCYgSFuButHkrUq4,2731
600
- cognite_toolkit/_cdf_tk/data_classes/_packages.py,sha256=_ipFUQgEG19Tp1Rjts9Nw98EQ8b71gs6yFGdzGXtn9w,3689
602
+ cognite_toolkit/_cdf_tk/data_classes/_packages.py,sha256=LX17FD_PKEl-QqALQaF3rbVBlnlB_y_lQaFOy8AoWe8,3738
601
603
  cognite_toolkit/_cdf_tk/data_classes/_yaml_comments.py,sha256=zfuDu9aAsb1ExeZBAJIqVaoqIZ050tO_oh3dApzlDwY,4937
602
604
  cognite_toolkit/_cdf_tk/loaders/__init__.py,sha256=9giALvw48KIry7WWdCUxA1AvlVFCAR0bOJ5tKAhy-Lk,6241
603
605
  cognite_toolkit/_cdf_tk/loaders/_base_loaders.py,sha256=sF9D7ImyHmjbLBGVM66D2xSmOj8XnG3LmDqlQQZRarQ,20502
@@ -649,7 +651,7 @@ cognite_toolkit/_cdf_tk/prototypes/commands/import_.py,sha256=a27HF7TWiYZNX4PnV0
649
651
  cognite_toolkit/_cdf_tk/resource_classes/__init__.py,sha256=UxxQ3H3jAFFSyJahlyAIdtkCaLhE9ki1kJ9ZlU3UGEk,1639
650
652
  cognite_toolkit/_cdf_tk/resource_classes/asset.py,sha256=bFneWvGrEO0QsCJfSjfVDnJtIp9YCYIU7LYESldUSMs,1179
651
653
  cognite_toolkit/_cdf_tk/resource_classes/base.py,sha256=nbAWSBkV-GL0co5UNMXvYMIw_-qhJ8uoXy9wz6KmI-w,723
652
- cognite_toolkit/_cdf_tk/resource_classes/capabilities.py,sha256=yvz1ciOenQSEWmMGMcWummhR7SLIGWE1R07UfXWIcvw,14032
654
+ cognite_toolkit/_cdf_tk/resource_classes/capabilities.py,sha256=Lx8X3Ma06hJfcNGkfA8FN6mf_TMxtlNqxSRc2xzXoic,14279
653
655
  cognite_toolkit/_cdf_tk/resource_classes/container_field_definitions.py,sha256=rOi7pJA19jE9bWyBSHsK7aoblfiOcLoLZT5toI2UjEw,11442
654
656
  cognite_toolkit/_cdf_tk/resource_classes/containers.py,sha256=-b_96LpBSjkKsUVZbdajy69gcDk-Pr-rvSa8R5zcpU8,3643
655
657
  cognite_toolkit/_cdf_tk/resource_classes/dataset.py,sha256=kCEQUswgTgtb8fdd9mMg50MuY34zjDmdh4ZUmxu2A74,816
@@ -673,7 +675,7 @@ cognite_toolkit/_cdf_tk/tk_warnings/base.py,sha256=RMtJ_0iE1xfbTKkvWLkAo5AgscjkN
673
675
  cognite_toolkit/_cdf_tk/tk_warnings/fileread.py,sha256=9xE8i8F_HhrRaQi6IGcE240j4TRZQzrOd7gMByjsXEk,8924
674
676
  cognite_toolkit/_cdf_tk/tk_warnings/other.py,sha256=fhqhzkLRpnBjGerxic9KsQCQyRfD6p7g6hFGNyQkN5c,5275
675
677
  cognite_toolkit/_cdf_tk/utils/__init__.py,sha256=FmaKeh-7yRTTzFrto03eeB8prQ9SRvHco7xk7w0X3MA,1425
676
- cognite_toolkit/_cdf_tk/utils/aggregators.py,sha256=CGBiQbKQD3z55ZLyf4xj7UXUawKuYWvy1zf_vl-jckI,4067
678
+ cognite_toolkit/_cdf_tk/utils/aggregators.py,sha256=hr097jloKrEo1alBpnrQ-LGzgg2c7fi-AEOTh0JVF_Y,11398
677
679
  cognite_toolkit/_cdf_tk/utils/auth.py,sha256=O_VuLXS8xYdjBeTATIHWht7KtemmhZIfxUrzgqCdrMQ,23106
678
680
  cognite_toolkit/_cdf_tk/utils/cdf.py,sha256=AbnNp9yeyrvBnPBuTH2_bKIkrA9xFjLRaxoUJFHZ05E,13119
679
681
  cognite_toolkit/_cdf_tk/utils/cicd.py,sha256=74XQKpm6IHvCbxv-66ouc0MfSdW3RhH9kBSJtjeYdv4,535
@@ -687,7 +689,7 @@ cognite_toolkit/_cdf_tk/utils/modules.py,sha256=9LLjMtowJWn8KRO3OU12VXGb5q2psrob
687
689
  cognite_toolkit/_cdf_tk/utils/producer_worker.py,sha256=v5G1GR2Q7LhkxVTxW8mxe5YQC5o0KBJ-p8nFueyh_ro,8014
688
690
  cognite_toolkit/_cdf_tk/utils/repository.py,sha256=voQLZ6NiNvdAFxqeWHbvzDLsLHl6spjQBihiLyCsGW8,4104
689
691
  cognite_toolkit/_cdf_tk/utils/sentry_utils.py,sha256=YWQdsePeFpT214-T-tZ8kEsUyC84gj8pgks42_BDJuU,575
690
- cognite_toolkit/_cdf_tk/utils/sql_parser.py,sha256=WvOFS6KTSXx6EER1b450ZN2cH_zHqFkDew2W7RtABHg,5413
692
+ cognite_toolkit/_cdf_tk/utils/sql_parser.py,sha256=jvdieuYi1Buzb8UssuiHYW4yNxFmIrVYQhXQWsAu5qU,6055
691
693
  cognite_toolkit/_cdf_tk/utils/table_writers.py,sha256=wEBVlfCFv5bLLy836UiXQubwSxo8kUlSFZeQxnHrTX4,17932
692
694
  cognite_toolkit/_cdf_tk/utils/tarjan.py,sha256=mr3gMzlrkDadn1v7u7-Uzao81KKiM3xfXlZ185HL__A,1359
693
695
  cognite_toolkit/_repo_files/.env.tmpl,sha256=UmgKZVvIp-OzD8oOcYuwb_6c7vSJsqkLhuFaiVgK7RI,972
@@ -695,12 +697,12 @@ cognite_toolkit/_repo_files/.gitignore,sha256=3exydcQPCJTldGFJoZy1RPHc1horbAprAo
695
697
  cognite_toolkit/_repo_files/AzureDevOps/.devops/README.md,sha256=OLA0D7yCX2tACpzvkA0IfkgQ4_swSd-OlJ1tYcTBpsA,240
696
698
  cognite_toolkit/_repo_files/AzureDevOps/.devops/deploy-pipeline.yml,sha256=KVBxW8urCRDtVlJ6HN-kYmw0NCpW6c4lD-nlxz9tZsQ,692
697
699
  cognite_toolkit/_repo_files/AzureDevOps/.devops/dry-run-pipeline.yml,sha256=Cp4KYraeWPjP8SnnEIbJoJnjmrRUwc982DPjOOzy2iM,722
698
- cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml,sha256=M2ECnwC7nUDQAsGa-G_96w49TrmJRQfrP7z9qtJgUas,667
699
- cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml,sha256=JX4F9bCa4oGAnNNaaSVqSS-WyfVoGohduKP3TY5iZfQ,2430
700
+ cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml,sha256=aqocHZ1qaXChsxpsKtaDraQxQStn6YQCVV0UOIyCaP4,667
701
+ cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml,sha256=PPtsCAloE4RBUuQTCjl79zVJGYJ_kWdNzm39LGTEHFA,2430
700
702
  cognite_toolkit/demo/__init__.py,sha256=-m1JoUiwRhNCL18eJ6t7fZOL7RPfowhCuqhYFtLgrss,72
701
703
  cognite_toolkit/demo/_base.py,sha256=63nWYI_MHU5EuPwEX_inEAQxxiD5P6k8IAmlgl4CxpE,8082
702
- cognite_toolkit-0.5.60.dist-info/METADATA,sha256=l31-Eugf7fmYUigmwbUCCzInpJek48Xu2nyPZjVJRH4,4409
703
- cognite_toolkit-0.5.60.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
704
- cognite_toolkit-0.5.60.dist-info/entry_points.txt,sha256=JlR7MH1_UMogC3QOyN4-1l36VbrCX9xUdQoHGkuJ6-4,83
705
- cognite_toolkit-0.5.60.dist-info/licenses/LICENSE,sha256=CW0DRcx5tL-pCxLEN7ts2S9g2sLRAsWgHVEX4SN9_Mc,752
706
- cognite_toolkit-0.5.60.dist-info/RECORD,,
704
+ cognite_toolkit-0.5.62.dist-info/METADATA,sha256=fcozRCkXl52ZawHzq8cg2TzsyZllmyoAuH7eA3u5tNM,4410
705
+ cognite_toolkit-0.5.62.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
706
+ cognite_toolkit-0.5.62.dist-info/entry_points.txt,sha256=JlR7MH1_UMogC3QOyN4-1l36VbrCX9xUdQoHGkuJ6-4,83
707
+ cognite_toolkit-0.5.62.dist-info/licenses/LICENSE,sha256=CW0DRcx5tL-pCxLEN7ts2S9g2sLRAsWgHVEX4SN9_Mc,752
708
+ cognite_toolkit-0.5.62.dist-info/RECORD,,