From 9874ca2e061113234574a2fe93d11bcb71cc898d Mon Sep 17 00:00:00 2001 From: Beto Dealmeida Date: Fri, 4 Jun 2021 15:27:02 -0700 Subject: [PATCH 1/2] fix: apply template_params on external_metadata --- superset/connectors/sqla/models.py | 4 +++- tests/datasource_tests.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py index 0842b0e57e2d9..2f7b6d1498d1c 100644 --- a/superset/connectors/sqla/models.py +++ b/superset/connectors/sqla/models.py @@ -638,7 +638,9 @@ def external_metadata(self) -> List[Dict[str, str]]: db_engine_spec = self.db_engine_spec if self.sql: engine = self.database.get_sqla_engine(schema=self.schema) - sql = self.get_template_processor().process_template(self.sql) + sql = self.get_template_processor().process_template( + self.sql, **self.template_params_dict + ) parsed_query = ParsedQuery(sql) if not db_engine_spec.is_readonly_query(parsed_query): raise SupersetSecurityException( diff --git a/tests/datasource_tests.py b/tests/datasource_tests.py index 438079fc5be85..60746435ed96a 100644 --- a/tests/datasource_tests.py +++ b/tests/datasource_tests.py @@ -73,6 +73,25 @@ def test_external_metadata_for_virtual_table(self): session.delete(table) session.commit() + def test_external_metadata_for_virtual_table_template_params(self): + self.login(username="admin") + session = db.session + table = SqlaTable( + table_name="dummy_sql_table_with_template_params", + database=get_example_database(), + sql="select {{ foo }}", + template_params=json.dumps({"foo": "123"}), + ) + session.add(table) + session.commit() + + table = self.get_table_by_name("dummy_sql_table_with_template_params") + url = f"/datasource/external_metadata/table/{table.id}/" + resp = self.get_json_resp(url) + assert {o.get("name") for o in resp} == {"123"} + session.delete(table) + session.commit() + def test_external_metadata_for_malicious_virtual_table(self): self.login(username="admin") table = SqlaTable( From 50ccf34ed94b28b8f5b420dce3907f85fdfc1d25 Mon Sep 17 00:00:00 2001 From: Beto Dealmeida Date: Fri, 4 Jun 2021 15:49:41 -0700 Subject: [PATCH 2/2] Fix test --- tests/datasource_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/datasource_tests.py b/tests/datasource_tests.py index 60746435ed96a..4ae3957f77480 100644 --- a/tests/datasource_tests.py +++ b/tests/datasource_tests.py @@ -79,7 +79,7 @@ def test_external_metadata_for_virtual_table_template_params(self): table = SqlaTable( table_name="dummy_sql_table_with_template_params", database=get_example_database(), - sql="select {{ foo }}", + sql="select {{ foo }} as intcol", template_params=json.dumps({"foo": "123"}), ) session.add(table) @@ -88,7 +88,7 @@ def test_external_metadata_for_virtual_table_template_params(self): table = self.get_table_by_name("dummy_sql_table_with_template_params") url = f"/datasource/external_metadata/table/{table.id}/" resp = self.get_json_resp(url) - assert {o.get("name") for o in resp} == {"123"} + assert {o.get("name") for o in resp} == {"intcol"} session.delete(table) session.commit()