diff --git a/ingestion/src/metadata/ingestion/ometa/mixins/user_mixin.py b/ingestion/src/metadata/ingestion/ometa/mixins/user_mixin.py index c42a0ee9d33..abe3e0366a9 100644 --- a/ingestion/src/metadata/ingestion/ometa/mixins/user_mixin.py +++ b/ingestion/src/metadata/ingestion/ometa/mixins/user_mixin.py @@ -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__], diff --git a/ingestion/src/metadata/ingestion/source/database/database_service.py b/ingestion/src/metadata/ingestion/source/database/database_service.py index ebaa3e9e231..d07806d0c7c 100644 --- a/ingestion/src/metadata/ingestion/source/database/database_service.py +++ b/ingestion/src/metadata/ingestion/source/database/database_service.py @@ -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()) diff --git a/ingestion/src/metadata/ingestion/source/database/dbt/metadata.py b/ingestion/src/metadata/ingestion/source/database/dbt/metadata.py index b1dc7148958..c50ebc38cd8 100644 --- a/ingestion/src/metadata/ingestion/source/database/dbt/metadata.py +++ b/ingestion/src/metadata/ingestion/source/database/dbt/metadata.py @@ -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" diff --git a/ingestion/src/metadata/ingestion/source/database/oracle/metadata.py b/ingestion/src/metadata/ingestion/source/database/oracle/metadata.py index 5b44b0a0085..45e62be825e 100644 --- a/ingestion/src/metadata/ingestion/source/database/oracle/metadata.py +++ b/ingestion/src/metadata/ingestion/source/database/oracle/metadata.py @@ -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, diff --git a/ingestion/src/metadata/ingestion/source/pipeline/airflow/metadata.py b/ingestion/src/metadata/ingestion/source/pipeline/airflow/metadata.py index b1f9e9d76c7..f46a254bb7b 100644 --- a/ingestion/src/metadata/ingestion/source/pipeline/airflow/metadata.py +++ b/ingestion/src/metadata/ingestion/source/pipeline/airflow/metadata.py @@ -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 diff --git a/ingestion/tests/integration/ometa/test_ometa_user_api.py b/ingestion/tests/integration/ometa/test_ometa_user_api.py index b10572243dc..d75897f9123 100644 --- a/ingestion/tests/integration/ometa/test_ometa_user_api.py +++ b/ingestion/tests/integration/ometa/test_ometa_user_api.py @@ -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) + )