cognite-toolkit 0.5.60__py3-none-any.whl → 0.5.61__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.
@@ -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.5.60"
7
+ version = "0.5.61"
8
8
 
9
9
 
10
10
  [plugins]
@@ -48,6 +48,11 @@ class AllScope(Scope):
48
48
  _scope_name = "all"
49
49
 
50
50
 
51
+ class AppConfigScope(Scope):
52
+ _scope_name = "appScope"
53
+ apps: list[Literal["SEARCH"]]
54
+
55
+
51
56
  class CurrentUserScope(Scope):
52
57
  _scope_name = "currentuserscope"
53
58
 
@@ -175,6 +180,12 @@ class AnnotationsAcl(Capability):
175
180
  scope: AllScope
176
181
 
177
182
 
183
+ class AppConfigAcl(Capability):
184
+ _capability_name = "appConfigAcl"
185
+ actions: list[Literal["READ", "WRITE"]]
186
+ scope: AllScope | AppConfigScope
187
+
188
+
178
189
  class AssetsAcl(Capability):
179
190
  _capability_name = "assetsAcl"
180
191
  actions: list[Literal["READ", "WRITE"]]
@@ -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.61
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.61
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.61"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cognite_toolkit
3
- Version: 0.5.60
3
+ Version: 0.5.61
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,9 +1,9 @@
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=2fDfDeXzFJgUAfD2DlfwQKyQL5RXhYlGGenxGvZPy-Q,23
4
4
  cognite_toolkit/_builtin_modules/README.md,sha256=roU3G05E6ogP5yhw4hdIvVDKV831zCh2pzt9BVddtBg,307
5
5
  cognite_toolkit/_builtin_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- cognite_toolkit/_builtin_modules/cdf.toml,sha256=f4GMneLCdzTGrZWsF33TMl4WVeWP9-dUilbIwFjm7oU,273
6
+ cognite_toolkit/_builtin_modules/cdf.toml,sha256=7yvMb-WFWVEQdhExQScNNPHvwkUqPQIqjuLFA8ELywc,273
7
7
  cognite_toolkit/_builtin_modules/package.toml,sha256=RdY44Sxvh6sUtAkgp1dHID1mtqkOTzP_rbZL2Q27fYw,1147
8
8
  cognite_toolkit/_builtin_modules/bootcamp/README.md,sha256=iTVqoy3PLpC-xPi5pbuMIAEHILBSfWTGLexwa1AltpY,211
9
9
  cognite_toolkit/_builtin_modules/bootcamp/default.config.yaml,sha256=MqYTcRiz03bow4LT8E3jumnd_BsqC5SvjgYOVVkHGE0,93
@@ -649,7 +649,7 @@ cognite_toolkit/_cdf_tk/prototypes/commands/import_.py,sha256=a27HF7TWiYZNX4PnV0
649
649
  cognite_toolkit/_cdf_tk/resource_classes/__init__.py,sha256=UxxQ3H3jAFFSyJahlyAIdtkCaLhE9ki1kJ9ZlU3UGEk,1639
650
650
  cognite_toolkit/_cdf_tk/resource_classes/asset.py,sha256=bFneWvGrEO0QsCJfSjfVDnJtIp9YCYIU7LYESldUSMs,1179
651
651
  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
652
+ cognite_toolkit/_cdf_tk/resource_classes/capabilities.py,sha256=Lx8X3Ma06hJfcNGkfA8FN6mf_TMxtlNqxSRc2xzXoic,14279
653
653
  cognite_toolkit/_cdf_tk/resource_classes/container_field_definitions.py,sha256=rOi7pJA19jE9bWyBSHsK7aoblfiOcLoLZT5toI2UjEw,11442
654
654
  cognite_toolkit/_cdf_tk/resource_classes/containers.py,sha256=-b_96LpBSjkKsUVZbdajy69gcDk-Pr-rvSa8R5zcpU8,3643
655
655
  cognite_toolkit/_cdf_tk/resource_classes/dataset.py,sha256=kCEQUswgTgtb8fdd9mMg50MuY34zjDmdh4ZUmxu2A74,816
@@ -673,7 +673,7 @@ cognite_toolkit/_cdf_tk/tk_warnings/base.py,sha256=RMtJ_0iE1xfbTKkvWLkAo5AgscjkN
673
673
  cognite_toolkit/_cdf_tk/tk_warnings/fileread.py,sha256=9xE8i8F_HhrRaQi6IGcE240j4TRZQzrOd7gMByjsXEk,8924
674
674
  cognite_toolkit/_cdf_tk/tk_warnings/other.py,sha256=fhqhzkLRpnBjGerxic9KsQCQyRfD6p7g6hFGNyQkN5c,5275
675
675
  cognite_toolkit/_cdf_tk/utils/__init__.py,sha256=FmaKeh-7yRTTzFrto03eeB8prQ9SRvHco7xk7w0X3MA,1425
676
- cognite_toolkit/_cdf_tk/utils/aggregators.py,sha256=CGBiQbKQD3z55ZLyf4xj7UXUawKuYWvy1zf_vl-jckI,4067
676
+ cognite_toolkit/_cdf_tk/utils/aggregators.py,sha256=hr097jloKrEo1alBpnrQ-LGzgg2c7fi-AEOTh0JVF_Y,11398
677
677
  cognite_toolkit/_cdf_tk/utils/auth.py,sha256=O_VuLXS8xYdjBeTATIHWht7KtemmhZIfxUrzgqCdrMQ,23106
678
678
  cognite_toolkit/_cdf_tk/utils/cdf.py,sha256=AbnNp9yeyrvBnPBuTH2_bKIkrA9xFjLRaxoUJFHZ05E,13119
679
679
  cognite_toolkit/_cdf_tk/utils/cicd.py,sha256=74XQKpm6IHvCbxv-66ouc0MfSdW3RhH9kBSJtjeYdv4,535
@@ -687,7 +687,7 @@ cognite_toolkit/_cdf_tk/utils/modules.py,sha256=9LLjMtowJWn8KRO3OU12VXGb5q2psrob
687
687
  cognite_toolkit/_cdf_tk/utils/producer_worker.py,sha256=v5G1GR2Q7LhkxVTxW8mxe5YQC5o0KBJ-p8nFueyh_ro,8014
688
688
  cognite_toolkit/_cdf_tk/utils/repository.py,sha256=voQLZ6NiNvdAFxqeWHbvzDLsLHl6spjQBihiLyCsGW8,4104
689
689
  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
690
+ cognite_toolkit/_cdf_tk/utils/sql_parser.py,sha256=jvdieuYi1Buzb8UssuiHYW4yNxFmIrVYQhXQWsAu5qU,6055
691
691
  cognite_toolkit/_cdf_tk/utils/table_writers.py,sha256=wEBVlfCFv5bLLy836UiXQubwSxo8kUlSFZeQxnHrTX4,17932
692
692
  cognite_toolkit/_cdf_tk/utils/tarjan.py,sha256=mr3gMzlrkDadn1v7u7-Uzao81KKiM3xfXlZ185HL__A,1359
693
693
  cognite_toolkit/_repo_files/.env.tmpl,sha256=UmgKZVvIp-OzD8oOcYuwb_6c7vSJsqkLhuFaiVgK7RI,972
@@ -695,12 +695,12 @@ cognite_toolkit/_repo_files/.gitignore,sha256=3exydcQPCJTldGFJoZy1RPHc1horbAprAo
695
695
  cognite_toolkit/_repo_files/AzureDevOps/.devops/README.md,sha256=OLA0D7yCX2tACpzvkA0IfkgQ4_swSd-OlJ1tYcTBpsA,240
696
696
  cognite_toolkit/_repo_files/AzureDevOps/.devops/deploy-pipeline.yml,sha256=KVBxW8urCRDtVlJ6HN-kYmw0NCpW6c4lD-nlxz9tZsQ,692
697
697
  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
698
+ cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml,sha256=hmFBWsDfhKKOMtypRrYzsPz6uWZMvXkNwL5NBTqFK0U,667
699
+ cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml,sha256=-z_SCqC4MGAMS7x-671A3dDtBVxglLOqSNTdJp9DPQY,2430
700
700
  cognite_toolkit/demo/__init__.py,sha256=-m1JoUiwRhNCL18eJ6t7fZOL7RPfowhCuqhYFtLgrss,72
701
701
  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,,
702
+ cognite_toolkit-0.5.61.dist-info/METADATA,sha256=ftb50hXIWOi388QW7jdEkVE8eYkAIDfsTFO7j1yQDbM,4409
703
+ cognite_toolkit-0.5.61.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
704
+ cognite_toolkit-0.5.61.dist-info/entry_points.txt,sha256=JlR7MH1_UMogC3QOyN4-1l36VbrCX9xUdQoHGkuJ6-4,83
705
+ cognite_toolkit-0.5.61.dist-info/licenses/LICENSE,sha256=CW0DRcx5tL-pCxLEN7ts2S9g2sLRAsWgHVEX4SN9_Mc,752
706
+ cognite_toolkit-0.5.61.dist-info/RECORD,,