You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/06/23 20:25:57 UTC
(superset) branch master updated: fix(dataset): import/export jinja template bug (#28790)
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 3bc3f47d67c fix(dataset): import/export jinja template bug (#28790)
3bc3f47d67c is described below
commit 3bc3f47d67c5cd164217d697613443cf05be8ea6
Author: crabulous <11...@users.noreply.github.com>
AuthorDate: Wed Jun 24 01:25:49 2026 +0500
fix(dataset): import/export jinja template bug (#28790)
Co-authored-by: Evan <ev...@preset.io>
Co-authored-by: Claude Opus 4.8 <no...@anthropic.com>
---
superset/datasets/schemas.py | 14 ++++++
.../datasets/commands/importers/v1/import_test.py | 58 ++++++++++++++++++++++
2 files changed, 72 insertions(+)
diff --git a/superset/datasets/schemas.py b/superset/datasets/schemas.py
index 386686d5700..9f375beb3c1 100644
--- a/superset/datasets/schemas.py
+++ b/superset/datasets/schemas.py
@@ -294,6 +294,20 @@ class ImportV1MetricSchema(Schema):
return data
+ @pre_load
+ def fix_template_params(
+ self, data: dict[str, Any], **kwargs: Any
+ ) -> dict[str, Any]:
+ """
+ Fix for template_params initially being exported as an empty string.
+ """
+ if (
+ isinstance(data.get("template_params"), str)
+ and data["template_params"].strip() == ""
+ ):
+ data["template_params"] = None
+ return data
+
metric_name = fields.String(required=True)
verbose_name = fields.String(allow_none=True)
metric_type = fields.String(allow_none=True)
diff --git a/tests/unit_tests/datasets/commands/importers/v1/import_test.py b/tests/unit_tests/datasets/commands/importers/v1/import_test.py
index d3bbc991448..e4d6559bc5e 100644
--- a/tests/unit_tests/datasets/commands/importers/v1/import_test.py
+++ b/tests/unit_tests/datasets/commands/importers/v1/import_test.py
@@ -810,6 +810,64 @@ def test_import_dataset_extra_empty_string(
assert sqla_table.extra is None # noqa: E711
+def test_import_dataset_template_params_is_empty_string(
+ mocker: MockerFixture, session: Session
+) -> None:
+ """
+ Test importing a dataset when the template_params field is an empty string.
+ """
+ mocker.patch.object(security_manager, "can_access", return_value=True)
+
+ engine = db.session.get_bind()
+ SqlaTable.metadata.create_all(engine) # pylint: disable=no-member
+
+ database = Database(database_name="my_database", sqlalchemy_uri="sqlite://")
+ db.session.add(database)
+ db.session.flush()
+
+ dataset_uuid = uuid.uuid4()
+ yaml_config: dict[str, Any] = {
+ "version": "1.0.0",
+ "table_name": "my_table",
+ "main_dttm_col": "ds",
+ "schema": "my_schema",
+ "sql": None,
+ "params": {
+ "remote_id": 64,
+ "database_name": "examples",
+ "import_time": 1606677834,
+ },
+ "template_params": "",
+ "extra": None,
+ "uuid": dataset_uuid,
+ "metrics": [
+ {
+ "metric_name": "cnt",
+ "expression": "COUNT(*)",
+ }
+ ],
+ "columns": [
+ {
+ "column_name": "profit",
+ "is_dttm": False,
+ "is_active": True,
+ "type": "INTEGER",
+ "groupby": False,
+ "filterable": False,
+ "expression": "revenue-expenses",
+ }
+ ],
+ "database_uuid": database.uuid,
+ }
+
+ schema = ImportV1DatasetSchema()
+ dataset_config = schema.load(yaml_config)
+ dataset_config["database_id"] = database.id
+ sqla_table = import_dataset(dataset_config)
+
+ assert sqla_table.template_params is None # noqa: E711
+
+
@patch("superset.commands.dataset.importers.v1.utils.is_safe_host", return_value=True)
@patch("superset.commands.dataset.importers.v1.utils.request.build_opener")
def test_import_column_allowed_data_url(