You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by hu...@apache.org on 2022/04/15 17:17:12 UTC
[superset] branch master updated: fix: Removetime_range_endpoints from query context object pt 2 (#19728)
This is an automated email from the ASF dual-hosted git repository.
hugh 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 86642025ba fix: Removetime_range_endpoints from query context object pt 2 (#19728)
86642025ba is described below
commit 86642025ba0bb555e6e5d6c058a74e98d997f2e8
Author: Hugh A. Miles II <hu...@gmail.com>
AuthorDate: Fri Apr 15 13:17:05 2022 -0400
fix: Removetime_range_endpoints from query context object pt 2 (#19728)
---
...2ed890b36b94_rm_time_range_endpoints_from_qc.py | 33 +-----
...y => cecc6bf46990_rm_time_range_endpoints_2.py} | 36 +++---
...ecc6bf46990_rm_time_range_endpoints_2__tests.py | 130 +++++++++++++++++++++
3 files changed, 153 insertions(+), 46 deletions(-)
diff --git a/superset/migrations/versions/2ed890b36b94_rm_time_range_endpoints_from_qc.py b/superset/migrations/versions/2ed890b36b94_rm_time_range_endpoints_from_qc.py
index 42d73bc33d..e4e4718a41 100644
--- a/superset/migrations/versions/2ed890b36b94_rm_time_range_endpoints_from_qc.py
+++ b/superset/migrations/versions/2ed890b36b94_rm_time_range_endpoints_from_qc.py
@@ -26,40 +26,9 @@ Create Date: 2022-03-29 18:03:48.977741
revision = "2ed890b36b94"
down_revision = "58df9d617f14"
-import json
-
-import sqlalchemy as sa
-from alembic import op
-from sqlalchemy.ext.declarative import declarative_base
-
-from superset import db
-
-Base = declarative_base()
-
-
-class Slice(Base):
- __tablename__ = "slices"
- id = sa.Column(sa.Integer, primary_key=True)
- query_context = sa.Column(sa.Text)
-
def upgrade():
- bind = op.get_bind()
- session = db.Session(bind=bind)
- for slc in session.query(Slice).filter(
- Slice.query_context.like("%time_range_endpoints%")
- ):
- try:
- query_context = json.loads(slc.query_context)
- except json.decoder.JSONDecodeError:
- continue
- queries = query_context.get("queries")
- for query in queries:
- query.get("extras", {}).pop("time_range_endpoints", None)
- slc.queries = json.dumps(queries)
-
- session.commit()
- session.close()
+ pass
def downgrade():
diff --git a/superset/migrations/versions/2ed890b36b94_rm_time_range_endpoints_from_qc.py b/superset/migrations/versions/cecc6bf46990_rm_time_range_endpoints_2.py
similarity index 70%
copy from superset/migrations/versions/2ed890b36b94_rm_time_range_endpoints_from_qc.py
copy to superset/migrations/versions/cecc6bf46990_rm_time_range_endpoints_2.py
index 42d73bc33d..20d797ddba 100644
--- a/superset/migrations/versions/2ed890b36b94_rm_time_range_endpoints_from_qc.py
+++ b/superset/migrations/versions/cecc6bf46990_rm_time_range_endpoints_2.py
@@ -14,17 +14,17 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-"""rm_time_range_endpoints_from_qc
+"""rm_time_range_endpoints_2
-Revision ID: 2ed890b36b94
-Revises: 58df9d617f14
-Create Date: 2022-03-29 18:03:48.977741
+Revision ID: cecc6bf46990
+Revises: 9d8a8d575284
+Create Date: 2022-04-14 17:21:53.996022
"""
# revision identifiers, used by Alembic.
-revision = "2ed890b36b94"
-down_revision = "58df9d617f14"
+revision = "cecc6bf46990"
+down_revision = "9d8a8d575284"
import json
@@ -41,6 +41,21 @@ class Slice(Base):
__tablename__ = "slices"
id = sa.Column(sa.Integer, primary_key=True)
query_context = sa.Column(sa.Text)
+ slice_name = sa.Column(sa.String(250))
+
+
+def upgrade_slice(slc: Slice):
+ try:
+ query_context = json.loads(slc.query_context)
+ except json.decoder.JSONDecodeError:
+ return
+
+ queries = query_context.get("queries")
+
+ for query in queries:
+ query.get("extras", {}).pop("time_range_endpoints", None)
+
+ slc.query_context = json.dumps(query_context)
def upgrade():
@@ -49,14 +64,7 @@ def upgrade():
for slc in session.query(Slice).filter(
Slice.query_context.like("%time_range_endpoints%")
):
- try:
- query_context = json.loads(slc.query_context)
- except json.decoder.JSONDecodeError:
- continue
- queries = query_context.get("queries")
- for query in queries:
- query.get("extras", {}).pop("time_range_endpoints", None)
- slc.queries = json.dumps(queries)
+ upgrade_slice(slc)
session.commit()
session.close()
diff --git a/tests/integration_tests/migrations/cecc6bf46990_rm_time_range_endpoints_2__tests.py b/tests/integration_tests/migrations/cecc6bf46990_rm_time_range_endpoints_2__tests.py
new file mode 100644
index 0000000000..26d9eec0a5
--- /dev/null
+++ b/tests/integration_tests/migrations/cecc6bf46990_rm_time_range_endpoints_2__tests.py
@@ -0,0 +1,130 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+import json
+
+from superset.migrations.versions.cecc6bf46990_rm_time_range_endpoints_2 import (
+ Slice,
+ upgrade_slice,
+)
+
+sample_query_context = {
+ "datasource": {"id": 27, "type": "table"},
+ "force": False,
+ "queries": [
+ {
+ "time_range": "No filter",
+ "filters": [],
+ "extras": {
+ "time_grain_sqla": "P1D",
+ "time_range_endpoints": ["inclusive", "exclusive"],
+ "having": "",
+ "having_druid": [],
+ "where": "",
+ },
+ "applied_time_extras": {},
+ "columns": ["a", "b"],
+ "orderby": [],
+ "annotation_layers": [],
+ "row_limit": 1000,
+ "timeseries_limit": 0,
+ "order_desc": True,
+ "url_params": {},
+ "custom_params": {},
+ "custom_form_data": {},
+ "post_processing": [],
+ }
+ ],
+ "form_data": {
+ "viz_type": "table",
+ "datasource": "27__table",
+ "slice_id": 545,
+ "url_params": {},
+ "time_grain_sqla": "P1D",
+ "time_range": "No filter",
+ "query_mode": "raw",
+ "groupby": [],
+ "metrics": [],
+ "all_columns": ["a", "b"],
+ "percent_metrics": [],
+ "adhoc_filters": [],
+ "order_by_cols": [],
+ "row_limit": 1000,
+ "server_page_length": 10,
+ "include_time": False,
+ "order_desc": True,
+ "table_timestamp_format": "smart_date",
+ "show_cell_bars": True,
+ "color_pn": True,
+ "extra_form_data": {},
+ "force": False,
+ "result_format": "json",
+ "result_type": "full",
+ },
+ "result_format": "json",
+ "result_type": "full",
+}
+
+
+sample_query_context = {
+ "datasource": {"id": 27, "type": "table"},
+ "force": False,
+ "queries": [
+ {
+ "time_range": "No filter",
+ "filters": [],
+ "extras": {
+ "time_grain_sqla": "P1D",
+ "time_range_endpoints": ["inclusive", "exclusive"],
+ "having": "",
+ "having_druid": [],
+ "where": "",
+ },
+ "applied_time_extras": {},
+ "columns": ["a", "b"],
+ "orderby": [],
+ "annotation_layers": [],
+ "row_limit": 1000,
+ "timeseries_limit": 0,
+ "order_desc": True,
+ "url_params": {},
+ "custom_params": {},
+ "custom_form_data": {},
+ "post_processing": [],
+ }
+ ],
+ "form_data": {},
+ "result_format": "json",
+ "result_type": "full",
+}
+
+
+def test_upgrade():
+ slc = Slice(slice_name="FOO", query_context=json.dumps(sample_query_context))
+
+ upgrade_slice(slc)
+
+ query_context = json.loads(slc.query_context)
+ queries = query_context.get("queries")
+ for q in queries:
+ extras = q.get("extras", {})
+ assert "time_range_endpoints" not in extras
+
+
+def test_upgrade_bad_json():
+ slc = Slice(slice_name="FOO", query_context="abc")
+
+ assert None == upgrade_slice(slc)