cognite-toolkit 0.6.86__py3-none-any.whl → 0.6.88__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/cdf_toml.py +13 -9
- cognite_toolkit/_cdf_tk/commands/_base.py +2 -1
- cognite_toolkit/_cdf_tk/commands/_upload.py +11 -4
- cognite_toolkit/_cdf_tk/commands/build_cmd.py +5 -7
- cognite_toolkit/_cdf_tk/commands/deploy.py +11 -0
- cognite_toolkit/_cdf_tk/commands/modules.py +16 -12
- cognite_toolkit/_cdf_tk/data_classes/__init__.py +2 -0
- cognite_toolkit/_cdf_tk/data_classes/_config_yaml.py +7 -1
- cognite_toolkit/_cdf_tk/data_classes/_module_directories.py +8 -0
- cognite_toolkit/_cdf_tk/data_classes/_tracking_info.py +43 -0
- cognite_toolkit/_cdf_tk/storageio/_asset_centric.py +15 -2
- cognite_toolkit/_cdf_tk/storageio/_base.py +35 -0
- cognite_toolkit/_cdf_tk/storageio/_raw.py +15 -2
- cognite_toolkit/_cdf_tk/storageio/selectors/_raw.py +1 -0
- cognite_toolkit/_cdf_tk/tracker.py +3 -13
- cognite_toolkit/_cdf_tk/utils/fileio/__init__.py +2 -0
- cognite_toolkit/_cdf_tk/utils/fileio/_readers.py +13 -2
- 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.86.dist-info → cognite_toolkit-0.6.88.dist-info}/METADATA +1 -1
- {cognite_toolkit-0.6.86.dist-info → cognite_toolkit-0.6.88.dist-info}/RECORD +26 -25
- {cognite_toolkit-0.6.86.dist-info → cognite_toolkit-0.6.88.dist-info}/WHEEL +0 -0
- {cognite_toolkit-0.6.86.dist-info → cognite_toolkit-0.6.88.dist-info}/entry_points.txt +0 -0
- {cognite_toolkit-0.6.86.dist-info → cognite_toolkit-0.6.88.dist-info}/licenses/LICENSE +0 -0
|
@@ -78,17 +78,13 @@ class Library:
|
|
|
78
78
|
url: str
|
|
79
79
|
checksum: str
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if "url" not in raw:
|
|
84
|
-
raise ValueError("Library configuration must contain 'url' field.")
|
|
81
|
+
def __post_init__(self) -> None:
|
|
82
|
+
self._validate()
|
|
85
83
|
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
def _validate(self) -> None:
|
|
85
|
+
parsed_url = urllib.parse.urlparse(self.url)
|
|
88
86
|
|
|
89
|
-
parsed_url
|
|
90
|
-
|
|
91
|
-
if not all([parsed_url.scheme, parsed_url.netloc]):
|
|
87
|
+
if not (parsed_url.scheme and parsed_url.netloc):
|
|
92
88
|
raise ValueError("URL is missing scheme or network location (e.g., 'https://domain.com')")
|
|
93
89
|
|
|
94
90
|
if parsed_url.scheme != "https":
|
|
@@ -97,6 +93,14 @@ class Library:
|
|
|
97
93
|
if not parsed_url.path.casefold().endswith(".zip"):
|
|
98
94
|
raise ValueError("URL must point to a .zip file.")
|
|
99
95
|
|
|
96
|
+
@classmethod
|
|
97
|
+
def load(cls, raw: dict[str, Any]) -> Self:
|
|
98
|
+
if "url" not in raw:
|
|
99
|
+
raise ValueError("Library configuration must contain 'url' field.")
|
|
100
|
+
|
|
101
|
+
if "checksum" not in raw:
|
|
102
|
+
raise ValueError("Library configuration must contain 'checksum' field.")
|
|
103
|
+
|
|
100
104
|
return cls(**raw)
|
|
101
105
|
|
|
102
106
|
|
|
@@ -5,6 +5,7 @@ from typing import Any
|
|
|
5
5
|
from rich import print
|
|
6
6
|
from rich.console import Console
|
|
7
7
|
|
|
8
|
+
from cognite_toolkit._cdf_tk.data_classes import CommandTrackingInfo
|
|
8
9
|
from cognite_toolkit._cdf_tk.tk_warnings import (
|
|
9
10
|
ToolkitWarning,
|
|
10
11
|
WarningList,
|
|
@@ -20,7 +21,7 @@ class ToolkitCommand:
|
|
|
20
21
|
self.silent = silent
|
|
21
22
|
self.warning_list = WarningList[ToolkitWarning]()
|
|
22
23
|
self.tracker = Tracker(skip_tracking)
|
|
23
|
-
self._additional_tracking_info
|
|
24
|
+
self._additional_tracking_info = CommandTrackingInfo()
|
|
24
25
|
|
|
25
26
|
@property
|
|
26
27
|
def print_warning(self) -> bool:
|
|
@@ -8,15 +8,16 @@ from rich.console import Console
|
|
|
8
8
|
|
|
9
9
|
from cognite_toolkit._cdf_tk.client import ToolkitClient
|
|
10
10
|
from cognite_toolkit._cdf_tk.constants import DATA_MANIFEST_STEM, DATA_RESOURCE_DIR
|
|
11
|
+
from cognite_toolkit._cdf_tk.exceptions import ToolkitValueError
|
|
11
12
|
from cognite_toolkit._cdf_tk.storageio import T_Selector, UploadableStorageIO, are_same_kind, get_upload_io
|
|
12
|
-
from cognite_toolkit._cdf_tk.storageio._base import T_WriteCogniteResource, UploadItem
|
|
13
|
+
from cognite_toolkit._cdf_tk.storageio._base import T_WriteCogniteResource, TableUploadableStorageIO, UploadItem
|
|
13
14
|
from cognite_toolkit._cdf_tk.storageio.selectors import Selector, SelectorAdapter
|
|
14
15
|
from cognite_toolkit._cdf_tk.tk_warnings import HighSeverityWarning, MediumSeverityWarning
|
|
15
16
|
from cognite_toolkit._cdf_tk.tk_warnings.fileread import ResourceFormatWarning
|
|
16
17
|
from cognite_toolkit._cdf_tk.utils.auth import EnvironmentVariables
|
|
17
18
|
from cognite_toolkit._cdf_tk.utils.collection import chunker
|
|
18
19
|
from cognite_toolkit._cdf_tk.utils.file import read_yaml_file
|
|
19
|
-
from cognite_toolkit._cdf_tk.utils.fileio import FileReader
|
|
20
|
+
from cognite_toolkit._cdf_tk.utils.fileio import TABLE_READ_CLS_BY_FORMAT, FileReader
|
|
20
21
|
from cognite_toolkit._cdf_tk.utils.http_client import HTTPClient, ItemMessage, SuccessResponseItems
|
|
21
22
|
from cognite_toolkit._cdf_tk.utils.producer_worker import ProducerWorkerExecutor
|
|
22
23
|
from cognite_toolkit._cdf_tk.utils.progress_tracker import ProgressTracker
|
|
@@ -178,13 +179,19 @@ class UploadCommand(ToolkitCommand):
|
|
|
178
179
|
if verbose:
|
|
179
180
|
console.print(f"{action} {selector.display_name} from {file_display.as_posix()!r}")
|
|
180
181
|
reader = FileReader.from_filepath(data_file)
|
|
182
|
+
is_table = reader.format in TABLE_READ_CLS_BY_FORMAT
|
|
183
|
+
if is_table and not isinstance(io, TableUploadableStorageIO):
|
|
184
|
+
raise ToolkitValueError(f"{selector.display_name} does not support {reader.format!r} files.")
|
|
181
185
|
tracker = ProgressTracker[str]([self._UPLOAD])
|
|
186
|
+
data_name = "row" if is_table else "line"
|
|
182
187
|
executor = ProducerWorkerExecutor[list[tuple[str, dict[str, JsonVal]]], Sequence[UploadItem]](
|
|
183
188
|
download_iterable=chunker(
|
|
184
|
-
((f"
|
|
189
|
+
((f"{data_name} {line_no}", item) for line_no, item in enumerate(reader.read_chunks(), 1)),
|
|
185
190
|
io.CHUNK_SIZE,
|
|
186
191
|
),
|
|
187
|
-
process=io.
|
|
192
|
+
process=partial(io.rows_to_data, selector=selector)
|
|
193
|
+
if is_table and isinstance(io, TableUploadableStorageIO)
|
|
194
|
+
else io.json_chunk_to_data,
|
|
188
195
|
write=partial(
|
|
189
196
|
self._upload_items,
|
|
190
197
|
upload_client=upload_client,
|
|
@@ -143,7 +143,9 @@ class BuildCommand(ToolkitCommand):
|
|
|
143
143
|
config.environment.selected = parse_user_selected_modules(selected, organization_dir)
|
|
144
144
|
|
|
145
145
|
# tracking which project the module is being built for to trace promotion
|
|
146
|
-
|
|
146
|
+
if client:
|
|
147
|
+
self._additional_tracking_info.project = client.config.project
|
|
148
|
+
self._additional_tracking_info.cluster = client.config.cdf_cluster
|
|
147
149
|
|
|
148
150
|
directory_name = "current directory" if organization_dir == Path(".") else f"project '{organization_dir!s}'"
|
|
149
151
|
root_modules = [
|
|
@@ -331,15 +333,11 @@ class BuildCommand(ToolkitCommand):
|
|
|
331
333
|
build.append(built_module)
|
|
332
334
|
|
|
333
335
|
if module.package_id:
|
|
334
|
-
|
|
335
|
-
if module.package_id not in package_ids:
|
|
336
|
-
package_ids.append(module.package_id)
|
|
336
|
+
self._additional_tracking_info.package_ids.add(module.package_id)
|
|
337
337
|
|
|
338
338
|
if module.module_id:
|
|
339
|
-
|
|
340
|
-
module_ids.append(module.module_id)
|
|
339
|
+
self._additional_tracking_info.module_ids.add(module.module_id)
|
|
341
340
|
|
|
342
|
-
self.tracker.track_module_build(built_module)
|
|
343
341
|
return build
|
|
344
342
|
|
|
345
343
|
def _build_module_resources(
|
|
@@ -79,6 +79,17 @@ class DeployCommand(ToolkitCommand):
|
|
|
79
79
|
build = self._load_build(build_dir, build_env_name)
|
|
80
80
|
|
|
81
81
|
client = env_vars.get_client(build.is_strict_validation)
|
|
82
|
+
|
|
83
|
+
self._additional_tracking_info.project = client.config.project
|
|
84
|
+
self._additional_tracking_info.cluster = client.config.cdf_cluster
|
|
85
|
+
|
|
86
|
+
if not dry_run:
|
|
87
|
+
for module in build.read_modules:
|
|
88
|
+
if module.module_id:
|
|
89
|
+
self._additional_tracking_info.module_ids.add(module.module_id)
|
|
90
|
+
if module.package_id:
|
|
91
|
+
self._additional_tracking_info.package_ids.add(module.package_id)
|
|
92
|
+
|
|
82
93
|
selected_loaders = self._clean_command.get_selected_loaders(build_dir, build.read_resource_folders, include)
|
|
83
94
|
ordered_loaders = self._order_loaders(selected_loaders, build_dir)
|
|
84
95
|
self._start_message(build_dir, dry_run, env_vars)
|
|
@@ -95,11 +95,14 @@ class ModulesCommand(ToolkitCommand):
|
|
|
95
95
|
print_warning: bool = True,
|
|
96
96
|
skip_tracking: bool = False,
|
|
97
97
|
silent: bool = False,
|
|
98
|
+
temp_dir_suffix: str | None = None,
|
|
98
99
|
module_source_dir: Path | None = None,
|
|
99
100
|
):
|
|
100
101
|
super().__init__(print_warning, skip_tracking, silent)
|
|
101
102
|
self._module_source_dir: Path | None = module_source_dir
|
|
102
|
-
|
|
103
|
+
# Use suffix to make temp directory unique (useful for parallel test execution)
|
|
104
|
+
modules_dir_name = f"{MODULES}.{temp_dir_suffix}" if temp_dir_suffix else MODULES
|
|
105
|
+
self._temp_download_dir = Path(tempfile.gettempdir()) / modules_dir_name
|
|
103
106
|
if not self._temp_download_dir.exists():
|
|
104
107
|
self._temp_download_dir.mkdir(parents=True, exist_ok=True)
|
|
105
108
|
|
|
@@ -170,6 +173,11 @@ class ModulesCommand(ToolkitCommand):
|
|
|
170
173
|
print(f"{INDENT}[{'yellow' if mode == 'clean' else 'green'}]Creating {package_name}[/]")
|
|
171
174
|
|
|
172
175
|
for module in package.modules:
|
|
176
|
+
if module.module_id:
|
|
177
|
+
self._additional_tracking_info.installed_module_ids.add(module.module_id)
|
|
178
|
+
if module.package_id:
|
|
179
|
+
self._additional_tracking_info.installed_package_ids.add(module.package_id)
|
|
180
|
+
|
|
173
181
|
if module.dir in seen_modules:
|
|
174
182
|
# A module can be part of multiple packages
|
|
175
183
|
continue
|
|
@@ -769,7 +777,6 @@ default_organization_dir = "{organization_dir.name}"''',
|
|
|
769
777
|
def _get_available_packages(self, user_library: Library | None = None) -> tuple[Packages, Path]:
|
|
770
778
|
"""
|
|
771
779
|
Returns a list of available packages, either from the CDF TOML file or from external libraries if the feature flag is enabled.
|
|
772
|
-
If the feature flag is not enabled and no libraries are specified, it returns the built-in modules.
|
|
773
780
|
"""
|
|
774
781
|
|
|
775
782
|
cdf_toml = CDFToml.load()
|
|
@@ -778,9 +785,8 @@ default_organization_dir = "{organization_dir.name}"''',
|
|
|
778
785
|
|
|
779
786
|
for library_name, library in libraries.items():
|
|
780
787
|
try:
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
additional_tracking_info.append(library_name)
|
|
788
|
+
if library_name:
|
|
789
|
+
self._additional_tracking_info.downloaded_library_ids.add(library_name)
|
|
784
790
|
|
|
785
791
|
print(f"[green]Adding library {library_name} from {library.url}[/]")
|
|
786
792
|
# Extract filename from URL, fallback to library_name.zip if no filename found
|
|
@@ -802,14 +808,12 @@ default_organization_dir = "{organization_dir.name}"''',
|
|
|
802
808
|
|
|
803
809
|
# Track deployment pack download for each package and module
|
|
804
810
|
for package in packages.values():
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
downloaded_package_ids.append(package.id)
|
|
811
|
+
if package.id:
|
|
812
|
+
self._additional_tracking_info.downloaded_package_ids.add(package.id)
|
|
808
813
|
|
|
809
|
-
downloaded_module_ids = self._additional_tracking_info.setdefault("downloadedModuleIds", [])
|
|
810
814
|
for module in package.modules:
|
|
811
|
-
if module.module_id
|
|
812
|
-
downloaded_module_ids.
|
|
815
|
+
if module.module_id:
|
|
816
|
+
self._additional_tracking_info.downloaded_module_ids.add(module.module_id)
|
|
813
817
|
|
|
814
818
|
return packages, file_path.parent
|
|
815
819
|
except Exception as e:
|
|
@@ -821,7 +825,7 @@ default_organization_dir = "{organization_dir.name}"''',
|
|
|
821
825
|
) from e
|
|
822
826
|
|
|
823
827
|
raise ToolkitError(f"Failed to add library {library_name}, {e}")
|
|
824
|
-
# If no libraries are specified or the flag is not enabled,
|
|
828
|
+
# If no libraries are specified or the flag is not enabled, raise an error
|
|
825
829
|
raise ValueError("No valid libraries found.")
|
|
826
830
|
else:
|
|
827
831
|
if user_library:
|
|
@@ -32,6 +32,7 @@ from ._deploy_results import (
|
|
|
32
32
|
from ._module_directories import ModuleDirectories, ModuleLocation
|
|
33
33
|
from ._module_resources import ModuleResources
|
|
34
34
|
from ._packages import Package, Packages
|
|
35
|
+
from ._tracking_info import CommandTrackingInfo
|
|
35
36
|
from ._yaml_comments import YAMLComments
|
|
36
37
|
|
|
37
38
|
__all__ = [
|
|
@@ -47,6 +48,7 @@ __all__ = [
|
|
|
47
48
|
"BuiltResource",
|
|
48
49
|
"BuiltResourceFull",
|
|
49
50
|
"BuiltResourceList",
|
|
51
|
+
"CommandTrackingInfo",
|
|
50
52
|
"ConfigEntry",
|
|
51
53
|
"ConfigYAMLs",
|
|
52
54
|
"DatapointDeployResult",
|
|
@@ -496,7 +496,9 @@ class InitConfigYAML(YAMLWithComments[tuple[str, ...], ConfigEntry], ConfigYAMLC
|
|
|
496
496
|
adds them to the config.yaml file.
|
|
497
497
|
|
|
498
498
|
Args:
|
|
499
|
-
cognite_root_module:
|
|
499
|
+
cognite_root_module: Path to the root directory containing all Cognite modules.
|
|
500
|
+
defaults_files: List of paths to default.config.yaml files to load.
|
|
501
|
+
ignore_patterns: Optional list of tuples containing patterns to ignore when loading defaults.
|
|
500
502
|
|
|
501
503
|
Returns:
|
|
502
504
|
self
|
|
@@ -509,6 +511,10 @@ class InitConfigYAML(YAMLWithComments[tuple[str, ...], ConfigEntry], ConfigYAMLC
|
|
|
509
511
|
raw_file = safe_read(default_config)
|
|
510
512
|
file_comments = self._extract_comments(raw_file, key_prefix=tuple(parts))
|
|
511
513
|
file_data = cast(dict, read_yaml_content(raw_file))
|
|
514
|
+
|
|
515
|
+
# a file may exist, but contain just comments, thus the file_data is None
|
|
516
|
+
if file_data is None:
|
|
517
|
+
continue
|
|
512
518
|
for key, value in file_data.items():
|
|
513
519
|
if len(parts) >= 1 and parts[0] in ROOT_MODULES:
|
|
514
520
|
key_path = (self._variables, *parts, key)
|
|
@@ -164,6 +164,8 @@ class ModuleLocation:
|
|
|
164
164
|
return ReadModule(
|
|
165
165
|
dir=self.dir,
|
|
166
166
|
resource_directories=tuple(self.resource_directories),
|
|
167
|
+
module_id=self.module_id,
|
|
168
|
+
package_id=self.package_id,
|
|
167
169
|
)
|
|
168
170
|
|
|
169
171
|
|
|
@@ -178,6 +180,8 @@ class ReadModule:
|
|
|
178
180
|
|
|
179
181
|
dir: Path
|
|
180
182
|
resource_directories: tuple[str, ...]
|
|
183
|
+
module_id: str | None
|
|
184
|
+
package_id: str | None
|
|
181
185
|
|
|
182
186
|
def resource_dir_path(self, resource_folder: str) -> Path | None:
|
|
183
187
|
"""Returns the path to a resource in the module.
|
|
@@ -198,12 +202,16 @@ class ReadModule:
|
|
|
198
202
|
return cls(
|
|
199
203
|
dir=Path(data["dir"]),
|
|
200
204
|
resource_directories=tuple(data["resource_directories"]),
|
|
205
|
+
module_id=data.get("module_id"),
|
|
206
|
+
package_id=data.get("package_id"),
|
|
201
207
|
)
|
|
202
208
|
|
|
203
209
|
def dump(self) -> dict[str, Any]:
|
|
204
210
|
return {
|
|
205
211
|
"dir": self.dir.as_posix(),
|
|
206
212
|
"resource_directories": list(self.resource_directories),
|
|
213
|
+
"module_id": self.module_id,
|
|
214
|
+
"package_id": self.package_id,
|
|
207
215
|
}
|
|
208
216
|
|
|
209
217
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Data class for command tracking information."""
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class CommandTrackingInfo(BaseModel):
|
|
9
|
+
"""Structured tracking information for CLI commands.
|
|
10
|
+
|
|
11
|
+
This model provides type-safe tracking information that can be collected
|
|
12
|
+
during command execution and sent to Mixpanel for analytics.
|
|
13
|
+
|
|
14
|
+
Attributes:
|
|
15
|
+
project: The CDF project name.
|
|
16
|
+
cluster: The CDF cluster name.
|
|
17
|
+
module_ids: List of module IDs that were deployed or built.
|
|
18
|
+
package_ids: List of package IDs that were deployed or built.
|
|
19
|
+
installed_module_ids: List of module IDs that were installed.
|
|
20
|
+
installed_package_ids: List of package IDs that were installed.
|
|
21
|
+
downloaded_library_ids: List of library IDs that were downloaded.
|
|
22
|
+
downloaded_package_ids: List of package IDs that were downloaded.
|
|
23
|
+
downloaded_module_ids: List of module IDs that were downloaded.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
project: str | None = Field(default=None)
|
|
27
|
+
cluster: str | None = Field(default=None)
|
|
28
|
+
module_ids: set[str] = Field(default_factory=set, alias="moduleIds")
|
|
29
|
+
package_ids: set[str] = Field(default_factory=set, alias="packageIds")
|
|
30
|
+
installed_module_ids: set[str] = Field(default_factory=set, alias="installedModuleIds")
|
|
31
|
+
installed_package_ids: set[str] = Field(default_factory=set, alias="installedPackageIds")
|
|
32
|
+
downloaded_library_ids: set[str] = Field(default_factory=set, alias="downloadedLibraryIds")
|
|
33
|
+
downloaded_package_ids: set[str] = Field(default_factory=set, alias="downloadedPackageIds")
|
|
34
|
+
downloaded_module_ids: set[str] = Field(default_factory=set, alias="downloadedModuleIds")
|
|
35
|
+
|
|
36
|
+
def to_dict(self) -> dict[str, Any]:
|
|
37
|
+
"""Convert the tracking info to a dictionary for Mixpanel.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
A dictionary with camelCase keys matching Mixpanel's expected format.
|
|
41
|
+
Default values are excluded.
|
|
42
|
+
"""
|
|
43
|
+
return self.model_dump(by_alias=True, exclude_defaults=True)
|
|
@@ -72,7 +72,7 @@ from ._base import (
|
|
|
72
72
|
Page,
|
|
73
73
|
StorageIOConfig,
|
|
74
74
|
TableStorageIO,
|
|
75
|
-
|
|
75
|
+
TableUploadableStorageIO,
|
|
76
76
|
UploadItem,
|
|
77
77
|
)
|
|
78
78
|
from .selectors import AssetCentricSelector, AssetSubtreeSelector, DataSetSelector
|
|
@@ -82,7 +82,7 @@ class BaseAssetCentricIO(
|
|
|
82
82
|
Generic[T_ID, T_WriteClass, T_WritableCogniteResource, T_CogniteResourceList, T_WritableCogniteResourceList],
|
|
83
83
|
TableStorageIO[AssetCentricSelector, T_WritableCogniteResource],
|
|
84
84
|
ConfigurableStorageIO[AssetCentricSelector, T_WritableCogniteResource],
|
|
85
|
-
|
|
85
|
+
TableUploadableStorageIO[AssetCentricSelector, T_WritableCogniteResource, T_WriteClass],
|
|
86
86
|
ABC,
|
|
87
87
|
):
|
|
88
88
|
RESOURCE_TYPE: ClassVar[AssetCentricType]
|
|
@@ -199,6 +199,19 @@ class BaseAssetCentricIO(
|
|
|
199
199
|
rows.append(chunk)
|
|
200
200
|
return rows
|
|
201
201
|
|
|
202
|
+
def row_to_resource(self, row: dict[str, JsonVal], selector: AssetCentricSelector | None = None) -> T_WriteClass:
|
|
203
|
+
metadata: dict[str, JsonVal] = {}
|
|
204
|
+
cleaned_row: dict[str, JsonVal] = {}
|
|
205
|
+
for key, value in row.items():
|
|
206
|
+
if key.startswith("metadata."):
|
|
207
|
+
metadata_key = key[len("metadata.") :]
|
|
208
|
+
metadata[metadata_key] = value
|
|
209
|
+
else:
|
|
210
|
+
cleaned_row[key] = value
|
|
211
|
+
if metadata:
|
|
212
|
+
cleaned_row["metadata"] = metadata
|
|
213
|
+
return self.json_to_resource(cleaned_row)
|
|
214
|
+
|
|
202
215
|
|
|
203
216
|
class AssetIO(BaseAssetCentricIO[str, AssetWrite, Asset, AssetWriteList, AssetList]):
|
|
204
217
|
KIND = "Assets"
|
|
@@ -206,6 +206,41 @@ class UploadableStorageIO(
|
|
|
206
206
|
raise NotImplementedError()
|
|
207
207
|
|
|
208
208
|
|
|
209
|
+
class TableUploadableStorageIO(UploadableStorageIO[T_Selector, T_CogniteResource, T_WriteCogniteResource], ABC):
|
|
210
|
+
"""A base class for storage items that support uploading data with table schemas."""
|
|
211
|
+
|
|
212
|
+
def rows_to_data(
|
|
213
|
+
self, rows: list[tuple[str, dict[str, JsonVal]]], selector: T_Selector | None = None
|
|
214
|
+
) -> Sequence[UploadItem[T_WriteCogniteResource]]:
|
|
215
|
+
"""Convert a row-based JSON-compatible chunk of data back to a writable Cognite resource list.
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
rows: A list of tuples, each containing a source ID and a dictionary representing
|
|
219
|
+
the data in a JSON-compatible format.
|
|
220
|
+
selector: Optional selection criteria to identify where to upload the data. This is required for some storage types.
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
A writable Cognite resource list representing the data.
|
|
224
|
+
"""
|
|
225
|
+
result: list[UploadItem[T_WriteCogniteResource]] = []
|
|
226
|
+
for source_id, row in rows:
|
|
227
|
+
item = self.row_to_resource(row, selector=selector)
|
|
228
|
+
result.append(UploadItem(source_id=source_id, item=item))
|
|
229
|
+
return result
|
|
230
|
+
|
|
231
|
+
@abstractmethod
|
|
232
|
+
def row_to_resource(self, row: dict[str, JsonVal], selector: T_Selector | None = None) -> T_WriteCogniteResource:
|
|
233
|
+
"""Convert a row-based JSON-compatible dictionary back to a writable Cognite resource.
|
|
234
|
+
|
|
235
|
+
Args:
|
|
236
|
+
row: A dictionary representing the data in a JSON-compatible format.
|
|
237
|
+
selector: Optional selection criteria to identify where to upload the data. This is required for some storage types.
|
|
238
|
+
Returns:
|
|
239
|
+
A writable Cognite resource representing the data.
|
|
240
|
+
"""
|
|
241
|
+
raise NotImplementedError()
|
|
242
|
+
|
|
243
|
+
|
|
209
244
|
class ConfigurableStorageIO(StorageIO[T_Selector, T_CogniteResource], ABC):
|
|
210
245
|
"""A base class for storage items that support configurations for different storage items."""
|
|
211
246
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from collections.abc import Iterable, Sequence
|
|
2
|
+
from uuid import uuid4
|
|
2
3
|
|
|
3
4
|
from cognite.client.data_classes import Row, RowWrite
|
|
4
5
|
|
|
@@ -8,13 +9,19 @@ from cognite_toolkit._cdf_tk.utils import sanitize_filename
|
|
|
8
9
|
from cognite_toolkit._cdf_tk.utils.http_client import HTTPClient, HTTPMessage, ItemsRequest
|
|
9
10
|
from cognite_toolkit._cdf_tk.utils.useful_types import JsonVal
|
|
10
11
|
|
|
11
|
-
from ._base import
|
|
12
|
+
from ._base import (
|
|
13
|
+
ConfigurableStorageIO,
|
|
14
|
+
Page,
|
|
15
|
+
StorageIOConfig,
|
|
16
|
+
TableUploadableStorageIO,
|
|
17
|
+
UploadItem,
|
|
18
|
+
)
|
|
12
19
|
from .selectors import RawTableSelector
|
|
13
20
|
|
|
14
21
|
|
|
15
22
|
class RawIO(
|
|
16
23
|
ConfigurableStorageIO[RawTableSelector, Row],
|
|
17
|
-
|
|
24
|
+
TableUploadableStorageIO[RawTableSelector, Row, RowWrite],
|
|
18
25
|
):
|
|
19
26
|
KIND = "RawRows"
|
|
20
27
|
DISPLAY_NAME = "Raw Rows"
|
|
@@ -81,3 +88,9 @@ class RawIO(
|
|
|
81
88
|
yield StorageIOConfig(
|
|
82
89
|
kind=RawTableCRUD.kind, folder_name=RawTableCRUD.folder_name, value=selector.table.model_dump(by_alias=True)
|
|
83
90
|
)
|
|
91
|
+
|
|
92
|
+
def row_to_resource(self, row: dict[str, JsonVal], selector: RawTableSelector | None = None) -> RowWrite:
|
|
93
|
+
key = str(uuid4())
|
|
94
|
+
if selector is not None and selector.key is not None and selector.key in row:
|
|
95
|
+
key = str(row.pop(selector.key))
|
|
96
|
+
return RowWrite(key=key, columns=row)
|
|
@@ -14,7 +14,7 @@ from mixpanel import Consumer, Mixpanel, MixpanelException
|
|
|
14
14
|
|
|
15
15
|
from cognite_toolkit._cdf_tk.cdf_toml import CDFToml
|
|
16
16
|
from cognite_toolkit._cdf_tk.constants import IN_BROWSER
|
|
17
|
-
from cognite_toolkit._cdf_tk.data_classes
|
|
17
|
+
from cognite_toolkit._cdf_tk.data_classes import CommandTrackingInfo
|
|
18
18
|
from cognite_toolkit._cdf_tk.tk_warnings import ToolkitWarning, WarningList
|
|
19
19
|
from cognite_toolkit._cdf_tk.utils import get_cicd_environment
|
|
20
20
|
from cognite_toolkit._version import __version__
|
|
@@ -49,7 +49,7 @@ class Tracker:
|
|
|
49
49
|
warning_list: WarningList[ToolkitWarning],
|
|
50
50
|
result: str | Exception,
|
|
51
51
|
cmd: str,
|
|
52
|
-
additional_tracking_info:
|
|
52
|
+
additional_tracking_info: CommandTrackingInfo | None = None,
|
|
53
53
|
) -> bool:
|
|
54
54
|
warning_count = Counter([type(w).__name__ for w in warning_list])
|
|
55
55
|
|
|
@@ -76,20 +76,10 @@ class Tracker:
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
if additional_tracking_info:
|
|
79
|
-
event_information.update(additional_tracking_info)
|
|
79
|
+
event_information.update(additional_tracking_info.to_dict())
|
|
80
80
|
|
|
81
81
|
return self._track(f"command{cmd.capitalize()}", event_information)
|
|
82
82
|
|
|
83
|
-
def track_module_build(self, module: BuiltModule) -> bool:
|
|
84
|
-
event_information = {
|
|
85
|
-
"module": module.name,
|
|
86
|
-
"location_path": module.location.path.as_posix(),
|
|
87
|
-
"warning_count": module.warning_count,
|
|
88
|
-
"status": module.status,
|
|
89
|
-
**{resource_type: len(resource_build) for resource_type, resource_build in module.resources.items()},
|
|
90
|
-
}
|
|
91
|
-
return self._track("moduleBuild", event_information)
|
|
92
|
-
|
|
93
83
|
def _track(self, event_name: str, event_information: dict[str, Any]) -> bool:
|
|
94
84
|
if self.skip_tracking or not self.opted_in or "PYTEST_CURRENT_TEST" in os.environ:
|
|
95
85
|
return False
|
|
@@ -8,6 +8,7 @@ from ._compression import (
|
|
|
8
8
|
)
|
|
9
9
|
from ._readers import (
|
|
10
10
|
FILE_READ_CLS_BY_FORMAT,
|
|
11
|
+
TABLE_READ_CLS_BY_FORMAT,
|
|
11
12
|
CSVReader,
|
|
12
13
|
FailedParsing,
|
|
13
14
|
FileReader,
|
|
@@ -32,6 +33,7 @@ __all__ = [
|
|
|
32
33
|
"COMPRESSION_BY_SUFFIX",
|
|
33
34
|
"FILE_READ_CLS_BY_FORMAT",
|
|
34
35
|
"FILE_WRITE_CLS_BY_FORMAT",
|
|
36
|
+
"TABLE_READ_CLS_BY_FORMAT",
|
|
35
37
|
"TABLE_WRITE_CLS_BY_FORMAT",
|
|
36
38
|
"CSVReader",
|
|
37
39
|
"CSVWriter",
|
|
@@ -87,7 +87,10 @@ class FailedParsing:
|
|
|
87
87
|
error: str
|
|
88
88
|
|
|
89
89
|
|
|
90
|
-
class
|
|
90
|
+
class TableReader(FileReader, ABC): ...
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class CSVReader(TableReader):
|
|
91
94
|
"""Reads CSV files and yields each row as a dictionary.
|
|
92
95
|
|
|
93
96
|
Args:
|
|
@@ -229,7 +232,7 @@ class CSVReader(FileReader):
|
|
|
229
232
|
yield from csv.DictReader(file)
|
|
230
233
|
|
|
231
234
|
|
|
232
|
-
class ParquetReader(
|
|
235
|
+
class ParquetReader(TableReader):
|
|
233
236
|
format = ".parquet"
|
|
234
237
|
|
|
235
238
|
def read_chunks(self) -> Iterator[dict[str, JsonVal]]:
|
|
@@ -257,6 +260,7 @@ class ParquetReader(FileReader):
|
|
|
257
260
|
|
|
258
261
|
|
|
259
262
|
FILE_READ_CLS_BY_FORMAT: Mapping[str, type[FileReader]] = {}
|
|
263
|
+
TABLE_READ_CLS_BY_FORMAT: Mapping[str, type[TableReader]] = {}
|
|
260
264
|
for subclass in get_concrete_subclasses(FileReader): # type: ignore[type-abstract]
|
|
261
265
|
if not getattr(subclass, "format", None):
|
|
262
266
|
continue
|
|
@@ -267,3 +271,10 @@ for subclass in get_concrete_subclasses(FileReader): # type: ignore[type-abstra
|
|
|
267
271
|
)
|
|
268
272
|
# We know we have a dict, but we want to expose FILE_READ_CLS_BY_FORMAT as a Mapping
|
|
269
273
|
FILE_READ_CLS_BY_FORMAT[subclass.format] = subclass # type: ignore[index]
|
|
274
|
+
if issubclass(subclass, TableReader):
|
|
275
|
+
if subclass.format in TABLE_READ_CLS_BY_FORMAT:
|
|
276
|
+
raise TypeError(
|
|
277
|
+
f"Duplicate table file format {subclass.format!r} found for classes "
|
|
278
|
+
f"{TABLE_READ_CLS_BY_FORMAT[subclass.format].__name__!r} and {subclass.__name__!r}."
|
|
279
|
+
)
|
|
280
|
+
TABLE_READ_CLS_BY_FORMAT[subclass.format] = subclass # type: ignore[index]
|
|
@@ -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.88"
|
|
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.88"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cognite_toolkit
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.88
|
|
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,14 +1,14 @@
|
|
|
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=EgTgWpmRuWXg6fwc6D-LGpiAVF4TwDefD9KxLpZLYlU,23
|
|
4
4
|
cognite_toolkit/_cdf_tk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
cognite_toolkit/_cdf_tk/cdf_toml.py,sha256=
|
|
5
|
+
cognite_toolkit/_cdf_tk/cdf_toml.py,sha256=IjmzNVLxsOV6tsMDgmJmXsy-LQru-8IEQdFzGW5DxVk,8117
|
|
6
6
|
cognite_toolkit/_cdf_tk/constants.py,sha256=e9XmGvQCqGq7zYQrNoopU5e2KnYZYBPyUC5raGShK7k,6364
|
|
7
7
|
cognite_toolkit/_cdf_tk/exceptions.py,sha256=xG0jMwi5A20nvPvyo6sCyz_cyKycynPyIzpYiGR4gcU,6064
|
|
8
8
|
cognite_toolkit/_cdf_tk/feature_flags.py,sha256=oKvUHcNTtt8zp31eZ1eSCxfSIelm0L5B0xAQOskr1hc,2892
|
|
9
9
|
cognite_toolkit/_cdf_tk/hints.py,sha256=UI1ymi2T5wCcYOpEbKbVaDnlyFReFy8TDtMVt-5E1h8,6493
|
|
10
10
|
cognite_toolkit/_cdf_tk/plugins.py,sha256=yL7Q4k9UGnoHP9Ucrno02_qi1L3DrE6ggBiQI-wQKiU,783
|
|
11
|
-
cognite_toolkit/_cdf_tk/tracker.py,sha256=
|
|
11
|
+
cognite_toolkit/_cdf_tk/tracker.py,sha256=_j8gWlqwfD0eCbRW4XKB1kAixjCwau9-o4rPvFvouNY,6016
|
|
12
12
|
cognite_toolkit/_cdf_tk/validation.py,sha256=KFdPgnNIbVM0yjFF0cqmpBB8MI8e-U-YbBYrP4IiClE,8441
|
|
13
13
|
cognite_toolkit/_cdf_tk/apps/__init__.py,sha256=nNQymHhwxjXNpY9N9xDmnvSPLCMwQkn_t9oRkgDWofI,659
|
|
14
14
|
cognite_toolkit/_cdf_tk/apps/_auth_app.py,sha256=ER7uYb3ViwsHMXiQEZpyhwU6TIjKaB9aEy32VI4MPpg,3397
|
|
@@ -92,25 +92,25 @@ cognite_toolkit/_cdf_tk/client/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
|
|
|
92
92
|
cognite_toolkit/_cdf_tk/client/utils/_concurrency.py,sha256=3GtQbKDaosyKHEt-KzxKK9Yie4TvZPdoou2vUk6dUa8,2298
|
|
93
93
|
cognite_toolkit/_cdf_tk/client/utils/_http_client.py,sha256=oXNKrIaizG4WiSAhL_kSCHAuL4aaaEhCU4pOJGxh6Xs,483
|
|
94
94
|
cognite_toolkit/_cdf_tk/commands/__init__.py,sha256=OJYtHiERtUBXm3cjUTyPVaYIMVQpu9HJv1QNGPL-AIQ,1418
|
|
95
|
-
cognite_toolkit/_cdf_tk/commands/_base.py,sha256=
|
|
95
|
+
cognite_toolkit/_cdf_tk/commands/_base.py,sha256=1gl8Y-yqfedRMfdbwM3iPTIUIZriX1UvC1deLsJSJwM,2667
|
|
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
98
|
cognite_toolkit/_cdf_tk/commands/_download.py,sha256=OBKPM_HGGA1i32th1SAgkQM_81CUFvm39kGqBuOeeTs,6816
|
|
99
99
|
cognite_toolkit/_cdf_tk/commands/_profile.py,sha256=_4iX3AHAI6eLmRVUlWXCSvVHx1BZW2yDr_i2i9ECg6U,43120
|
|
100
100
|
cognite_toolkit/_cdf_tk/commands/_purge.py,sha256=RadQHsmkPez3fZ5HCP9b82o2_fBx8P_-bTo7prkvWXU,32525
|
|
101
|
-
cognite_toolkit/_cdf_tk/commands/_upload.py,sha256=
|
|
101
|
+
cognite_toolkit/_cdf_tk/commands/_upload.py,sha256=Y0k0q4Iu4F7g3Ax3slSrpll3AHxmODYNq55waHw4mzc,12473
|
|
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
|
|
104
104
|
cognite_toolkit/_cdf_tk/commands/auth.py,sha256=N6JgtF0_Qoh-xM8VlBb_IK1n0Lo5I7bIkIHmXm1l7ug,31638
|
|
105
|
-
cognite_toolkit/_cdf_tk/commands/build_cmd.py,sha256=
|
|
105
|
+
cognite_toolkit/_cdf_tk/commands/build_cmd.py,sha256=HTxklCGg6pcnoi7yImQrCjpBXHIw2mFojmZmgDQAsGk,30523
|
|
106
106
|
cognite_toolkit/_cdf_tk/commands/clean.py,sha256=2VWZKp_AZ49AaUCCpvc1kezFA_je6y--zjglccqxsjQ,14346
|
|
107
107
|
cognite_toolkit/_cdf_tk/commands/collect.py,sha256=zBMKhhvjOpuASMnwP0eeHRI02tANcvFEZgv0CQO1ECc,627
|
|
108
|
-
cognite_toolkit/_cdf_tk/commands/deploy.py,sha256=
|
|
108
|
+
cognite_toolkit/_cdf_tk/commands/deploy.py,sha256=QkPe3AGWIYKA-ju1rOyv9WWdwCGWyZFW5M_jc12Apxo,23083
|
|
109
109
|
cognite_toolkit/_cdf_tk/commands/dump_data.py,sha256=8l4M2kqV4DjiV5js5s7EbFVNxV0Np4ld8ogw19vaJp0,21804
|
|
110
110
|
cognite_toolkit/_cdf_tk/commands/dump_resource.py,sha256=ylAFST3GgkWT1Qa-JIzmQXbrQgNCB1UrptrBf3WsyvY,39658
|
|
111
111
|
cognite_toolkit/_cdf_tk/commands/featureflag.py,sha256=lgLMwuNIwFjvvKn1sNMunkq4VTwdNqXtrZfdGFTrNcI,968
|
|
112
112
|
cognite_toolkit/_cdf_tk/commands/init.py,sha256=OuAVPI_tAJrwFO81EwzKXAA8m6ne44wXsJ0KZyKwPAE,239
|
|
113
|
-
cognite_toolkit/_cdf_tk/commands/modules.py,sha256=
|
|
113
|
+
cognite_toolkit/_cdf_tk/commands/modules.py,sha256=gR4pLje6tSiWeW0glto0pb7BhlLee4jOv6YBNFsL_0g,42537
|
|
114
114
|
cognite_toolkit/_cdf_tk/commands/pull.py,sha256=2Zf6IOXxSxZ-5XkNE80FlrXBuNejAWrApAocu-kTrNw,39253
|
|
115
115
|
cognite_toolkit/_cdf_tk/commands/repo.py,sha256=MNy8MWphTklIZHvQOROCweq8_SYxGv6BaqnLpkFFnuk,3845
|
|
116
116
|
cognite_toolkit/_cdf_tk/commands/run.py,sha256=JyX9jLEQej9eRrHVCCNlw4GuF80qETSol3-T5CCofgw,37331
|
|
@@ -155,18 +155,19 @@ cognite_toolkit/_cdf_tk/cruds/_resource_cruds/three_d_model.py,sha256=YmzIQp1cjU
|
|
|
155
155
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/timeseries.py,sha256=VUvg6geF8d7N6PY1kMXs6v2xbWReiSbbRhQNqlAlhUM,23518
|
|
156
156
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/transformation.py,sha256=fFQNauXAz7zOYcwiN8gFvFtOIaXnulM4AeLgXWxoS48,33141
|
|
157
157
|
cognite_toolkit/_cdf_tk/cruds/_resource_cruds/workflow.py,sha256=OMHOxFY2ZLi0RTw0LmE_dTeOmFUh9LDIEDykyiCOCIw,26773
|
|
158
|
-
cognite_toolkit/_cdf_tk/data_classes/__init__.py,sha256=
|
|
158
|
+
cognite_toolkit/_cdf_tk/data_classes/__init__.py,sha256=4zL-zR3lgQTCWfcy28LK0HEcukQOndPEFXVqfYfdKHU,1720
|
|
159
159
|
cognite_toolkit/_cdf_tk/data_classes/_base.py,sha256=0jy9VrYIO6iRgOZIcRASv-xIQjU3QbMICffEEIqzx6A,2673
|
|
160
160
|
cognite_toolkit/_cdf_tk/data_classes/_build_files.py,sha256=ARZpzcpmcbtG5Jg391d7A-7MJCFeUqqiDfJlO14cvvI,953
|
|
161
161
|
cognite_toolkit/_cdf_tk/data_classes/_build_variables.py,sha256=XSp9_tHWXSNt4cph5OGJvRGeQBtWuvR49vWgub5s8P8,9086
|
|
162
162
|
cognite_toolkit/_cdf_tk/data_classes/_built_modules.py,sha256=Rak0-f0GgyQp_BwEW84YJ3N00F5_Be3twHuWb17Buq8,4724
|
|
163
163
|
cognite_toolkit/_cdf_tk/data_classes/_built_resources.py,sha256=Rx6Pl4mSuCRwKUmiuXtOW3H0bT5uspcLdDhVVeJt4zU,8515
|
|
164
|
-
cognite_toolkit/_cdf_tk/data_classes/_config_yaml.py,sha256=
|
|
164
|
+
cognite_toolkit/_cdf_tk/data_classes/_config_yaml.py,sha256=XIFFvW-7SdFPSoD0J2fhcr6gSo9B2CF90G-76A-MsSM,31566
|
|
165
165
|
cognite_toolkit/_cdf_tk/data_classes/_deploy_results.py,sha256=NKxJFHiLlKW-5odWs_fQcyHmsysd6VzZHtJXJ3JlOQA,8693
|
|
166
|
-
cognite_toolkit/_cdf_tk/data_classes/_module_directories.py,sha256=
|
|
166
|
+
cognite_toolkit/_cdf_tk/data_classes/_module_directories.py,sha256=7XB0vdvMSJq7MyXjzNwlbv2Zd3i-OyyvgcOvoO4_GFQ,12259
|
|
167
167
|
cognite_toolkit/_cdf_tk/data_classes/_module_resources.py,sha256=9I_2IGNbaiWGWDv7907TWYLTOJog6BdM65l3VihOsiA,9199
|
|
168
168
|
cognite_toolkit/_cdf_tk/data_classes/_module_toml.py,sha256=aIJAszILhevbBsd-MPdNKwlkAXO3LttozC0SlryvR0Y,2735
|
|
169
169
|
cognite_toolkit/_cdf_tk/data_classes/_packages.py,sha256=RPAi54GCBwMZFAA4XgIa1rGoQY4LiCC3ICl9GQpF8lI,4837
|
|
170
|
+
cognite_toolkit/_cdf_tk/data_classes/_tracking_info.py,sha256=tBWC_SVu87BRwgSmK3KWtlh03KuDIaAt09f7iYwwfX4,2001
|
|
170
171
|
cognite_toolkit/_cdf_tk/data_classes/_yaml_comments.py,sha256=zfuDu9aAsb1ExeZBAJIqVaoqIZ050tO_oh3dApzlDwY,4937
|
|
171
172
|
cognite_toolkit/_cdf_tk/prototypes/import_app.py,sha256=7dy852cBlHI2RQF1MidSmxl0jPBxekGWXnd2VtI7QFI,1899
|
|
172
173
|
cognite_toolkit/_cdf_tk/prototypes/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -227,18 +228,18 @@ cognite_toolkit/_cdf_tk/resource_classes/robotics/location.py,sha256=dbc9HT-bc2Q
|
|
|
227
228
|
cognite_toolkit/_cdf_tk/resource_classes/robotics/map.py,sha256=j77z7CzCMiMj8r94BdUKCum9EuZRUjaSlUAy9K9DL_Q,942
|
|
228
229
|
cognite_toolkit/_cdf_tk/storageio/__init__.py,sha256=aM-skaPnKTH1B7HG0faeTUNf7u1b-sT8l7hh5JRZ1E8,2288
|
|
229
230
|
cognite_toolkit/_cdf_tk/storageio/_applications.py,sha256=bhyG1d2_9duPkX-otC2brVcpChvdXSPkYhBHS5T_72g,4343
|
|
230
|
-
cognite_toolkit/_cdf_tk/storageio/_asset_centric.py,sha256=
|
|
231
|
-
cognite_toolkit/_cdf_tk/storageio/_base.py,sha256=
|
|
231
|
+
cognite_toolkit/_cdf_tk/storageio/_asset_centric.py,sha256=Rhy64zUW4oxacq_vYomDeTRPmF6Vx-1mkYAFAqJE9vk,28312
|
|
232
|
+
cognite_toolkit/_cdf_tk/storageio/_base.py,sha256=NWXPdgzUnpBiav5Hi8XGHkWU9QiMjNzBQTxMcuxF-LA,11017
|
|
232
233
|
cognite_toolkit/_cdf_tk/storageio/_data_classes.py,sha256=s3TH04BJ1q7rXndRhEbVMEnoOXjxrGg4n-w9Z5uUL-o,3480
|
|
233
234
|
cognite_toolkit/_cdf_tk/storageio/_instances.py,sha256=_tKOdlo7tMJoh7y-47o7sySfDMRa-G-AFVprmzjn3EQ,9311
|
|
234
|
-
cognite_toolkit/_cdf_tk/storageio/_raw.py,sha256=
|
|
235
|
+
cognite_toolkit/_cdf_tk/storageio/_raw.py,sha256=gU4muTo5MGOu2FrxwQz5XX21m1rGS_ZsUwWOC8KDrkY,3839
|
|
235
236
|
cognite_toolkit/_cdf_tk/storageio/selectors/__init__.py,sha256=fXzR99mN8wDVkaH9fstoiyIfYajXxeM8x3ZFeQdkIUI,1333
|
|
236
237
|
cognite_toolkit/_cdf_tk/storageio/selectors/_asset_centric.py,sha256=7Iv_ccVX6Vzt3ZLFZ0Er3hN92iEsFTm9wgF-yermOWE,1467
|
|
237
238
|
cognite_toolkit/_cdf_tk/storageio/selectors/_base.py,sha256=FsHF63HIcVstvXPGLJ2WeDiEIC7JUVHXfhBtbJk-dF8,2440
|
|
238
239
|
cognite_toolkit/_cdf_tk/storageio/selectors/_canvas.py,sha256=fs0i5rI13x6IStOPFQ3E-n8ey1eoV_QORD1-RtPF4A4,182
|
|
239
240
|
cognite_toolkit/_cdf_tk/storageio/selectors/_charts.py,sha256=vcSjubTSd6_x3bA72vqk-9enp35V_opk6ZtzV2ZE_UQ,602
|
|
240
241
|
cognite_toolkit/_cdf_tk/storageio/selectors/_instances.py,sha256=NCFSJrAw52bNX6UTfOali8PvNjlqHnvxzL0hYBr7ZmA,4934
|
|
241
|
-
cognite_toolkit/_cdf_tk/storageio/selectors/_raw.py,sha256=
|
|
242
|
+
cognite_toolkit/_cdf_tk/storageio/selectors/_raw.py,sha256=sZq9C4G9DMe3S46_usKet0FphQ6ow7cWM_PfXrEAakk,503
|
|
242
243
|
cognite_toolkit/_cdf_tk/tk_warnings/__init__.py,sha256=U9bT-G2xKrX6mmtZ7nZ1FfQeCjNKfKP_p7pev90dwOE,2316
|
|
243
244
|
cognite_toolkit/_cdf_tk/tk_warnings/base.py,sha256=cX8TCmb56gqx3lc7dankXuqpm5HGASJ4wTb07-MCJWs,4401
|
|
244
245
|
cognite_toolkit/_cdf_tk/tk_warnings/fileread.py,sha256=d2Kx6YyLmCkyFNjK8MO6eKGceCIEaFLZ4LYcG-EjnuM,8947
|
|
@@ -269,10 +270,10 @@ cognite_toolkit/_cdf_tk/utils/text.py,sha256=EpIXjaQ5C5q5fjbUjAW7tncXpdJfiQeV7CY
|
|
|
269
270
|
cognite_toolkit/_cdf_tk/utils/thread_safe_dict.py,sha256=NbRHcZvWpF9xHP5OkOMGFpxrPNbi0Q3Eea6PUNbGlt4,3426
|
|
270
271
|
cognite_toolkit/_cdf_tk/utils/useful_types.py,sha256=tPZOcK1PR1hNogMCgF863APMK6p3528t5kKaKbVl0-s,1352
|
|
271
272
|
cognite_toolkit/_cdf_tk/utils/validate_access.py,sha256=1puswcpgEDNCwdk91dhLqCBSu_aaUAd3Hsw21d-YVFs,21955
|
|
272
|
-
cognite_toolkit/_cdf_tk/utils/fileio/__init__.py,sha256=
|
|
273
|
+
cognite_toolkit/_cdf_tk/utils/fileio/__init__.py,sha256=ts5kYu_1Ks7xjnM6pIrVUrZe0nkYI6euYXeE4ox34xk,1199
|
|
273
274
|
cognite_toolkit/_cdf_tk/utils/fileio/_base.py,sha256=MpWaD3lR9vrJ-kGzTiDOtChXhvFD7-xrP-Pzp7vjnLY,756
|
|
274
275
|
cognite_toolkit/_cdf_tk/utils/fileio/_compression.py,sha256=8BAPgg5OKc3vkEEkqOvYsuyh12iXVNuEmC0omWwyJNQ,2355
|
|
275
|
-
cognite_toolkit/_cdf_tk/utils/fileio/_readers.py,sha256=
|
|
276
|
+
cognite_toolkit/_cdf_tk/utils/fileio/_readers.py,sha256=77Uq5r0pnD8gXLDVPzLT-1VPfzyOK7TZk85BtWxW7DQ,11613
|
|
276
277
|
cognite_toolkit/_cdf_tk/utils/fileio/_writers.py,sha256=ghNGBZjkISAlbxe8o5YWWloLXG9QKOtF_qGA9JkvYss,17712
|
|
277
278
|
cognite_toolkit/_cdf_tk/utils/http_client/__init__.py,sha256=H1T-cyIoVaPL4MvN1IuG-cHgj-cqB7eszu2kIN939lw,813
|
|
278
279
|
cognite_toolkit/_cdf_tk/utils/http_client/_client.py,sha256=zsN5eP1spgMkIRN6qeQ-djAohJVVuacpD2fnQh5QYx0,10916
|
|
@@ -284,13 +285,13 @@ cognite_toolkit/_repo_files/.gitignore,sha256=ip9kf9tcC5OguF4YF4JFEApnKYw0nG0vPi
|
|
|
284
285
|
cognite_toolkit/_repo_files/AzureDevOps/.devops/README.md,sha256=OLA0D7yCX2tACpzvkA0IfkgQ4_swSd-OlJ1tYcTBpsA,240
|
|
285
286
|
cognite_toolkit/_repo_files/AzureDevOps/.devops/deploy-pipeline.yml,sha256=brULcs8joAeBC_w_aoWjDDUHs3JheLMIR9ajPUK96nc,693
|
|
286
287
|
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=
|
|
288
|
+
cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml,sha256=3sYDml0HnE0_ryoemce1AIr0skHCm5i4SthSM_3BRDA,667
|
|
289
|
+
cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml,sha256=2IMERh0DGL37Fs0X4P4wuiEN2y29gGqtDX704zitNi0,2430
|
|
290
|
+
cognite_toolkit/_resources/cdf.toml,sha256=mpGJ2GDQJB63ZDiAsHxrRrrgpNjD-HLIUIf8zJRJjaw,487
|
|
290
291
|
cognite_toolkit/demo/__init__.py,sha256=-m1JoUiwRhNCL18eJ6t7fZOL7RPfowhCuqhYFtLgrss,72
|
|
291
292
|
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.
|
|
293
|
+
cognite_toolkit-0.6.88.dist-info/METADATA,sha256=Ubje2tHMnCHTWlxk6Vdg2WJP8ocjbOGL4Tkoy-44QDY,4501
|
|
294
|
+
cognite_toolkit-0.6.88.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
295
|
+
cognite_toolkit-0.6.88.dist-info/entry_points.txt,sha256=JlR7MH1_UMogC3QOyN4-1l36VbrCX9xUdQoHGkuJ6-4,83
|
|
296
|
+
cognite_toolkit-0.6.88.dist-info/licenses/LICENSE,sha256=CW0DRcx5tL-pCxLEN7ts2S9g2sLRAsWgHVEX4SN9_Mc,752
|
|
297
|
+
cognite_toolkit-0.6.88.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|