From 93a7afbf0f7bef1fd48f8e35470d63b920208b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20G=C3=B3mez=20Villamor?= Date: Fri, 9 Feb 2024 22:30:51 +0100 Subject: [PATCH] feat(ingest/glossary): handle ownership type in business glossary connector (#9805) --- .../source/metadata/business_glossary.py | 15 ++++++++++++--- .../business-glossary/business_glossary.yml | 2 ++ .../glossary_events_auto_id_golden.json | 15 +++++++++------ .../business-glossary/glossary_events_golden.json | 15 +++++++++------ 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/metadata-ingestion/src/datahub/ingestion/source/metadata/business_glossary.py b/metadata-ingestion/src/datahub/ingestion/source/metadata/business_glossary.py index e3f0fd1186..0edc8d9752 100644 --- a/metadata-ingestion/src/datahub/ingestion/source/metadata/business_glossary.py +++ b/metadata-ingestion/src/datahub/ingestion/source/metadata/business_glossary.py @@ -10,7 +10,12 @@ from pydantic.fields import Field import datahub.metadata.schema_classes as models from datahub.configuration.common import ConfigModel from datahub.configuration.config_loader import load_config_file -from datahub.emitter.mce_builder import datahub_guid, make_group_urn, make_user_urn +from datahub.emitter.mce_builder import ( + datahub_guid, + make_group_urn, + make_user_urn, + validate_ownership_type, +) from datahub.emitter.mcp import MetadataChangeProposalWrapper from datahub.ingestion.api.common import PipelineContext from datahub.ingestion.api.decorators import ( @@ -34,6 +39,7 @@ GlossaryNodeInterface = TypeVar( class Owners(ConfigModel): + type: str = models.OwnershipTypeClass.DEVELOPER users: Optional[List[str]] = None groups: Optional[List[str]] = None @@ -147,12 +153,14 @@ def make_glossary_term_urn( def get_owners(owners: Owners) -> models.OwnershipClass: + ownership_type, ownership_type_urn = validate_ownership_type(owners.type) owners_meta: List[models.OwnerClass] = [] if owners.users is not None: owners_meta = owners_meta + [ models.OwnerClass( owner=make_user_urn(o), - type=models.OwnershipTypeClass.DEVELOPER, + type=ownership_type, + typeUrn=ownership_type_urn, ) for o in owners.users ] @@ -160,7 +168,8 @@ def get_owners(owners: Owners) -> models.OwnershipClass: owners_meta = owners_meta + [ models.OwnerClass( owner=make_group_urn(o), - type=models.OwnershipTypeClass.DEVELOPER, + type=ownership_type, + typeUrn=ownership_type_urn, ) for o in owners.groups ] diff --git a/metadata-ingestion/tests/integration/business-glossary/business_glossary.yml b/metadata-ingestion/tests/integration/business-glossary/business_glossary.yml index c919dde18b..c9b9e9c1a2 100644 --- a/metadata-ingestion/tests/integration/business-glossary/business_glossary.yml +++ b/metadata-ingestion/tests/integration/business-glossary/business_glossary.yml @@ -35,6 +35,7 @@ nodes: owners: users: - mjames + type: DATAOWNER terms: - name: Email description: An individual's email address @@ -54,6 +55,7 @@ nodes: owners: groups: - finance + type: urn:li:ownershipType:my_cutom_type terms: - name: Account description: Container for records associated with a business arrangement for regular transactions and services diff --git a/metadata-ingestion/tests/integration/business-glossary/glossary_events_auto_id_golden.json b/metadata-ingestion/tests/integration/business-glossary/glossary_events_auto_id_golden.json index 1dce940b44..918e7da742 100644 --- a/metadata-ingestion/tests/integration/business-glossary/glossary_events_auto_id_golden.json +++ b/metadata-ingestion/tests/integration/business-glossary/glossary_events_auto_id_golden.json @@ -246,7 +246,7 @@ "owners": [ { "owner": "urn:li:corpuser:mjames", - "type": "DEVELOPER" + "type": "DATAOWNER" } ], "lastModified": { @@ -331,7 +331,7 @@ "owners": [ { "owner": "urn:li:corpuser:mjames", - "type": "DEVELOPER" + "type": "DATAOWNER" } ], "lastModified": { @@ -377,7 +377,7 @@ "owners": [ { "owner": "urn:li:corpuser:mjames", - "type": "DEVELOPER" + "type": "DATAOWNER" } ], "lastModified": { @@ -412,7 +412,8 @@ "owners": [ { "owner": "urn:li:corpGroup:finance", - "type": "DEVELOPER" + "type": "CUSTOM", + "typeUrn": "urn:li:ownershipType:my_cutom_type" } ], "lastModified": { @@ -461,7 +462,8 @@ "owners": [ { "owner": "urn:li:corpGroup:finance", - "type": "DEVELOPER" + "type": "CUSTOM", + "typeUrn": "urn:li:ownershipType:my_cutom_type" } ], "lastModified": { @@ -500,7 +502,8 @@ "owners": [ { "owner": "urn:li:corpGroup:finance", - "type": "DEVELOPER" + "type": "CUSTOM", + "typeUrn": "urn:li:ownershipType:my_cutom_type" } ], "lastModified": { diff --git a/metadata-ingestion/tests/integration/business-glossary/glossary_events_golden.json b/metadata-ingestion/tests/integration/business-glossary/glossary_events_golden.json index af85f6e2a3..f3ff111485 100644 --- a/metadata-ingestion/tests/integration/business-glossary/glossary_events_golden.json +++ b/metadata-ingestion/tests/integration/business-glossary/glossary_events_golden.json @@ -246,7 +246,7 @@ "owners": [ { "owner": "urn:li:corpuser:mjames", - "type": "DEVELOPER" + "type": "DATAOWNER" } ], "lastModified": { @@ -331,7 +331,7 @@ "owners": [ { "owner": "urn:li:corpuser:mjames", - "type": "DEVELOPER" + "type": "DATAOWNER" } ], "lastModified": { @@ -377,7 +377,7 @@ "owners": [ { "owner": "urn:li:corpuser:mjames", - "type": "DEVELOPER" + "type": "DATAOWNER" } ], "lastModified": { @@ -412,7 +412,8 @@ "owners": [ { "owner": "urn:li:corpGroup:finance", - "type": "DEVELOPER" + "type": "CUSTOM", + "typeUrn": "urn:li:ownershipType:my_cutom_type" } ], "lastModified": { @@ -461,7 +462,8 @@ "owners": [ { "owner": "urn:li:corpGroup:finance", - "type": "DEVELOPER" + "type": "CUSTOM", + "typeUrn": "urn:li:ownershipType:my_cutom_type" } ], "lastModified": { @@ -500,7 +502,8 @@ "owners": [ { "owner": "urn:li:corpGroup:finance", - "type": "DEVELOPER" + "type": "CUSTOM", + "typeUrn": "urn:li:ownershipType:my_cutom_type" } ], "lastModified": {