You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by dp...@apache.org on 2023/01/09 10:10:39 UTC

[superset] branch master updated: chore: Bump flask libs (#22355)

This is an automated email from the ASF dual-hosted git repository.

dpgaspar 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 30dab3a00a chore: Bump flask libs (#22355)
30dab3a00a is described below

commit 30dab3a00a2e7f8d3dbfbb742cd72e44719d1c9c
Author: EugeneTorap <ev...@gmail.com>
AuthorDate: Mon Jan 9 13:10:31 2023 +0300

    chore: Bump flask libs (#22355)
---
 requirements/base.txt                              | 16 ++++++-------
 setup.py                                           | 13 +++++-----
 .../Chart/DrillDetail/DrillDetailPane.tsx          |  2 +-
 .../DataTablesPane/components/SamplesPane.tsx      |  2 +-
 superset/views/core.py                             |  7 +++++-
 tests/integration_tests/conftest.py                |  6 ++++-
 tests/integration_tests/core_tests.py              |  6 +++--
 tests/integration_tests/dashboard_tests.py         |  2 +-
 tests/integration_tests/datasource_tests.py        | 28 +++++++++++-----------
 tests/integration_tests/thumbnails_tests.py        |  4 ++--
 10 files changed, 49 insertions(+), 37 deletions(-)

diff --git a/requirements/base.txt b/requirements/base.txt
index 4b7363ca18..5e12f2faae 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -68,7 +68,7 @@ dnspython==2.1.0
     # via email-validator
 email-validator==1.1.3
     # via flask-appbuilder
-flask==2.0.3
+flask==2.1.3
     # via
     #   apache-superset
     #   flask-appbuilder
@@ -86,11 +86,11 @@ flask-babel==1.0.0
     # via flask-appbuilder
 flask-caching==1.10.1
     # via apache-superset
-flask-compress==1.10.1
+flask-compress==1.13
     # via apache-superset
 flask-jwt-extended==4.3.1
     # via flask-appbuilder
-flask-login==0.4.1
+flask-login==0.6.0
     # via flask-appbuilder
 flask-migrate==3.1.0
     # via apache-superset
@@ -98,9 +98,9 @@ flask-sqlalchemy==2.5.1
     # via
     #   flask-appbuilder
     #   flask-migrate
-flask-talisman==0.8.1
+flask-talisman==1.0.0
     # via apache-superset
-flask-wtf==0.14.3
+flask-wtf==1.0.1
     # via
     #   apache-superset
     #   flask-appbuilder
@@ -144,10 +144,11 @@ mako==1.1.4
     # via alembic
 markdown==3.3.4
     # via apache-superset
-markupsafe==2.0.1
+markupsafe==2.1.1
     # via
     #   jinja2
     #   mako
+    #   werkzeug
     #   wtforms
 marshmallow==3.13.0
     # via
@@ -236,7 +237,6 @@ six==1.16.0
     # via
     #   bleach
     #   click-repl
-    #   flask-talisman
     #   isodate
     #   jsonschema
     #   paramiko
@@ -278,7 +278,7 @@ wcwidth==0.2.5
     # via prompt-toolkit
 webencodings==0.5.1
     # via bleach
-werkzeug==2.0.3
+werkzeug==2.1.2
     # via
     #   flask
     #   flask-jwt-extended
diff --git a/setup.py b/setup.py
index 3e017fe263..dc546e5a60 100644
--- a/setup.py
+++ b/setup.py
@@ -82,13 +82,14 @@ setup(
         "cron-descriptor",
         "cryptography>=3.3.2",
         "deprecation>=2.1.0, <2.2.0",
-        "flask>=2.0.0, <3.0.0",
+        "flask>=2.1.3, <2.2",
         "flask-appbuilder>=4.1.6, <5.0.0",
-        "flask-caching>=1.10.0",
-        "flask-compress",
-        "flask-talisman",
-        "flask-migrate",
-        "flask-wtf",
+        "flask-caching>=1.10.1, <1.11",
+        "flask-compress>=1.13, <2.0",
+        "flask-talisman>=1.0.0, <2.0",
+        "flask-login==0.6.0",
+        "flask-migrate>=3.1.0, <4.0",
+        "flask-wtf>=1.0.1, <1.1",
         "func_timeout",
         "geopy",
         "graphlib-backport",
diff --git a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx
index f3e33298d1..cf387b4e7e 100644
--- a/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx
+++ b/superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx
@@ -219,7 +219,7 @@ export default function DrillDetailPane({
   useEffect(() => {
     if (!responseError && !isLoading && !resultsPages.has(pageIndex)) {
       setIsLoading(true);
-      const jsonPayload = getDrillPayload(formData, filters);
+      const jsonPayload = getDrillPayload(formData, filters) ?? {};
       const cachePageLimit = Math.ceil(SAMPLES_ROW_LIMIT / PAGE_SIZE);
       getDatasourceSamples(
         datasourceType,
diff --git a/superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx b/superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx
index 0d1047c51d..5c66075750 100644
--- a/superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx
+++ b/superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx
@@ -61,7 +61,7 @@ export const SamplesPane = ({
 
     if (isRequest && !cache.has(datasource)) {
       setIsLoading(true);
-      getDatasourceSamples(datasource.type, datasource.id, queryForce)
+      getDatasourceSamples(datasource.type, datasource.id, queryForce, {})
         .then(response => {
           setData(ensureIsArray(response.data));
           setColnames(ensureIsArray(response.colnames));
diff --git a/superset/views/core.py b/superset/views/core.py
index 534f8f667d..d0db5e9b2e 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -773,7 +773,12 @@ class Superset(BaseSupersetView):  # pylint: disable=too-many-public-methods
             query["form_data_key"] = [form_data_key]
             url = url._replace(query=parse.urlencode(query, True))
             redirect_url = parse.urlunparse(url)
-        return redirect_url
+
+        # Return a relative URL
+        url = parse.urlparse(redirect_url)
+        if url.query:
+            return f"{url.path}?{url.query}"
+        return url.path
 
     @has_access
     @event_logger.log_this
diff --git a/tests/integration_tests/conftest.py b/tests/integration_tests/conftest.py
index 8908c3e227..5c132381b1 100644
--- a/tests/integration_tests/conftest.py
+++ b/tests/integration_tests/conftest.py
@@ -188,7 +188,11 @@ def example_db_provider() -> Callable[[], Database]:  # type: ignore
 
 
 def setup_presto_if_needed():
-    backend = app.config["SQLALCHEMY_EXAMPLES_URI"].split("://")[0]
+    db_uri = (
+        app.config.get("SQLALCHEMY_EXAMPLES_URI")
+        or app.config["SQLALCHEMY_DATABASE_URI"]
+    )
+    backend = db_uri.split("://")[0]
     database = get_example_database()
     extra = database.get_extra()
 
diff --git a/tests/integration_tests/core_tests.py b/tests/integration_tests/core_tests.py
index 86246084fb..799ddacad4 100644
--- a/tests/integration_tests/core_tests.py
+++ b/tests/integration_tests/core_tests.py
@@ -629,7 +629,7 @@ class TestCore(SupersetTestCase):
 
         self.login(username="admin")
         response = self.client.get(f"/r/{model_url.id}")
-        assert response.headers["Location"] == "http://localhost/"
+        assert response.headers["Location"] == "/"
         db.session.delete(model_url)
         db.session.commit()
 
@@ -1674,7 +1674,9 @@ class TestCore(SupersetTestCase):
         rv = self.client.get(
             f"/superset/explore/?form_data={quote(json.dumps(form_data))}"
         )
-        self.assertRedirects(rv, f"/explore/?form_data_key={random_key}")
+        self.assertEqual(
+            rv.headers["Location"], f"/explore/?form_data_key={random_key}"
+        )
 
     @pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
     def test_has_table_by_name(self):
diff --git a/tests/integration_tests/dashboard_tests.py b/tests/integration_tests/dashboard_tests.py
index 3432b0fc16..973394a26d 100644
--- a/tests/integration_tests/dashboard_tests.py
+++ b/tests/integration_tests/dashboard_tests.py
@@ -143,7 +143,7 @@ class TestDashboard(SupersetTestCase):
         dash_count_after = db.session.query(func.count(Dashboard.id)).first()[0]
         self.assertEqual(dash_count_before + 1, dash_count_after)
         group = re.match(
-            r"http:\/\/localhost\/superset\/dashboard\/([0-9]*)\/\?edit=true",
+            r"\/superset\/dashboard\/([0-9]*)\/\?edit=true",
             response.headers["Location"],
         )
         assert group is not None
diff --git a/tests/integration_tests/datasource_tests.py b/tests/integration_tests/datasource_tests.py
index edee002846..4969321a1c 100644
--- a/tests/integration_tests/datasource_tests.py
+++ b/tests/integration_tests/datasource_tests.py
@@ -466,9 +466,9 @@ def test_get_samples(test_client, login_as_admin, virtual_dataset):
         f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table"
     )
     # feeds data
-    test_client.post(uri)
+    test_client.post(uri, json={})
     # get from cache
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.status_code == 200
     assert len(rv.json["result"]["data"]) == 10
     assert QueryCacheManager.has(
@@ -480,9 +480,9 @@ def test_get_samples(test_client, login_as_admin, virtual_dataset):
     # 2. should read through cache data
     uri2 = f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table&force=true"
     # feeds data
-    test_client.post(uri2)
+    test_client.post(uri2, json={})
     # force query
-    rv2 = test_client.post(uri2)
+    rv2 = test_client.post(uri2, json={})
     assert rv2.status_code == 200
     assert len(rv2.json["result"]["data"]) == 10
     assert QueryCacheManager.has(
@@ -518,7 +518,7 @@ def test_get_samples_with_incorrect_cc(test_client, login_as_admin, virtual_data
     uri = (
         f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table"
     )
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.status_code == 422
 
     assert "error" in rv.json
@@ -530,7 +530,7 @@ def test_get_samples_on_physical_dataset(test_client, login_as_admin, physical_d
     uri = (
         f"/datasource/samples?datasource_id={physical_dataset.id}&datasource_type=table"
     )
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.status_code == 200
     assert QueryCacheManager.has(
         rv.json["result"]["cache_key"], region=CacheRegion.DATA
@@ -543,7 +543,7 @@ def test_get_samples_with_filters(test_client, login_as_admin, virtual_dataset):
         f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table"
     )
     rv = test_client.post(uri, json=None)
-    assert rv.status_code == 200
+    assert rv.status_code == 400
 
     rv = test_client.post(uri, json={})
     assert rv.status_code == 200
@@ -644,7 +644,7 @@ def test_get_samples_pagination(test_client, login_as_admin, virtual_dataset):
     uri = (
         f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table"
     )
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.json["result"]["page"] == 1
     assert rv.json["result"]["per_page"] == app.config["SAMPLES_ROW_LIMIT"]
     assert rv.json["result"]["total_count"] == 10
@@ -653,28 +653,28 @@ def test_get_samples_pagination(test_client, login_as_admin, virtual_dataset):
     per_pages = (app.config["SAMPLES_ROW_LIMIT"] + 1, 0, "xx")
     for per_page in per_pages:
         uri = f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table&per_page={per_page}"
-        rv = test_client.post(uri)
+        rv = test_client.post(uri, json={})
         assert rv.status_code == 400
 
     # 3. incorrect page or datasource_type
     uri = f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table&page=xx"
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.status_code == 400
 
     uri = f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=xx"
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.status_code == 400
 
     # 4. turning pages
     uri = f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table&per_page=2&page=1"
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.json["result"]["page"] == 1
     assert rv.json["result"]["per_page"] == 2
     assert rv.json["result"]["total_count"] == 10
     assert [row["col1"] for row in rv.json["result"]["data"]] == [0, 1]
 
     uri = f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table&per_page=2&page=2"
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.json["result"]["page"] == 2
     assert rv.json["result"]["per_page"] == 2
     assert rv.json["result"]["total_count"] == 10
@@ -682,7 +682,7 @@ def test_get_samples_pagination(test_client, login_as_admin, virtual_dataset):
 
     # 5. Exceeding the maximum pages
     uri = f"/datasource/samples?datasource_id={virtual_dataset.id}&datasource_type=table&per_page=2&page=6"
-    rv = test_client.post(uri)
+    rv = test_client.post(uri, json={})
     assert rv.json["result"]["page"] == 6
     assert rv.json["result"]["per_page"] == 2
     assert rv.json["result"]["total_count"] == 10
diff --git a/tests/integration_tests/thumbnails_tests.py b/tests/integration_tests/thumbnails_tests.py
index 332d71da33..0ee420fda8 100644
--- a/tests/integration_tests/thumbnails_tests.py
+++ b/tests/integration_tests/thumbnails_tests.py
@@ -368,7 +368,7 @@ class TestThumbnails(SupersetTestCase):
             id_, thumbnail_url = self._get_id_and_thumbnail_url(CHART_URL)
             rv = self.client.get(f"api/v1/chart/{id_}/thumbnail/1234/")
             self.assertEqual(rv.status_code, 302)
-            self.assertRedirects(rv, thumbnail_url)
+            self.assertEqual(rv.headers["Location"], thumbnail_url)
 
     @pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
     @with_feature_flags(THUMBNAILS=True)
@@ -413,4 +413,4 @@ class TestThumbnails(SupersetTestCase):
             id_, thumbnail_url = self._get_id_and_thumbnail_url(DASHBOARD_URL)
             rv = self.client.get(f"api/v1/dashboard/{id_}/thumbnail/1234/")
             self.assertEqual(rv.status_code, 302)
-            self.assertRedirects(rv, thumbnail_url)
+            self.assertEqual(rv.headers["Location"], thumbnail_url)