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