Fix #16590: Allow only team groups to be owner (#16995)

This commit is contained in:
Mayur Singal 2024-07-11 14:17:13 +05:30 committed by GitHub
parent 8d739563f2
commit 4eadcfdc5d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 18 additions and 5 deletions

View File

@ -16,7 +16,7 @@ To be used by OpenMetadata class
from functools import lru_cache
from typing import Optional, Type
from metadata.generated.schema.entity.teams.team import Team
from metadata.generated.schema.entity.teams.team import Team, TeamType
from metadata.generated.schema.entity.teams.user import User
from metadata.generated.schema.type.entityReference import EntityReference
from metadata.ingestion.api.common import T
@ -153,6 +153,7 @@ class OMetaUserMixin:
from_count: int = 0,
size: int = 1,
fields: Optional[list] = None,
is_owner: bool = False,
) -> Optional[EntityReference]:
"""
Get a User or Team Entity Reference by searching by its name
@ -172,6 +173,9 @@ class OMetaUserMixin:
entity=Team, name=name, from_count=from_count, size=size, fields=fields
)
if maybe_team:
# if is_owner is True, we only want to return the team if it is a group
if is_owner and maybe_team.teamType != TeamType.Group:
return None
return EntityReference(
id=maybe_team.id.root,
type=ENTITY_REFERENCE_TYPE_MAP[Team.__name__],

View File

@ -540,7 +540,9 @@ class DatabaseServiceSource(
table_name=table_name,
schema=self.context.get().database_schema,
)
owner_ref = self.metadata.get_reference_by_name(name=owner_name)
owner_ref = self.metadata.get_reference_by_name(
name=owner_name, is_owner=True
)
return owner_ref
except Exception as exc:
logger.debug(traceback.format_exc())

View File

@ -151,7 +151,9 @@ class DbtSource(DbtServiceSource):
if manifest_node:
dbt_owner = manifest_node.meta.get(DbtCommonEnum.OWNER.value)
if dbt_owner:
owner = self.metadata.get_reference_by_name(name=dbt_owner)
owner = self.metadata.get_reference_by_name(
name=dbt_owner, is_owner=True
)
if not owner:
logger.warning(
"Unable to ingest owner from DBT since no user or"

View File

@ -223,7 +223,7 @@ class OracleSource(StoredProcedureMixin, CommonDbSourceService):
code=stored_procedure.definition,
),
owner=self.metadata.get_reference_by_name(
name=stored_procedure.owner.lower()
name=stored_procedure.owner.lower(), is_owner=True
),
databaseSchema=fqn.build(
metadata=self.metadata,

View File

@ -411,7 +411,7 @@ class AirflowSource(PipelineServiceSource):
until the next run.
"""
try:
return self.metadata.get_reference_by_name(name=owner)
return self.metadata.get_reference_by_name(name=owner, is_owner=True)
except Exception as exc:
logger.warning(f"Error while getting details of user {owner} - {exc}")
return None

View File

@ -184,3 +184,8 @@ class OMetaUserTest(TestCase):
self.team.id,
self.metadata.get_reference_by_name(name="OPS Team").id,
)
# if team is not group, return none
self.assertIsNone(
self.metadata.get_reference_by_name(name="Organization", is_owner=True)
)