From afbf3047794d53794a67d03aa8d060847337b3b8 Mon Sep 17 00:00:00 2001 From: anders-albert Date: Fri, 24 Apr 2026 08:39:41 +0200 Subject: [PATCH 1/5] feat: added custom mapper --- cognite_toolkit/_cdf_tk/apps/_migrate_app.py | 7 +++- .../_cdf_tk/commands/_migrate/conversion.py | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/cognite_toolkit/_cdf_tk/apps/_migrate_app.py b/cognite_toolkit/_cdf_tk/apps/_migrate_app.py index b95074e28d..a157c5239d 100644 --- a/cognite_toolkit/_cdf_tk/apps/_migrate_app.py +++ b/cognite_toolkit/_cdf_tk/apps/_migrate_app.py @@ -17,6 +17,7 @@ ConnectionCreator, InFieldAssetMapping, InFieldConditionMapping, + InFieldCreatableViews, InFieldUserMapping, ) from cognite_toolkit._cdf_tk.commands._migrate.creators import ( @@ -1625,7 +1626,11 @@ def infield_data( client, infield_mappings, connection_creator=connection_creator, - custom_properties_mappings=[InFieldConditionMapping(infield_mappings), InFieldUserMapping()], + custom_properties_mappings=[ + InFieldConditionMapping(infield_mappings), + InFieldUserMapping(), + InFieldCreatableViews(), + ], custom_instance_mappings={ InFieldLegacyToCDMScheduleMapper.SCHEDULE_VIEW: InFieldLegacyToCDMScheduleMapper( client, connection_creator, schedule_mapping diff --git a/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py b/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py index af35093286..ec2807a3d2 100644 --- a/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py +++ b/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py @@ -992,6 +992,44 @@ def _map_user(source_prop: str, target_prop: str) -> None: return ConversionResult(container_properties=created_properties, errors=issues) +class InFieldCreatableViews(CustomContainerPropertiesMapping): + """Custom mapping for all views that implements the creatable interface in the InField data migration. + + In the Creatable in InFieldOnCDM the properties 'visibility' and 'isArchived' are typically null + in the Legacy model, but should be set explicitly to `PUBLIC` and `false` if they are null. + + """ + + VIEW_IDS: ClassVar[Set[ViewId]] = frozenset( + { + ViewId(space="cdf_apm", external_id="Action", version="v1"), + ViewId(space="cdf_apm", external_id="Checklist", version="v7"), + ViewId(space="cdf_apm", external_id="ChecklistItem", version="v7"), + ViewId(space="cdf_apm", external_id="Condition", version="v1"), + ViewId(space="cdf_apm", external_id="ConditionalAction", version="v1"), + ViewId(space="cdf_apm", external_id="MeasurementReading", version="v4"), + ViewId(space="cdf_apm", external_id="Schedule", version="v4"), + ViewId(space="cdf_apm", external_id="Template", version="v9"), + ViewId(space="cdf_apm", external_id="TemplateItem", version="v7"), + } + ) + + def convert( + self, source_properties: dict[str, JsonValue | NodeId | list[NodeId]], context: ConversionContext + ) -> ConversionResult: + created_properties: dict[str, JsonValue | NodeId | list[NodeId]] = {} + issues: list[str] = [] + + is_archived = source_properties.get("isArchived", None) + visibility = source_properties.get("visibility", None) + if is_archived is None: + created_properties["isArchived"] = True + if visibility is None: + created_properties["isArchived"] = "PUBLIC" + + return ConversionResult(container_properties=created_properties, errors=issues) + + class InFieldAssetMapping(CustomConnectionMapping[NodeId]): """Custom cases in the InField data migration From 0ee1e7db4da56f93643388653d830fa77a84be90 Mon Sep 17 00:00:00 2001 From: anders-albert Date: Fri, 24 Apr 2026 08:46:52 +0200 Subject: [PATCH 2/5] fix: bupg --- cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py b/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py index ec2807a3d2..05af241f5b 100644 --- a/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py +++ b/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py @@ -1021,11 +1021,11 @@ def convert( issues: list[str] = [] is_archived = source_properties.get("isArchived", None) - visibility = source_properties.get("visibility", None) if is_archived is None: created_properties["isArchived"] = True + visibility = source_properties.get("visibility", None) if visibility is None: - created_properties["isArchived"] = "PUBLIC" + created_properties["visibility"] = "PUBLIC" return ConversionResult(container_properties=created_properties, errors=issues) From ae2c6fb401abc2d7400017df01f370d0f3841fac Mon Sep 17 00:00:00 2001 From: anders-albert Date: Fri, 24 Apr 2026 08:49:08 +0200 Subject: [PATCH 3/5] regen --- .../test_migrate_infield/test_migrate_data.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests_smoke/test_commands/test_migrate_infield/test_migrate_data.yml b/tests_smoke/test_commands/test_migrate_infield/test_migrate_data.yml index b7b8b8f904..9ca225a6d7 100644 --- a/tests_smoke/test_commands/test_migrate_infield/test_migrate_data.yml +++ b/tests_smoke/test_commands/test_migrate_infield/test_migrate_data.yml @@ -8,6 +8,7 @@ instances: createdBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data + isArchived: true item: externalId: 0083e7c3-946f-4d5d-958b-133963108ad9 space: smoke_infield_migration_target_space @@ -15,6 +16,7 @@ instances: sourceCreatedUser: VJZrRM_kByZe-moErWilvg title: any comments ? type: message + visibility: PUBLIC space: smoke_infield_migration_target_space - createdTime: 1772711569310 externalId: 2A7QpAmrd9eYbbY_zHH_Ag @@ -25,6 +27,7 @@ instances: createdBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data + isArchived: true item: externalId: -3Z4iakG1YSFRAfVlazYMA space: smoke_infield_migration_target_space @@ -40,6 +43,7 @@ instances: updatedBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data + visibility: PUBLIC space: smoke_infield_migration_target_space - createdTime: 1772711570095 externalId: 431db206-55d6-4f37-9eff-6e7fd4bb37c7 @@ -100,6 +104,7 @@ instances: test description character limitation test description character limitation test description character limitation test description character limitation test 111111111111111111111111111111111111 + isArchived: true labels: - group:one Task group order: 141 @@ -111,6 +116,7 @@ instances: updatedBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data + visibility: PUBLIC space: smoke_infield_migration_target_space - createdTime: 1772711568422 externalId: RhIUePwMQI0WDEQQv-xkig @@ -137,6 +143,7 @@ instances: updatedBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data + visibility: PUBLIC space: smoke_infield_migration_target_space - createdTime: 1772711572850 externalId: -3Z4iakG1YSFRAfVlazYMA @@ -170,6 +177,7 @@ instances: updatedBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data + visibility: PUBLIC space: smoke_infield_migration_target_space - createdTime: 1772715784353 externalId: -iExvo-uJ5JqMTPL2OYN-g @@ -184,6 +192,7 @@ instances: createdBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data + isArchived: true parameters: message: 'item is not okay ' sourceCreatedUser: VJZrRM_kByZe-moErWilvg @@ -191,6 +200,7 @@ instances: updatedBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data + visibility: PUBLIC space: smoke_infield_migration_target_space - createdTime: 1772715777591 externalId: 1DC026YVbKG3QYAOMzJoXw @@ -198,10 +208,12 @@ instances: properties: cdf_infield: ConditionalAction/v1: + isArchived: true logic: or parentObject: externalId: RhIUePwMQI0WDEQQv-xkig space: smoke_infield_migration_target_space + visibility: PUBLIC space: smoke_infield_migration_target_space - createdTime: 1772715785819 externalId: dSq9c2wTh6geOGOIdh11yHhHXKEPWPfX1A8I317N9Sc_IrDfZSISoOzW9PPS3OpYnTAGShkwDS3bB4A49NONUyA_5_J63kPbDgRGDH0bCu8X2s5uLi8iQUm3uXdb6LArzAM_CzTrvN_VceSKRS45WPcooFlsmSgfL5l2aoWsLZmHdKo @@ -213,12 +225,14 @@ instances: externalId: 1DC026YVbKG3QYAOMzJoXw space: smoke_infield_migration_target_space field: status + isArchived: true operator: equals source: externalId: -3Z4iakG1YSFRAfVlazYMA space: smoke_infield_migration_target_space sourceView: cdf_infield/ChecklistItem/v1 value: Not applicable + visibility: PUBLIC space: smoke_infield_migration_target_space - createdTime: 1776149020700 externalId: ae818e1b-82e7-446d-a645-05f0752d2c45 From 10caf5a90be127c4f8ab8a46dcab1af92fbb672e Mon Sep 17 00:00:00 2001 From: Anders Albert <60234212+doctrino@users.noreply.github.com> Date: Fri, 24 Apr 2026 12:16:36 +0200 Subject: [PATCH 4/5] Apply suggestion from @doctrino --- cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py b/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py index 05af241f5b..a200be985e 100644 --- a/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py +++ b/cognite_toolkit/_cdf_tk/commands/_migrate/conversion.py @@ -1022,7 +1022,7 @@ def convert( is_archived = source_properties.get("isArchived", None) if is_archived is None: - created_properties["isArchived"] = True + created_properties["isArchived"] = False visibility = source_properties.get("visibility", None) if visibility is None: created_properties["visibility"] = "PUBLIC" From 6c067c46d623ff1cc1947f1661ea93a26ed9b9bd Mon Sep 17 00:00:00 2001 From: anders-albert Date: Fri, 24 Apr 2026 14:12:26 +0200 Subject: [PATCH 5/5] tests: update --- .../test_migrate_infield/test_migrate_data.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests_smoke/test_commands/test_migrate_infield/test_migrate_data.yml b/tests_smoke/test_commands/test_migrate_infield/test_migrate_data.yml index 9ca225a6d7..a593f7be11 100644 --- a/tests_smoke/test_commands/test_migrate_infield/test_migrate_data.yml +++ b/tests_smoke/test_commands/test_migrate_infield/test_migrate_data.yml @@ -8,7 +8,7 @@ instances: createdBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data - isArchived: true + isArchived: false item: externalId: 0083e7c3-946f-4d5d-958b-133963108ad9 space: smoke_infield_migration_target_space @@ -27,7 +27,7 @@ instances: createdBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data - isArchived: true + isArchived: false item: externalId: -3Z4iakG1YSFRAfVlazYMA space: smoke_infield_migration_target_space @@ -104,7 +104,7 @@ instances: test description character limitation test description character limitation test description character limitation test description character limitation test 111111111111111111111111111111111111 - isArchived: true + isArchived: false labels: - group:one Task group order: 141 @@ -192,7 +192,7 @@ instances: createdBy: externalId: VJZrRM_kByZe-moErWilvg space: cognite_app_data - isArchived: true + isArchived: false parameters: message: 'item is not okay ' sourceCreatedUser: VJZrRM_kByZe-moErWilvg @@ -208,7 +208,7 @@ instances: properties: cdf_infield: ConditionalAction/v1: - isArchived: true + isArchived: false logic: or parentObject: externalId: RhIUePwMQI0WDEQQv-xkig @@ -225,7 +225,7 @@ instances: externalId: 1DC026YVbKG3QYAOMzJoXw space: smoke_infield_migration_target_space field: status - isArchived: true + isArchived: false operator: equals source: externalId: -3Z4iakG1YSFRAfVlazYMA