From 973de264713a347dfdbbd4960bd160a12a6a1749 Mon Sep 17 00:00:00 2001 From: pedro93 Date: Mon, 10 Nov 2025 11:46:35 +0000 Subject: [PATCH] feat(structured-properties): add version field to StructuredProperties MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add optional version field to StructuredProperties class to support versioning of structured property definitions. This allows tracking changes to property schemas over time. Changes: - Add version field to StructuredProperties model - Update generate_mcps() to include version in metadata - Update from_datahub() to read version from stored properties - Add test coverage with example version value 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../examples/structured_properties/structured_properties.yaml | 1 + .../api/entities/structuredproperties/structuredproperties.py | 3 +++ .../example_structured_properties_golden.json | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/metadata-ingestion/examples/structured_properties/structured_properties.yaml b/metadata-ingestion/examples/structured_properties/structured_properties.yaml index 0230fbcc61f11b..a569030640b574 100644 --- a/metadata-ingestion/examples/structured_properties/structured_properties.yaml +++ b/metadata-ingestion/examples/structured_properties/structured_properties.yaml @@ -2,6 +2,7 @@ # - urn: urn:li:structuredProperty:io.acryl.privacy.retentionTime # optional if id is provided qualified_name: io.acryl.privacy.retentionTime # required if urn is provided type: number + version: "1.0.0" cardinality: MULTIPLE display_name: Retention Time entity_types: diff --git a/metadata-ingestion/src/datahub/api/entities/structuredproperties/structuredproperties.py b/metadata-ingestion/src/datahub/api/entities/structuredproperties/structuredproperties.py index ce4b4cddeb0612..954dffe0c6911c 100644 --- a/metadata-ingestion/src/datahub/api/entities/structuredproperties/structuredproperties.py +++ b/metadata-ingestion/src/datahub/api/entities/structuredproperties/structuredproperties.py @@ -74,6 +74,7 @@ class StructuredProperties(ConfigModel): urn: Optional[str] = Field(None, validate_default=True) qualified_name: Optional[str] = None type: str + version: Optional[str] = None value_entity_types: Optional[List[str]] = None description: Optional[str] = None display_name: Optional[str] = None @@ -175,6 +176,7 @@ def generate_mcps(self) -> List[MetadataChangeProposalWrapper]: if self.type_qualifier else None ), + version=self.version, ), ) return [mcp] @@ -203,6 +205,7 @@ def from_datahub(cls, graph: DataHubGraph, urn: str) -> "StructuredProperties": qualified_name=structured_property.qualifiedName, display_name=structured_property.displayName, type=structured_property.valueType, + version=structured_property.version, description=structured_property.description, entity_types=structured_property.entityTypes, cardinality=structured_property.cardinality, diff --git a/metadata-ingestion/tests/unit/api/entities/structuredproperties/example_structured_properties_golden.json b/metadata-ingestion/tests/unit/api/entities/structuredproperties/example_structured_properties_golden.json index 71f4c7126b2f9d..3e00c41cd447b0 100644 --- a/metadata-ingestion/tests/unit/api/entities/structuredproperties/example_structured_properties_golden.json +++ b/metadata-ingestion/tests/unit/api/entities/structuredproperties/example_structured_properties_golden.json @@ -35,7 +35,8 @@ "urn:li:entityType:datahub.dataFlow" ], "description": "Retention Time is used to figure out how long to retain records in a dataset", - "immutable": false + "immutable": false, + "version": "1.0.0" } } },