mirror of
https://github.com/datahub-project/datahub.git
synced 2025-11-11 17:03:33 +00:00
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
|
|
# metadata-ingestion/examples/library/ermodelrelationship_add_owner.py
|
||
|
|
import time
|
||
|
|
|
||
|
|
from datahub.emitter.mcp import MetadataChangeProposalWrapper
|
||
|
|
from datahub.emitter.rest_emitter import DatahubRestEmitter
|
||
|
|
from datahub.metadata.schema_classes import (
|
||
|
|
AuditStampClass,
|
||
|
|
OwnerClass,
|
||
|
|
OwnershipClass,
|
||
|
|
OwnershipTypeClass,
|
||
|
|
)
|
||
|
|
|
||
|
|
GMS_ENDPOINT = "http://localhost:8080"
|
||
|
|
relationship_urn = "urn:li:erModelRelationship:employee_to_company"
|
||
|
|
owner_urn = "urn:li:corpuser:jdoe"
|
||
|
|
|
||
|
|
emitter = DatahubRestEmitter(gms_server=GMS_ENDPOINT, extra_headers={})
|
||
|
|
|
||
|
|
# Read current ownership
|
||
|
|
# FIXME: emitter.get not available
|
||
|
|
# gms_response = emitter.get(relationship_urn, aspects=["ownership"])
|
||
|
|
current_ownership: dict[
|
||
|
|
str, object
|
||
|
|
] = {} # gms_response.get("ownership", {}) if gms_response else {}
|
||
|
|
|
||
|
|
# Build new owners list
|
||
|
|
existing_owners = []
|
||
|
|
if isinstance(current_ownership, dict) and "owners" in current_ownership:
|
||
|
|
owners_list = current_ownership["owners"]
|
||
|
|
if isinstance(owners_list, list):
|
||
|
|
existing_owners = [owner["owner"] for owner in owners_list]
|
||
|
|
|
||
|
|
# Add new owner if not already present
|
||
|
|
if owner_urn not in existing_owners:
|
||
|
|
owner_list = [
|
||
|
|
OwnerClass(owner=existing_owner, type=OwnershipTypeClass.DATAOWNER)
|
||
|
|
for existing_owner in existing_owners
|
||
|
|
]
|
||
|
|
owner_list.append(
|
||
|
|
OwnerClass(
|
||
|
|
owner=owner_urn,
|
||
|
|
type=OwnershipTypeClass.DATAOWNER,
|
||
|
|
)
|
||
|
|
)
|
||
|
|
|
||
|
|
ownership = OwnershipClass(
|
||
|
|
owners=owner_list,
|
||
|
|
lastModified=AuditStampClass(
|
||
|
|
time=int(time.time() * 1000),
|
||
|
|
actor="urn:li:corpuser:datahub",
|
||
|
|
),
|
||
|
|
)
|
||
|
|
|
||
|
|
emitter.emit_mcp(
|
||
|
|
MetadataChangeProposalWrapper(
|
||
|
|
entityUrn=relationship_urn,
|
||
|
|
aspect=ownership,
|
||
|
|
)
|
||
|
|
)
|
||
|
|
|
||
|
|
print(f"Added owner {owner_urn} to ER Model Relationship {relationship_urn}")
|
||
|
|
else:
|
||
|
|
print(f"Owner {owner_urn} already exists on {relationship_urn}")
|