cognite-toolkit 0.7.39__py3-none-any.whl → 0.7.51__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.
Files changed (261) hide show
  1. cognite_toolkit/_cdf_tk/apps/_download_app.py +1 -1
  2. cognite_toolkit/_cdf_tk/apps/_dump_app.py +1 -1
  3. cognite_toolkit/_cdf_tk/apps/_migrate_app.py +6 -6
  4. cognite_toolkit/_cdf_tk/builders/_function.py +81 -9
  5. cognite_toolkit/_cdf_tk/builders/_raw.py +1 -1
  6. cognite_toolkit/_cdf_tk/client/_resource_base.py +187 -0
  7. cognite_toolkit/_cdf_tk/client/_toolkit_client.py +37 -5
  8. cognite_toolkit/_cdf_tk/client/api/agents.py +107 -0
  9. cognite_toolkit/_cdf_tk/client/api/annotations.py +129 -0
  10. cognite_toolkit/_cdf_tk/client/api/assets.py +130 -0
  11. cognite_toolkit/_cdf_tk/client/api/containers.py +132 -0
  12. cognite_toolkit/_cdf_tk/client/api/data_models.py +137 -0
  13. cognite_toolkit/_cdf_tk/client/api/datasets.py +141 -0
  14. cognite_toolkit/_cdf_tk/client/api/events.py +129 -0
  15. cognite_toolkit/_cdf_tk/client/api/extraction_pipelines.py +148 -0
  16. cognite_toolkit/_cdf_tk/client/api/filemetadata.py +176 -0
  17. cognite_toolkit/_cdf_tk/client/api/function_schedules.py +115 -0
  18. cognite_toolkit/_cdf_tk/client/api/functions.py +113 -0
  19. cognite_toolkit/_cdf_tk/client/api/graphql_data_models.py +167 -0
  20. cognite_toolkit/_cdf_tk/client/api/groups.py +121 -0
  21. cognite_toolkit/_cdf_tk/client/api/hosted_extractor_destinations.py +131 -0
  22. cognite_toolkit/_cdf_tk/client/api/hosted_extractor_jobs.py +122 -0
  23. cognite_toolkit/_cdf_tk/client/api/hosted_extractor_mappings.py +129 -0
  24. cognite_toolkit/_cdf_tk/client/api/hosted_extractor_sources.py +136 -0
  25. cognite_toolkit/_cdf_tk/client/api/hosted_extractors.py +23 -0
  26. cognite_toolkit/_cdf_tk/client/api/infield.py +8 -8
  27. cognite_toolkit/_cdf_tk/client/api/instances.py +139 -0
  28. cognite_toolkit/_cdf_tk/client/api/labels.py +125 -0
  29. cognite_toolkit/_cdf_tk/client/api/legacy/canvas.py +3 -3
  30. cognite_toolkit/_cdf_tk/client/api/legacy/charts.py +1 -1
  31. cognite_toolkit/_cdf_tk/client/api/legacy/extended_data_modeling.py +1 -1
  32. cognite_toolkit/_cdf_tk/client/api/legacy/extended_files.py +2 -2
  33. cognite_toolkit/_cdf_tk/client/api/legacy/extended_functions.py +1 -1
  34. cognite_toolkit/_cdf_tk/client/api/legacy/extended_raw.py +1 -1
  35. cognite_toolkit/_cdf_tk/client/api/legacy/extended_timeseries.py +2 -2
  36. cognite_toolkit/_cdf_tk/client/api/legacy/location_filters.py +1 -1
  37. cognite_toolkit/_cdf_tk/client/api/legacy/robotics/capabilities.py +1 -1
  38. cognite_toolkit/_cdf_tk/client/api/legacy/robotics/data_postprocessing.py +1 -1
  39. cognite_toolkit/_cdf_tk/client/api/legacy/robotics/frames.py +1 -1
  40. cognite_toolkit/_cdf_tk/client/api/legacy/robotics/locations.py +1 -1
  41. cognite_toolkit/_cdf_tk/client/api/legacy/robotics/maps.py +1 -1
  42. cognite_toolkit/_cdf_tk/client/api/legacy/robotics/robots.py +1 -1
  43. cognite_toolkit/_cdf_tk/client/api/legacy/search_config.py +1 -1
  44. cognite_toolkit/_cdf_tk/client/api/location_filters.py +177 -0
  45. cognite_toolkit/_cdf_tk/client/api/migration.py +1 -1
  46. cognite_toolkit/_cdf_tk/client/api/project.py +2 -2
  47. cognite_toolkit/_cdf_tk/client/api/raw.py +204 -0
  48. cognite_toolkit/_cdf_tk/client/api/relationships.py +133 -0
  49. cognite_toolkit/_cdf_tk/client/api/robotics.py +19 -0
  50. cognite_toolkit/_cdf_tk/client/api/robotics_capabilities.py +127 -0
  51. cognite_toolkit/_cdf_tk/client/api/robotics_data_postprocessing.py +138 -0
  52. cognite_toolkit/_cdf_tk/client/api/robotics_frames.py +122 -0
  53. cognite_toolkit/_cdf_tk/client/api/robotics_locations.py +127 -0
  54. cognite_toolkit/_cdf_tk/client/api/robotics_maps.py +122 -0
  55. cognite_toolkit/_cdf_tk/client/api/robotics_robots.py +122 -0
  56. cognite_toolkit/_cdf_tk/client/api/search_config.py +101 -0
  57. cognite_toolkit/_cdf_tk/client/api/security_categories.py +94 -0
  58. cognite_toolkit/_cdf_tk/client/api/sequences.py +133 -0
  59. cognite_toolkit/_cdf_tk/client/api/simulator_models.py +154 -0
  60. cognite_toolkit/_cdf_tk/client/api/simulators.py +8 -0
  61. cognite_toolkit/_cdf_tk/client/api/spaces.py +117 -0
  62. cognite_toolkit/_cdf_tk/client/api/streams.py +65 -57
  63. cognite_toolkit/_cdf_tk/client/api/three_d.py +300 -283
  64. cognite_toolkit/_cdf_tk/client/api/timeseries.py +137 -0
  65. cognite_toolkit/_cdf_tk/client/api/token.py +1 -1
  66. cognite_toolkit/_cdf_tk/client/api/transformations.py +146 -0
  67. cognite_toolkit/_cdf_tk/client/api/views.py +139 -0
  68. cognite_toolkit/_cdf_tk/client/api/workflow_triggers.py +128 -0
  69. cognite_toolkit/_cdf_tk/client/api/workflow_versions.py +138 -0
  70. cognite_toolkit/_cdf_tk/client/api/workflows.py +119 -0
  71. cognite_toolkit/_cdf_tk/client/cdf_client/__init__.py +10 -0
  72. cognite_toolkit/_cdf_tk/client/cdf_client/api.py +358 -0
  73. cognite_toolkit/_cdf_tk/client/cdf_client/responses.py +38 -0
  74. cognite_toolkit/_cdf_tk/{utils → client}/http_client/__init__.py +9 -7
  75. cognite_toolkit/_cdf_tk/{utils → client}/http_client/_client.py +23 -14
  76. cognite_toolkit/_cdf_tk/{utils → client}/http_client/_data_classes.py +12 -2
  77. cognite_toolkit/_cdf_tk/client/http_client/_data_classes2.py +151 -0
  78. cognite_toolkit/_cdf_tk/client/http_client/_exception.py +13 -0
  79. cognite_toolkit/_cdf_tk/client/http_client/_item_classes.py +118 -0
  80. cognite_toolkit/_cdf_tk/client/request_classes/base.py +19 -0
  81. cognite_toolkit/_cdf_tk/client/request_classes/filters.py +113 -0
  82. cognite_toolkit/_cdf_tk/client/request_classes/graphql.py +28 -0
  83. cognite_toolkit/_cdf_tk/client/resource_classes/agent.py +130 -0
  84. cognite_toolkit/_cdf_tk/client/resource_classes/annotation.py +79 -0
  85. cognite_toolkit/_cdf_tk/client/resource_classes/apm_config.py +128 -0
  86. cognite_toolkit/_cdf_tk/client/resource_classes/asset.py +47 -0
  87. cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/charts_data.py +1 -1
  88. cognite_toolkit/_cdf_tk/client/resource_classes/cognite_file.py +53 -0
  89. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/__init__.py +168 -0
  90. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_constraints.py +37 -0
  91. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_container.py +50 -0
  92. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_data_model.py +73 -0
  93. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_data_types.py +116 -0
  94. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_indexes.py +26 -0
  95. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_instance.py +154 -0
  96. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_references.py +86 -0
  97. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_space.py +26 -0
  98. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_view.py +143 -0
  99. cognite_toolkit/_cdf_tk/client/resource_classes/data_modeling/_view_property.py +152 -0
  100. cognite_toolkit/_cdf_tk/client/resource_classes/dataset.py +35 -0
  101. cognite_toolkit/_cdf_tk/client/resource_classes/event.py +40 -0
  102. cognite_toolkit/_cdf_tk/client/resource_classes/extraction_pipeline.py +59 -0
  103. cognite_toolkit/_cdf_tk/client/resource_classes/filemetadata.py +52 -0
  104. cognite_toolkit/_cdf_tk/client/resource_classes/function.py +53 -0
  105. cognite_toolkit/_cdf_tk/client/resource_classes/function_schedule.py +65 -0
  106. cognite_toolkit/_cdf_tk/client/resource_classes/graphql_data_model.py +40 -0
  107. cognite_toolkit/_cdf_tk/client/resource_classes/group/__init__.py +187 -0
  108. cognite_toolkit/_cdf_tk/client/resource_classes/group/_constants.py +2 -0
  109. cognite_toolkit/_cdf_tk/client/resource_classes/group/acls.py +653 -0
  110. cognite_toolkit/_cdf_tk/client/resource_classes/group/capability.py +56 -0
  111. cognite_toolkit/_cdf_tk/client/resource_classes/group/group.py +63 -0
  112. cognite_toolkit/_cdf_tk/client/resource_classes/group/scopes.py +166 -0
  113. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_destination.py +34 -0
  114. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_job.py +134 -0
  115. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_mapping.py +72 -0
  116. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/__init__.py +63 -0
  117. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_auth.py +63 -0
  118. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_base.py +26 -0
  119. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_certificate.py +20 -0
  120. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_eventhub.py +31 -0
  121. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_kafka.py +53 -0
  122. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_mqtt.py +36 -0
  123. cognite_toolkit/_cdf_tk/client/resource_classes/hosted_extractor_source/_rest.py +49 -0
  124. cognite_toolkit/_cdf_tk/client/resource_classes/identifiers.py +59 -0
  125. cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/infield.py +1 -1
  126. cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/instance_api.py +35 -1
  127. cognite_toolkit/_cdf_tk/client/resource_classes/label.py +27 -0
  128. cognite_toolkit/_cdf_tk/client/resource_classes/legacy/__init__.py +0 -0
  129. cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/canvas.py +48 -15
  130. cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/charts.py +1 -1
  131. cognite_toolkit/_cdf_tk/client/resource_classes/location_filter.py +84 -0
  132. cognite_toolkit/_cdf_tk/client/resource_classes/raw.py +44 -0
  133. cognite_toolkit/_cdf_tk/client/resource_classes/relationship.py +49 -0
  134. cognite_toolkit/_cdf_tk/client/resource_classes/resource_view_mapping.py +38 -0
  135. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/__init__.py +37 -0
  136. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_capability.py +53 -0
  137. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_common.py +34 -0
  138. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_data_post_processing.py +49 -0
  139. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_frame.py +46 -0
  140. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_location.py +36 -0
  141. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_map.py +65 -0
  142. cognite_toolkit/_cdf_tk/client/resource_classes/robotics/_robot.py +58 -0
  143. cognite_toolkit/_cdf_tk/client/resource_classes/search_config.py +54 -0
  144. cognite_toolkit/_cdf_tk/client/resource_classes/securitycategory.py +24 -0
  145. cognite_toolkit/_cdf_tk/client/resource_classes/sequence.py +45 -0
  146. cognite_toolkit/_cdf_tk/client/resource_classes/sequence_rows.py +56 -0
  147. cognite_toolkit/_cdf_tk/client/resource_classes/simulator_model.py +50 -0
  148. cognite_toolkit/_cdf_tk/client/resource_classes/streamlit_.py +71 -0
  149. cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/streams.py +9 -26
  150. cognite_toolkit/_cdf_tk/client/resource_classes/three_d.py +135 -0
  151. cognite_toolkit/_cdf_tk/client/resource_classes/timeseries.py +52 -0
  152. cognite_toolkit/_cdf_tk/client/resource_classes/transformation.py +140 -0
  153. cognite_toolkit/_cdf_tk/client/resource_classes/workflow.py +27 -0
  154. cognite_toolkit/_cdf_tk/client/resource_classes/workflow_trigger.py +63 -0
  155. cognite_toolkit/_cdf_tk/client/resource_classes/workflow_version.py +155 -0
  156. cognite_toolkit/_cdf_tk/client/testing.py +31 -2
  157. cognite_toolkit/_cdf_tk/commands/_migrate/command.py +103 -108
  158. cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py +22 -15
  159. cognite_toolkit/_cdf_tk/commands/_migrate/creators.py +1 -1
  160. cognite_toolkit/_cdf_tk/commands/_migrate/data_classes.py +11 -10
  161. cognite_toolkit/_cdf_tk/commands/_migrate/data_mapper.py +148 -57
  162. cognite_toolkit/_cdf_tk/commands/_migrate/default_mappings.py +1 -1
  163. cognite_toolkit/_cdf_tk/commands/_migrate/issues.py +22 -39
  164. cognite_toolkit/_cdf_tk/commands/_migrate/migration_io.py +29 -27
  165. cognite_toolkit/_cdf_tk/commands/_profile.py +1 -1
  166. cognite_toolkit/_cdf_tk/commands/_purge.py +8 -8
  167. cognite_toolkit/_cdf_tk/commands/_upload.py +1 -1
  168. cognite_toolkit/_cdf_tk/commands/build_cmd.py +12 -2
  169. cognite_toolkit/_cdf_tk/commands/build_v2/_module_parser.py +138 -0
  170. cognite_toolkit/_cdf_tk/commands/build_v2/_modules_parser.py +163 -0
  171. cognite_toolkit/_cdf_tk/commands/build_v2/build_cmd.py +83 -96
  172. cognite_toolkit/_cdf_tk/commands/build_v2/{build_input.py → build_parameters.py} +8 -22
  173. cognite_toolkit/_cdf_tk/commands/build_v2/data_classes/_modules.py +27 -0
  174. cognite_toolkit/_cdf_tk/commands/build_v2/data_classes/_resource.py +22 -0
  175. cognite_toolkit/_cdf_tk/commands/dump_resource.py +4 -4
  176. cognite_toolkit/_cdf_tk/commands/pull.py +97 -2
  177. cognite_toolkit/_cdf_tk/commands/run.py +1 -1
  178. cognite_toolkit/_cdf_tk/cruds/__init__.py +16 -6
  179. cognite_toolkit/_cdf_tk/cruds/_data_cruds.py +9 -5
  180. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/__init__.py +2 -0
  181. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/auth.py +6 -2
  182. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/classic.py +70 -89
  183. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/configuration.py +1 -1
  184. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/datamodel.py +1 -1
  185. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/extraction_pipeline.py +1 -1
  186. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/fieldops.py +14 -7
  187. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/file.py +50 -59
  188. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/function.py +1 -1
  189. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/industrial_tool.py +1 -1
  190. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/location.py +4 -3
  191. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/migration.py +1 -1
  192. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/raw.py +6 -1
  193. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/relationship.py +5 -4
  194. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/robotics.py +1 -1
  195. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/simulators.py +122 -0
  196. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/streams.py +15 -31
  197. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/timeseries.py +42 -47
  198. cognite_toolkit/_cdf_tk/cruds/_resource_cruds/transformation.py +1 -1
  199. cognite_toolkit/_cdf_tk/data_classes/__init__.py +3 -0
  200. cognite_toolkit/_cdf_tk/data_classes/_issues.py +36 -0
  201. cognite_toolkit/_cdf_tk/data_classes/_module_directories.py +2 -1
  202. cognite_toolkit/_cdf_tk/data_classes/_tracking_info.py +4 -0
  203. cognite_toolkit/_cdf_tk/feature_flags.py +8 -0
  204. cognite_toolkit/_cdf_tk/resource_classes/__init__.py +2 -0
  205. cognite_toolkit/_cdf_tk/resource_classes/capabilities.py +6 -0
  206. cognite_toolkit/_cdf_tk/resource_classes/search_config.py +1 -1
  207. cognite_toolkit/_cdf_tk/resource_classes/simulator_model.py +17 -0
  208. cognite_toolkit/_cdf_tk/resource_classes/workflow_version.py +13 -4
  209. cognite_toolkit/_cdf_tk/storageio/_applications.py +53 -15
  210. cognite_toolkit/_cdf_tk/storageio/_asset_centric.py +117 -107
  211. cognite_toolkit/_cdf_tk/storageio/_base.py +3 -1
  212. cognite_toolkit/_cdf_tk/storageio/_datapoints.py +7 -7
  213. cognite_toolkit/_cdf_tk/storageio/_file_content.py +64 -54
  214. cognite_toolkit/_cdf_tk/storageio/_instances.py +1 -1
  215. cognite_toolkit/_cdf_tk/storageio/_raw.py +1 -1
  216. cognite_toolkit/_cdf_tk/storageio/logger.py +162 -0
  217. cognite_toolkit/_cdf_tk/tk_warnings/__init__.py +2 -0
  218. cognite_toolkit/_cdf_tk/tk_warnings/fileread.py +20 -0
  219. cognite_toolkit/_cdf_tk/utils/__init__.py +11 -1
  220. cognite_toolkit/_cdf_tk/utils/cdf.py +1 -1
  221. cognite_toolkit/_cdf_tk/utils/interactive_select.py +8 -6
  222. cognite_toolkit/_cdf_tk/utils/modules.py +7 -0
  223. cognite_toolkit/_cdf_tk/utils/pip_validator.py +96 -0
  224. cognite_toolkit/_cdf_tk/utils/useful_types.py +4 -7
  225. cognite_toolkit/_cdf_tk/utils/useful_types2.py +14 -0
  226. cognite_toolkit/_repo_files/GitHub/.github/workflows/deploy.yaml +1 -1
  227. cognite_toolkit/_repo_files/GitHub/.github/workflows/dry-run.yaml +1 -1
  228. cognite_toolkit/_resources/cdf.toml +1 -1
  229. cognite_toolkit/_version.py +1 -1
  230. {cognite_toolkit-0.7.39.dist-info → cognite_toolkit-0.7.51.dist-info}/METADATA +13 -3
  231. cognite_toolkit-0.7.51.dist-info/RECORD +445 -0
  232. {cognite_toolkit-0.7.39.dist-info → cognite_toolkit-0.7.51.dist-info}/WHEEL +2 -2
  233. cognite_toolkit/_cdf_tk/client/data_classes/api_classes.py +0 -30
  234. cognite_toolkit/_cdf_tk/client/data_classes/base.py +0 -67
  235. cognite_toolkit/_cdf_tk/client/data_classes/three_d.py +0 -112
  236. cognite_toolkit/_cdf_tk/commands/build_v2/build_issues.py +0 -27
  237. cognite_toolkit/_cdf_tk/utils/http_client/_data_classes2.py +0 -247
  238. cognite_toolkit/_cdf_tk/utils/http_client/_exception.py +0 -4
  239. cognite_toolkit-0.7.39.dist-info/RECORD +0 -322
  240. /cognite_toolkit/_cdf_tk/{utils → client}/http_client/_tracker.py +0 -0
  241. /cognite_toolkit/_cdf_tk/client/{data_classes → request_classes}/__init__.py +0 -0
  242. /cognite_toolkit/_cdf_tk/client/{data_classes/legacy → resource_classes}/__init__.py +0 -0
  243. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/capabilities.py +0 -0
  244. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/apm_config_v1.py +0 -0
  245. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/extendable_cognite_file.py +0 -0
  246. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/extended_filemetadata.py +0 -0
  247. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/extended_filemetdata.py +0 -0
  248. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/extended_timeseries.py +0 -0
  249. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/functions.py +0 -0
  250. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/graphql_data_models.py +0 -0
  251. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/instances.py +0 -0
  252. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/location_filters.py +0 -0
  253. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/migration.py +0 -0
  254. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/pending_instances_ids.py +0 -0
  255. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/project.py +0 -0
  256. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/raw.py +0 -0
  257. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/robotics.py +0 -0
  258. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/search_config.py +0 -0
  259. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/sequences.py +0 -0
  260. /cognite_toolkit/_cdf_tk/client/{data_classes → resource_classes}/legacy/streamlit_.py +0 -0
  261. {cognite_toolkit-0.7.39.dist-info → cognite_toolkit-0.7.51.dist-info}/entry_points.txt +0 -0
@@ -2,16 +2,13 @@ import json
2
2
  from collections.abc import Hashable, Iterable, Sequence
3
3
  from itertools import zip_longest
4
4
  from pathlib import Path
5
- from typing import Any, Literal, cast, final
5
+ from typing import Any, Literal, final
6
6
 
7
7
  from cognite.client.data_classes import (
8
8
  DatapointSubscription,
9
9
  DatapointSubscriptionList,
10
10
  DataPointSubscriptionUpdate,
11
11
  DataPointSubscriptionWrite,
12
- TimeSeries,
13
- TimeSeriesList,
14
- TimeSeriesWrite,
15
12
  )
16
13
  from cognite.client.data_classes.capabilities import (
17
14
  Capability,
@@ -23,6 +20,9 @@ from cognite.client.data_classes.datapoints_subscriptions import TimeSeriesIDLis
23
20
  from cognite.client.exceptions import CogniteAPIError, CogniteNotFoundError
24
21
  from cognite.client.utils.useful_types import SequenceNotStr
25
22
 
23
+ from cognite_toolkit._cdf_tk.client.request_classes.filters import ClassicFilter
24
+ from cognite_toolkit._cdf_tk.client.resource_classes.identifiers import ExternalId, InternalOrExternalId
25
+ from cognite_toolkit._cdf_tk.client.resource_classes.timeseries import TimeSeriesRequest, TimeSeriesResponse
26
26
  from cognite_toolkit._cdf_tk.constants import MAX_TIMESTAMP_MS, MIN_TIMESTAMP_MS
27
27
  from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceContainerCRUD, ResourceCRUD
28
28
  from cognite_toolkit._cdf_tk.exceptions import (
@@ -41,11 +41,11 @@ from .data_organization import DataSetsCRUD
41
41
 
42
42
 
43
43
  @final
44
- class TimeSeriesCRUD(ResourceContainerCRUD[str, TimeSeriesWrite, TimeSeries]):
44
+ class TimeSeriesCRUD(ResourceContainerCRUD[ExternalId, TimeSeriesRequest, TimeSeriesResponse]):
45
45
  item_name = "datapoints"
46
46
  folder_name = "timeseries"
47
- resource_cls = TimeSeries
48
- resource_write_cls = TimeSeriesWrite
47
+ resource_cls = TimeSeriesResponse
48
+ resource_write_cls = TimeSeriesRequest
49
49
  yaml_cls = TimeSeriesYAML
50
50
  kind = "TimeSeries"
51
51
  dependencies = frozenset({DataSetsCRUD, GroupAllScopedCRUD, AssetCRUD})
@@ -57,7 +57,7 @@ class TimeSeriesCRUD(ResourceContainerCRUD[str, TimeSeriesWrite, TimeSeries]):
57
57
 
58
58
  @classmethod
59
59
  def get_required_capability(
60
- cls, items: Sequence[TimeSeriesWrite] | None, read_only: bool
60
+ cls, items: Sequence[TimeSeriesRequest] | None, read_only: bool
61
61
  ) -> Capability | list[Capability]:
62
62
  if not items and items is not None:
63
63
  return []
@@ -72,22 +72,22 @@ class TimeSeriesCRUD(ResourceContainerCRUD[str, TimeSeriesWrite, TimeSeries]):
72
72
  return TimeSeriesAcl(actions, scope)
73
73
 
74
74
  @classmethod
75
- def get_id(cls, item: TimeSeries | TimeSeriesWrite | dict) -> str:
75
+ def get_id(cls, item: TimeSeriesRequest | TimeSeriesResponse | dict) -> ExternalId:
76
76
  if isinstance(item, dict):
77
- return item["externalId"]
77
+ return ExternalId(external_id=item["externalId"])
78
78
  if item.external_id is None:
79
79
  raise ToolkitRequiredValueError("TimeSeries must have external_id set.")
80
- return item.external_id
80
+ return ExternalId(external_id=item.external_id)
81
81
 
82
82
  @classmethod
83
- def get_internal_id(cls, item: TimeSeries | dict) -> int:
83
+ def get_internal_id(cls, item: TimeSeriesResponse | dict) -> int:
84
84
  if isinstance(item, dict):
85
85
  return item["id"]
86
86
  return item.id
87
87
 
88
88
  @classmethod
89
- def dump_id(cls, id: str) -> dict[str, Any]:
90
- return {"externalId": id}
89
+ def dump_id(cls, id: ExternalId) -> dict[str, Any]:
90
+ return id.dump()
91
91
 
92
92
  @classmethod
93
93
  def get_dependent_items(cls, item: dict) -> Iterable[tuple[type[ResourceCRUD], Hashable]]:
@@ -97,9 +97,9 @@ class TimeSeriesCRUD(ResourceContainerCRUD[str, TimeSeriesWrite, TimeSeries]):
97
97
  for security_category in item["securityCategoryNames"]:
98
98
  yield SecurityCategoryCRUD, security_category
99
99
  if "assetExternalId" in item:
100
- yield AssetCRUD, item["assetExternalId"]
100
+ yield AssetCRUD, ExternalId(external_id=item["assetExternalId"])
101
101
 
102
- def load_resource(self, resource: dict[str, Any], is_dry_run: bool = False) -> TimeSeriesWrite:
102
+ def load_resource(self, resource: dict[str, Any], is_dry_run: bool = False) -> TimeSeriesRequest:
103
103
  if ds_external_id := resource.pop("dataSetExternalId", None):
104
104
  resource["dataSetId"] = self.client.lookup.data_sets.id(ds_external_id, is_dry_run)
105
105
  if security_categories_names := resource.pop("securityCategoryNames", []):
@@ -108,10 +108,10 @@ class TimeSeriesCRUD(ResourceContainerCRUD[str, TimeSeriesWrite, TimeSeries]):
108
108
  )
109
109
  if asset_external_id := resource.pop("assetExternalId", None):
110
110
  resource["assetId"] = self.client.lookup.assets.id(asset_external_id, is_dry_run)
111
- return TimeSeriesWrite._load(resource)
111
+ return TimeSeriesRequest.model_validate(resource)
112
112
 
113
- def dump_resource(self, resource: TimeSeries, local: dict[str, Any] | None = None) -> dict[str, Any]:
114
- dumped = resource.as_write().dump()
113
+ def dump_resource(self, resource: TimeSeriesResponse, local: dict[str, Any] | None = None) -> dict[str, Any]:
114
+ dumped = resource.as_request_resource().dump()
115
115
  if data_set_id := dumped.pop("dataSetId", None):
116
116
  dumped["dataSetExternalId"] = self.client.lookup.data_sets.external_id(data_set_id)
117
117
  if security_categories := dumped.pop("securityCategories", []):
@@ -120,53 +120,48 @@ class TimeSeriesCRUD(ResourceContainerCRUD[str, TimeSeriesWrite, TimeSeries]):
120
120
  dumped["assetExternalId"] = self.client.lookup.assets.external_id(asset_id)
121
121
  return dumped
122
122
 
123
- def create(self, items: Sequence[TimeSeriesWrite]) -> TimeSeriesList:
124
- return self.client.time_series.create(items)
123
+ def create(self, items: Sequence[TimeSeriesRequest]) -> list[TimeSeriesResponse]:
124
+ return self.client.tool.timeseries.create(items)
125
125
 
126
- def retrieve(self, ids: SequenceNotStr[str | int]) -> TimeSeriesList:
127
- internal_ids, external_ids = self._split_ids(ids)
128
- return self.client.time_series.retrieve_multiple(
129
- ids=internal_ids, external_ids=external_ids, ignore_unknown_ids=True
130
- )
126
+ def retrieve(self, ids: SequenceNotStr[ExternalId]) -> list[TimeSeriesResponse]:
127
+ return self.client.tool.timeseries.retrieve(list(ids), ignore_unknown_ids=True)
131
128
 
132
- def update(self, items: Sequence[TimeSeriesWrite]) -> TimeSeriesList:
133
- return self.client.time_series.update(items, mode="replace")
129
+ def update(self, items: Sequence[TimeSeriesRequest]) -> list[TimeSeriesResponse]:
130
+ return self.client.tool.timeseries.update(items, mode="replace")
134
131
 
135
- def delete(self, ids: SequenceNotStr[str | int]) -> int:
136
- existing = self.retrieve(ids)
137
- if existing:
138
- self.client.time_series.delete(id=existing.as_ids(), ignore_unknown_ids=True)
139
- return len(existing)
132
+ def delete(self, ids: SequenceNotStr[InternalOrExternalId]) -> int:
133
+ if not ids:
134
+ return 0
135
+ self.client.tool.timeseries.delete(list(ids), ignore_unknown_ids=True)
136
+ return len(ids)
140
137
 
141
138
  def _iterate(
142
139
  self,
143
140
  data_set_external_id: str | None = None,
144
141
  space: str | None = None,
145
142
  parent_ids: list[Hashable] | None = None,
146
- ) -> Iterable[TimeSeries]:
147
- return iter(
148
- self.client.time_series(data_set_external_ids=[data_set_external_id] if data_set_external_id else None)
149
- )
143
+ ) -> Iterable[TimeSeriesResponse]:
144
+ filter_ = ClassicFilter.from_asset_subtree_and_data_sets(data_set_id=data_set_external_id)
145
+ for timeseries in self.client.tool.timeseries.iterate(filter=filter_, limit=None):
146
+ yield from timeseries
150
147
 
151
- def count(self, ids: str | dict[str, Any] | SequenceNotStr[str | dict[str, Any]] | None) -> int:
148
+ def count(self, ids: SequenceNotStr[ExternalId]) -> int:
152
149
  datapoints = self.client.time_series.data.retrieve(
153
- external_id=ids, # type: ignore[arg-type]
150
+ external_id=[id.external_id for id in ids],
154
151
  start=MIN_TIMESTAMP_MS,
155
152
  end=MAX_TIMESTAMP_MS + 1,
156
153
  aggregates="count",
157
154
  granularity="1000d",
158
155
  ignore_unknown_ids=True,
159
156
  )
160
- return sum(sum(data.count or []) for data in datapoints) # type: ignore[union-attr, misc, arg-type]
157
+ return sum(sum(data.count or []) for data in datapoints)
161
158
 
162
- def drop_data(self, ids: SequenceNotStr[str] | None) -> int:
159
+ def drop_data(self, ids: SequenceNotStr[ExternalId]) -> int:
163
160
  count = self.count(ids)
164
- existing = self.client.time_series.retrieve_multiple(
165
- external_ids=cast(SequenceNotStr[str], ids), ignore_unknown_ids=True
166
- ).as_external_ids()
167
- for external_id in existing:
161
+ existing = self.client.tool.timeseries.retrieve(list(ids), ignore_unknown_ids=True)
162
+ for ts in existing:
168
163
  self.client.time_series.data.delete_range(
169
- external_id=external_id, start=MIN_TIMESTAMP_MS, end=MAX_TIMESTAMP_MS + 1
164
+ external_id=ts.external_id, start=MIN_TIMESTAMP_MS, end=MAX_TIMESTAMP_MS + 1
170
165
  )
171
166
  return count
172
167
 
@@ -219,7 +214,7 @@ class DatapointSubscriptionCRUD(
219
214
  if "dataSetExternalId" in item:
220
215
  yield DataSetsCRUD, item["dataSetExternalId"]
221
216
  for timeseries_id in item.get("timeSeriesIds", []):
222
- yield TimeSeriesCRUD, timeseries_id
217
+ yield TimeSeriesCRUD, ExternalId(external_id=timeseries_id)
223
218
 
224
219
  @classmethod
225
220
  def get_required_capability(
@@ -65,7 +65,7 @@ from rich import print
65
65
  from rich.console import Console
66
66
 
67
67
  from cognite_toolkit._cdf_tk.client import ToolkitClient
68
- from cognite_toolkit._cdf_tk.client.data_classes.legacy.raw import RawDatabase, RawTable
68
+ from cognite_toolkit._cdf_tk.client.resource_classes.legacy.raw import RawDatabase, RawTable
69
69
  from cognite_toolkit._cdf_tk.constants import BUILD_FOLDER_ENCODING
70
70
  from cognite_toolkit._cdf_tk.cruds._base_cruds import ResourceCRUD
71
71
  from cognite_toolkit._cdf_tk.exceptions import (
@@ -29,6 +29,7 @@ from ._deploy_results import (
29
29
  ResourceDeployResult,
30
30
  UploadDeployResult,
31
31
  )
32
+ from ._issues import Issue, IssueList
32
33
  from ._module_directories import ModuleDirectories, ModuleLocation
33
34
  from ._module_resources import ModuleResources
34
35
  from ._packages import Package, Packages
@@ -56,6 +57,8 @@ __all__ = [
56
57
  "DeployResults",
57
58
  "Environment",
58
59
  "InitConfigYAML",
60
+ "Issue",
61
+ "IssueList",
59
62
  "ModuleDirectories",
60
63
  "ModuleLocation",
61
64
  "ModuleResources",
@@ -0,0 +1,36 @@
1
+ import sys
2
+ from collections import UserList
3
+
4
+ if sys.version_info >= (3, 11):
5
+ from typing import Self
6
+ else:
7
+ from typing_extensions import Self
8
+
9
+ from pydantic import BaseModel, Field
10
+
11
+ from cognite_toolkit._cdf_tk.tk_warnings import ToolkitWarning, WarningList
12
+
13
+ MODULE_ISSUE_CODE = "MOD"
14
+
15
+
16
+ class Issue(BaseModel):
17
+ """Base class for all issues"""
18
+
19
+ code: str
20
+ message: str | None = Field(default=None)
21
+
22
+
23
+ # temporary adapter to manage existing warnings
24
+ class IssueList(UserList[Issue]):
25
+ """List of build issues."""
26
+
27
+ @classmethod
28
+ def from_warning_list(cls, warning_list: WarningList[ToolkitWarning]) -> Self:
29
+ """Create a IssueList from a WarningList."""
30
+ return cls([Issue(code="WARN", message=warning.get_message()) for warning in warning_list])
31
+
32
+
33
+ class ModuleLoadingIssue(Issue):
34
+ """Issue with the loading of a module folder."""
35
+
36
+ code: str = "MOD_001"
@@ -8,7 +8,8 @@ from pathlib import Path
8
8
  from typing import Any, SupportsIndex, overload
9
9
 
10
10
  from cognite_toolkit._cdf_tk.constants import INDEX_PATTERN
11
- from cognite_toolkit._cdf_tk.utils import calculate_directory_hash, iterate_modules, resource_folder_from_path
11
+ from cognite_toolkit._cdf_tk.utils.hashing import calculate_directory_hash
12
+ from cognite_toolkit._cdf_tk.utils.modules import iterate_modules, resource_folder_from_path
12
13
 
13
14
  from ._module_toml import ModuleToml
14
15
 
@@ -32,6 +32,10 @@ class CommandTrackingInfo(BaseModel):
32
32
  downloaded_library_ids: set[str] = Field(default_factory=set, alias="downloadedLibraryIds")
33
33
  downloaded_package_ids: set[str] = Field(default_factory=set, alias="downloadedPackageIds")
34
34
  downloaded_module_ids: set[str] = Field(default_factory=set, alias="downloadedModuleIds")
35
+ function_validation_count: int = Field(default=0, alias="functionValidationCount")
36
+ function_validation_failures: int = Field(default=0, alias="functionValidationFailures")
37
+ function_validation_credential_errors: int = Field(default=0, alias="functionValidationCredentialErrors")
38
+ function_validation_time_ms: int = Field(default=0, alias="functionValidationTimeMs")
35
39
 
36
40
  def to_dict(self) -> dict[str, Any]:
37
41
  """Convert the tracking info to a dictionary for Mixpanel.
@@ -61,6 +61,14 @@ class Flags(Enum):
61
61
  visible=True,
62
62
  description="Enables extended upload to support uploading individual files",
63
63
  )
64
+ SIMULATORS = FlagMetadata(
65
+ visible=True,
66
+ description="Enables the support for simulator model resources",
67
+ )
68
+ FUNCTION_REQUIREMENTS_VALIDATION = FlagMetadata(
69
+ visible=True,
70
+ description="Enables validation of function requirements.txt during build using pip dry-run",
71
+ )
64
72
 
65
73
  def is_enabled(self) -> bool:
66
74
  return FeatureFlag.is_enabled(self)
@@ -40,6 +40,7 @@ from .robotics import RobotCapabilityYAML, RobotDataPostProcessingYAML, RobotFra
40
40
  from .search_config import SearchConfigYAML
41
41
  from .securitycategories import SecurityCategoriesYAML
42
42
  from .sequence import SequenceRowYAML, SequenceYAML
43
+ from .simulator_model import SimulatorModelYAML
43
44
  from .space import SpaceYAML
44
45
  from .streamlit_ import StreamlitYAML
45
46
  from .streams import StreamYAML
@@ -94,6 +95,7 @@ __all__ = [
94
95
  "SecurityCategoriesYAML",
95
96
  "SequenceRowYAML",
96
97
  "SequenceYAML",
98
+ "SimulatorModelYAML",
97
99
  "SpaceYAML",
98
100
  "StreamYAML",
99
101
  "StreamlitYAML",
@@ -510,6 +510,12 @@ class LegacyGenericsAcl(Capability):
510
510
  scope: AllScope
511
511
 
512
512
 
513
+ class SimulatorsAcl(Capability):
514
+ _capability_name = "simulatorsAcl"
515
+ actions: list[Literal["READ", "WRITE", "DELETE", "RUN", "MANAGE"]]
516
+ scope: AllScope | DataSetScope
517
+
518
+
513
519
  class StreamsAcl(Capability):
514
520
  _capability_name = "streamsAcl"
515
521
  actions: list[Literal["READ", "CREATE", "DELETE"]]
@@ -2,7 +2,7 @@ from typing import ClassVar
2
2
 
3
3
  from pydantic import Field
4
4
 
5
- from cognite_toolkit._cdf_tk.client.data_classes.legacy.search_config import SearchConfigWrite
5
+ from cognite_toolkit._cdf_tk.client.resource_classes.legacy.search_config import SearchConfigWrite
6
6
 
7
7
  from .base import BaseModelResource, ToolkitResource
8
8
 
@@ -0,0 +1,17 @@
1
+ from pydantic import Field
2
+
3
+ from .base import ToolkitResource
4
+
5
+
6
+ class SimulatorModelYAML(ToolkitResource):
7
+ """Simulator model YAML resource class.
8
+
9
+ Based on: https://api-docs.cognite.com/20230101/tag/Simulator-Models/operation/create_simulator_model_simulators_models_post
10
+ """
11
+
12
+ external_id: str = Field(description="External ID of the simulator model.", min_length=1, max_length=255)
13
+ simulator_external_id: str = Field(description="External id of the simulator.", min_length=1, max_length=50)
14
+ name: str = Field(description="The name of the simulator model.", min_length=1, max_length=50)
15
+ description: str | None = Field(None, description="Description of the simulator model.", max_length=500)
16
+ data_set_external_id: str = Field(description="The external ID of the dataset this simulator model belongs to.")
17
+ type: str = Field(description="The type of the simulator model.", min_length=1, max_length=50)
@@ -93,10 +93,19 @@ class DynamicTaskParameters(BaseModelResource):
93
93
  dynamic: DynamicRef = Field(description="Reference to another task to use as the definition for this task.")
94
94
 
95
95
 
96
- class SubworkflowRef(BaseModelResource):
97
- tasks: "WorkflowVersionId | list[Task]" = Field(
98
- description="Reference to the subworkflow to execute. This can be either a reference to an existing workflow version or an inline definition of tasks."
99
- )
96
+ class SubworkflowInlineTasks(BaseModelResource):
97
+ """Inline definition of tasks for a subworkflow."""
98
+
99
+ tasks: "list[Task]" = Field(description="Inline definition of tasks for the subworkflow.")
100
+
101
+
102
+ # SubworkflowRef can be either a reference to an existing workflow version OR an inline definition of tasks
103
+ SubworkflowRef = Annotated[
104
+ WorkflowVersionId | SubworkflowInlineTasks,
105
+ Field(
106
+ description="Reference to the subworkflow to execute. This can be either a reference to an existing workflow version (with workflowExternalId and version) or an inline definition of tasks."
107
+ ),
108
+ ]
100
109
 
101
110
 
102
111
  class SubworkflowTaskParameters(BaseModelResource):
@@ -1,16 +1,25 @@
1
1
  from collections.abc import Iterable, Sequence
2
+ from itertools import zip_longest
2
3
  from typing import Any
3
4
 
5
+ from pydantic import JsonValue
6
+
4
7
  from cognite_toolkit._cdf_tk.client import ToolkitClient
5
- from cognite_toolkit._cdf_tk.client.data_classes.legacy.canvas import (
8
+ from cognite_toolkit._cdf_tk.client.http_client import (
9
+ HTTPClient,
10
+ HTTPMessage,
11
+ HTTPResult2,
12
+ RequestMessage2,
13
+ SuccessResponse2,
14
+ )
15
+ from cognite_toolkit._cdf_tk.client.resource_classes.legacy.canvas import (
6
16
  IndustrialCanvas,
7
17
  IndustrialCanvasApply,
8
18
  )
9
- from cognite_toolkit._cdf_tk.client.data_classes.legacy.charts import Chart, ChartList, ChartWrite
19
+ from cognite_toolkit._cdf_tk.client.resource_classes.legacy.charts import Chart, ChartList, ChartWrite
10
20
  from cognite_toolkit._cdf_tk.exceptions import ToolkitNotImplementedError
11
21
  from cognite_toolkit._cdf_tk.tk_warnings import HighSeverityWarning, MediumSeverityWarning
12
22
  from cognite_toolkit._cdf_tk.utils.collection import chunker_sequence
13
- from cognite_toolkit._cdf_tk.utils.http_client import HTTPClient, HTTPMessage, SimpleBodyRequest
14
23
  from cognite_toolkit._cdf_tk.utils.useful_types import JsonVal
15
24
 
16
25
  from ._base import Page, UploadableStorageIO, UploadItem
@@ -185,23 +194,52 @@ class CanvasIO(UploadableStorageIO[CanvasSelector, IndustrialCanvas, IndustrialC
185
194
  results: list[HTTPMessage] = []
186
195
  for item in data_chunk:
187
196
  instances = item.item.as_instances()
188
- items: list[dict[str, JsonVal]] = []
197
+ upsert_items: list[dict[str, JsonValue]] = []
189
198
  for instance in instances:
190
199
  dumped = instance.dump()
191
200
  if self.exclude_existing_version:
192
201
  dumped.pop("existingVersion", None)
193
- items.append(dumped)
194
-
195
- responses = http_client.request_with_retries(
196
- message=SimpleBodyRequest(
197
- endpoint_url=config.create_api_url("/models/instances"),
198
- method="POST",
199
- # MyPy does not understand that .dump is valid json
200
- body_content={"items": items}, # type: ignore[dict-item]
201
- )
202
- )
203
- results.extend(responses.as_item_responses(item.source_id))
202
+ upsert_items.append(dumped)
203
+
204
+ canvas = item.item.canvas
205
+ existing = self.client.canvas.industrial.retrieve(canvas.external_id)
206
+ if existing is not None:
207
+ existing_instance_ids = existing.as_write().as_instance_ids(include_solution_tags=False)
208
+ delete_set = set(existing_instance_ids) - set(item.item.as_instance_ids())
209
+ to_delete: list[Any] = [
210
+ {
211
+ "space": instance_id.space,
212
+ "externalId": instance_id.external_id,
213
+ "instanceType": instance_id.instance_type,
214
+ }
215
+ for instance_id in delete_set
216
+ ]
217
+ else:
218
+ to_delete = []
204
219
 
220
+ last_response: HTTPResult2 | None = None
221
+ for upsert_chunk, delete_chunk in zip_longest(
222
+ chunker_sequence(upsert_items, 1000), chunker_sequence(to_delete, 1000), fillvalue=None
223
+ ):
224
+ body_content: dict[str, JsonValue] = {}
225
+ if upsert_chunk:
226
+ # MyPy fails do understand that list[dict[str, JsonValue]] is a subtype of JsonValue
227
+ body_content["items"] = upsert_chunk # type: ignore[assignment]
228
+ if delete_chunk:
229
+ body_content["delete"] = delete_chunk
230
+
231
+ response = http_client.request_single_retries(
232
+ message=RequestMessage2(
233
+ endpoint_url=config.create_api_url("/models/instances"),
234
+ method="POST",
235
+ body_content=body_content,
236
+ )
237
+ )
238
+ if not isinstance(response, SuccessResponse2):
239
+ results.append(response.as_item_response(item.source_id))
240
+ last_response = response
241
+ if last_response is not None:
242
+ results.append(last_response.as_item_response(item.source_id))
205
243
  return results
206
244
 
207
245
  def data_to_json_chunk(