mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-06 05:22:53 +00:00
* Fix #8750: Superset Owner Fix * Refactor User Ingestion for Dashbaords * User ES to Search User * Pylint Fix * Removed Unsed Import
This commit is contained in:
parent
7e7abac3a3
commit
b74fb82c15
47
ingestion/src/metadata/ingestion/ometa/mixins/user_mixin.py
Normal file
47
ingestion/src/metadata/ingestion/ometa/mixins/user_mixin.py
Normal file
@ -0,0 +1,47 @@
|
||||
# Copyright 2021 Collate
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
"""
|
||||
Mixin class containing User specific methods
|
||||
|
||||
To be used by OpenMetadata class
|
||||
"""
|
||||
|
||||
from metadata.generated.schema.entity.teams.user import User
|
||||
from metadata.ingestion.ometa.client import REST
|
||||
from metadata.ingestion.ometa.utils import ometa_logger
|
||||
|
||||
logger = ometa_logger()
|
||||
|
||||
|
||||
class OMetaUserMixin:
|
||||
"""
|
||||
OpenMetadata API methods related to user.
|
||||
|
||||
To be inherited by OpenMetadata
|
||||
"""
|
||||
|
||||
client: REST
|
||||
|
||||
def get_user_by_email(self, email: str) -> None:
|
||||
"""
|
||||
GET user entity by name
|
||||
|
||||
:param email: User Email
|
||||
"""
|
||||
if email:
|
||||
|
||||
name = email.split("@")[0]
|
||||
users = self.es_search_from_fqn(entity_type=User, fqn_search_string=name)
|
||||
if users:
|
||||
for user in users:
|
||||
if user.email.__root__ == email:
|
||||
return user
|
||||
return None
|
||||
@ -85,6 +85,7 @@ from metadata.ingestion.ometa.mixins.table_mixin import OMetaTableMixin
|
||||
from metadata.ingestion.ometa.mixins.tag_mixin import OMetaTagMixin
|
||||
from metadata.ingestion.ometa.mixins.tests_mixin import OMetaTestsMixin
|
||||
from metadata.ingestion.ometa.mixins.topic_mixin import OMetaTopicMixin
|
||||
from metadata.ingestion.ometa.mixins.user_mixin import OMetaUserMixin
|
||||
from metadata.ingestion.ometa.mixins.version_mixin import OMetaVersionMixin
|
||||
from metadata.ingestion.ometa.provider_registry import (
|
||||
InvalidAuthProviderException,
|
||||
@ -155,6 +156,7 @@ class OpenMetadata(
|
||||
OMetaTestsMixin,
|
||||
DataInisghtMixin,
|
||||
OMetaIngestionPipelineMixin,
|
||||
OMetaUserMixin,
|
||||
Generic[T, C],
|
||||
):
|
||||
"""
|
||||
|
||||
@ -20,7 +20,6 @@ from pydantic import BaseModel
|
||||
from metadata.generated.schema.api.data.createChart import CreateChartRequest
|
||||
from metadata.generated.schema.api.data.createDashboard import CreateDashboardRequest
|
||||
from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
|
||||
from metadata.generated.schema.api.teams.createUser import CreateUserRequest
|
||||
from metadata.generated.schema.entity.data.chart import Chart
|
||||
from metadata.generated.schema.entity.data.dashboard import Dashboard
|
||||
from metadata.generated.schema.entity.data.table import Table
|
||||
@ -107,12 +106,6 @@ class DashboardServiceTopology(ServiceTopology):
|
||||
cache_all=True,
|
||||
clear_cache=True,
|
||||
),
|
||||
NodeStage(
|
||||
type_=CreateUserRequest,
|
||||
context="owner",
|
||||
processor="yield_owner",
|
||||
nullable=True,
|
||||
),
|
||||
NodeStage(
|
||||
type_=Dashboard,
|
||||
context="dashboard",
|
||||
@ -220,14 +213,6 @@ class DashboardServiceSource(TopologyRunnerMixin, Source, ABC):
|
||||
"""
|
||||
return # Dashboard does not support fetching tags except Tableau
|
||||
|
||||
def yield_owner(
|
||||
self, *args, **kwargs # pylint: disable=W0613
|
||||
) -> Optional[Iterable[CreateUserRequest]]:
|
||||
"""
|
||||
Method to fetch dashboard owner
|
||||
"""
|
||||
return # Dashboard does not support fetching owner details except Tableau
|
||||
|
||||
def yield_dashboard_usage(
|
||||
self, *args, **kwargs # pylint: disable=W0613
|
||||
) -> Optional[Iterable[DashboardUsage]]:
|
||||
|
||||
@ -149,6 +149,14 @@ class SupersetSource(DashboardServiceSource):
|
||||
"""
|
||||
return dashboard
|
||||
|
||||
def get_owner_details(self, dashboard_details: dict) -> EntityReference:
|
||||
if dashboard_details.get("owners"):
|
||||
owner = dashboard_details["owners"][0]
|
||||
user = self.metadata.get_user_by_email(owner.get("email"))
|
||||
if user:
|
||||
return EntityReference(id=user.id.__root__, type="user")
|
||||
return None
|
||||
|
||||
def yield_dashboard(
|
||||
self, dashboard_details: dict
|
||||
) -> Iterable[CreateDashboardRequest]:
|
||||
@ -160,6 +168,7 @@ class SupersetSource(DashboardServiceSource):
|
||||
displayName=dashboard_details["dashboard_title"],
|
||||
description="",
|
||||
dashboardUrl=dashboard_details["url"],
|
||||
owner=self.get_owner_details(dashboard_details),
|
||||
charts=[
|
||||
EntityReference(id=chart.id.__root__, type="chart")
|
||||
for chart in self.context.charts
|
||||
|
||||
@ -26,7 +26,6 @@ from metadata.generated.schema.api.tags.createTag import CreateTagRequest
|
||||
from metadata.generated.schema.api.tags.createTagCategory import (
|
||||
CreateTagCategoryRequest,
|
||||
)
|
||||
from metadata.generated.schema.api.teams.createUser import CreateUserRequest
|
||||
from metadata.generated.schema.entity.data.dashboard import (
|
||||
Dashboard as LineageDashboard,
|
||||
)
|
||||
@ -168,9 +167,7 @@ class TableauSource(DashboardServiceSource):
|
||||
"""
|
||||
return dashboard
|
||||
|
||||
def yield_owner( # pylint: disable=arguments-differ
|
||||
self, dashboard_details: dict
|
||||
) -> Optional[Iterable[CreateUserRequest]]:
|
||||
def get_owner_details(self, dashboard_details: dict) -> EntityReference:
|
||||
"""Get dashboard owner
|
||||
|
||||
Args:
|
||||
@ -179,11 +176,10 @@ class TableauSource(DashboardServiceSource):
|
||||
Optional[EntityReference]
|
||||
"""
|
||||
owner = self.owner[dashboard_details["owner"]["id"]]
|
||||
name = owner.get("name")
|
||||
display_name = owner.get("fullName")
|
||||
email = owner.get("email")
|
||||
if name and email:
|
||||
yield CreateUserRequest(name=name, displayName=display_name, email=email)
|
||||
user = self.metadata.get_user_by_email(owner.get("email"))
|
||||
if user:
|
||||
return EntityReference(id=user.id.__root__, type="user")
|
||||
return None
|
||||
|
||||
def yield_tag(self, _) -> OMetaTagAndCategory: # pylint: disable=arguments-differ
|
||||
"""
|
||||
@ -231,7 +227,7 @@ class TableauSource(DashboardServiceSource):
|
||||
name=dashboard_details.get("id"),
|
||||
displayName=dashboard_details.get("name"),
|
||||
description="",
|
||||
owner=self.context.owner,
|
||||
owner=self.get_owner_details(dashboard_details),
|
||||
charts=[
|
||||
EntityReference(id=chart.id.__root__, type="chart")
|
||||
for chart in self.context.charts
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user