This is an automated email from the ASF dual-hosted git repository.
michaelsmolina 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 6db3a4d9d2 fix: Temporal filter conversion in viz migrations (#33224)
6db3a4d9d2 is described below
commit 6db3a4d9d25a73cfe2802427692d85c398262fbc
Author: Michael S. Molina <[email protected]>
AuthorDate: Fri May 2 08:27:49 2025 -0300
fix: Temporal filter conversion in viz migrations (#33224)
---
superset/migrations/shared/migrate_viz/base.py | 36 +++++++++++++++++-----
.../migrations/viz/time_related_fields_test.py | 10 +++---
2 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/superset/migrations/shared/migrate_viz/base.py
b/superset/migrations/shared/migrate_viz/base.py
index ba10de1ec2..fe434a52f4 100644
--- a/superset/migrations/shared/migrate_viz/base.py
+++ b/superset/migrations/shared/migrate_viz/base.py
@@ -26,6 +26,7 @@ from superset import conf
from superset.constants import TimeGrain
from superset.migrations.shared.utils import paginated_update, try_load_json
from superset.utils import json
+from superset.utils.date_parser import get_since_until
logger = logging.getLogger("alembic")
@@ -113,14 +114,33 @@ class MigrateViz:
}
if isinstance(granularity_sqla, dict):
- temporal_filter["comparator"] = None
- temporal_filter["expressionType"] = "SQL"
- temporal_filter["subject"] = granularity_sqla["label"]
- temporal_filter["sqlExpression"] =
granularity_sqla["sqlExpression"]
-
- rv_data["adhoc_filters"] = (rv_data.get("adhoc_filters") or []) + [
- temporal_filter
- ]
+ since, until = get_since_until(time_range=time_range)
+ if not since and not until:
+ temporal_filter = {}
+ else:
+ temporal_filter["comparator"] = None
+ temporal_filter["expressionType"] = "SQL"
+ temporal_filter["subject"] = granularity_sqla["label"]
+
+ start_date = since.isoformat() if since else None
+ end_date = until.isoformat() if until else None
+ if start_date and end_date:
+ temporal_filter["sqlExpression"] = (
+ f"{granularity_sqla['sqlExpression']} >=
'{start_date}' AND "
+ f"{granularity_sqla['sqlExpression']} < '{end_date}'"
+ )
+ elif start_date:
+ temporal_filter["sqlExpression"] = (
+ f"{granularity_sqla['sqlExpression']} >=
'{start_date}'"
+ )
+ elif end_date:
+ temporal_filter["sqlExpression"] = (
+ f"{granularity_sqla['sqlExpression']} < '{end_date}'"
+ )
+
+ rv_data["adhoc_filters"] = rv_data.get("adhoc_filters") or []
+ if temporal_filter:
+ rv_data["adhoc_filters"].append(temporal_filter)
@classmethod
def upgrade_slice(cls, slc: Slice) -> None:
diff --git a/tests/unit_tests/migrations/viz/time_related_fields_test.py
b/tests/unit_tests/migrations/viz/time_related_fields_test.py
index 4494aff1cf..128342737b 100644
--- a/tests/unit_tests/migrations/viz/time_related_fields_test.py
+++ b/tests/unit_tests/migrations/viz/time_related_fields_test.py
@@ -21,7 +21,7 @@ from tests.unit_tests.migrations.viz.utils import
migrate_and_assert
SOURCE_FORM_DATA: dict[str, Any] = {
"granularity_sqla": "ds",
- "time_range": "100 years ago : now",
+ "time_range": "100 years ago : today",
"viz_type": "pivot_table",
}
@@ -29,7 +29,7 @@ TARGET_FORM_DATA: dict[str, Any] = {
"form_data_bak": SOURCE_FORM_DATA,
"granularity_sqla": "ds",
"rowOrder": "value_z_to_a",
- "time_range": "100 years ago : now",
+ "time_range": "100 years ago : today",
"viz_type": "pivot_table_v2",
}
@@ -40,7 +40,7 @@ def test_migration() -> None:
target["adhoc_filters"] = [
{
"clause": "WHERE",
- "comparator": "100 years ago : now",
+ "comparator": "100 years ago : today",
"expressionType": "SIMPLE",
"operator": "TEMPORAL_RANGE",
"subject": "ds",
@@ -65,7 +65,9 @@ def test_custom_sql_time_column() -> None:
"comparator": None,
"expressionType": "SQL",
"operator": "TEMPORAL_RANGE",
- "sqlExpression": "sum(ds)",
+ "sqlExpression": (
+ "sum(ds) >= '1925-04-24T00:00:00' AND sum(ds) <
'2025-04-24T00:00:00'"
+ ),
"subject": "ds",
}
]