Fix #9227: Fix metabase connector to work with non-admin user (#9228)

* Fix #9227: Fix metabase connector to work with non-admin user

* Fix #9227: Fix metabase connector to work with non-admin user

* fix pycheck

* fix pycheck

* fix pycheck
This commit is contained in:
Sriharsha Chintalapani 2022-12-11 22:56:58 -08:00 committed by GitHub
parent 2e1fb96751
commit 145e9d48f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -21,7 +21,6 @@ from metadata.generated.schema.api.lineage.addLineage import AddLineageRequest
from metadata.generated.schema.entity.data.dashboard import (
Dashboard as LineageDashboard,
)
from metadata.generated.schema.entity.data.table import Table
from metadata.generated.schema.entity.services.connections.dashboard.metabaseConnection import (
MetabaseConnection,
)
@ -134,7 +133,8 @@ class MetabaseSource(DashboardServiceSource):
for chart in charts:
try:
chart_details = chart["card"]
if "id" not in chart_details:
continue
chart_url = (
f"/question/{chart_details['id']}-"
f"{replace_special_with(raw=chart_details['name'].lower(), replacement='-')}"
@ -232,7 +232,11 @@ class MetabaseSource(DashboardServiceSource):
resp_database = self.req_get(f"/api/database/{chart_details['database_id']}")
if resp_database.status_code == 200:
database = resp_database.json()
query = chart_details["dataset_query"]["native"]["query"]
query = (
chart_details.get("dataset_query", {})
.get("native", {})
.get("query", "")
)
lineage_parser = LineageParser(query)
for table in lineage_parser.source_tables:
database_schema_name, table = fqn.split(str(table))[-2:]
@ -241,24 +245,36 @@ class MetabaseSource(DashboardServiceSource):
if database_schema_name == "<default>"
else database_schema_name
)
from_entities = search_table_entities(
metadata=self.metadata,
database=database["details"]["db"],
service_name=db_service_name,
database_schema=database_schema_name,
table=table,
database = database.get("details", {}).get("db", None)
if database:
from_entities = search_table_entities(
metadata=self.metadata,
database=database,
service_name=db_service_name,
database_schema=database_schema_name,
table=table,
)
else:
from_entities = search_table_entities(
metadata=self.metadata,
service_name=db_service_name,
database=None,
database_schema=database_schema_name,
table=table,
)
to_fqn = fqn.build(
self.metadata,
entity_type=LineageDashboard,
service_name=self.config.serviceName,
dashboard_name=dashboard_name,
)
to_entity = self.metadata.get_by_name(
entity=LineageDashboard,
fqn=to_fqn,
)
for from_entity in from_entities:
to_fqn = fqn.build(
self.metadata,
entity_type=LineageDashboard,
service_name=self.config.serviceName,
dashboard_name=dashboard_name,
)
to_entity = self.metadata.get_by_name(
entity=LineageDashboard,
fqn=to_fqn,
)
yield self._get_add_lineage_request(
to_entity=to_entity, from_entity=from_entity
)
@ -269,18 +285,24 @@ class MetabaseSource(DashboardServiceSource):
resp_tables = self.req_get(f"/api/table/{chart_details['table_id']}")
if resp_tables.status_code == 200:
table = resp_tables.json()
from_fqn = fqn.build(
self.metadata,
entity_type=Table,
service_name=db_service_name,
database_name=table["db"]["details"]["db"],
schema_name=table.get("schema"),
table_name=table.get("display_name"),
)
from_entity = self.metadata.get_by_name(
entity=Table,
fqn=from_fqn,
)
database_name = table.get("db", {}).get("details", {}).get("db", None)
if database_name:
from_entities = search_table_entities(
metadata=self.metadata,
database=database_name,
service_name=db_service_name,
database_schema=table.get("schema"),
table=table.get("display_name"),
)
else:
from_entities = search_table_entities(
metadata=self.metadata,
service_name=db_service_name,
database=None,
database_schema=table.get("schema"),
table=table.get("display_name"),
)
to_fqn = fqn.build(
self.metadata,
entity_type=LineageDashboard,
@ -291,6 +313,8 @@ class MetabaseSource(DashboardServiceSource):
entity=LineageDashboard,
fqn=to_fqn,
)
yield self._get_add_lineage_request(
to_entity=to_entity, from_entity=from_entity
)
for from_entity in from_entities:
yield self._get_add_lineage_request(
to_entity=to_entity, from_entity=from_entity
)