You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ma...@apache.org on 2025/07/09 19:47:40 UTC

(superset) branch cors created (now f5a50c4f92)

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

maximebeauchemin pushed a change to branch cors
in repository https://gitbox.apache.org/repos/asf/superset.git


      at f5a50c4f92 fix: make flask-cors a core dependency

This branch includes the following new commits:

     new f5a50c4f92 fix: make flask-cors a core dependency

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(superset) 01/01: fix: make flask-cors a core dependency

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch cors
in repository https://gitbox.apache.org/repos/asf/superset.git

commit f5a50c4f92e40a489bec4b50dfcbcca88ee5cf26
Author: Maxime Beauchemin <ma...@gmail.com>
AuthorDate: Wed Jul 9 12:38:40 2025 -0700

    fix: make flask-cors a core dependency
    
    Recently, merging this line https://github.com/apache/superset/commit/d951158ce6f74d0b2a037fc3f2be32c2921fa8f9#diff-ffb9a8aa35f8e58dd818a724713720da25a2847e19d36b4bbf5da7d5744415e0R41 broke the use of `scripts/uv-pip-compile.sh` which is a script that compiles/pins the dependencies for Superset.
    
    Here as an easy workaround I'm making `flask-cors` a core dependency to the project, as most production instance should probably use this package, and it's a small/stable package that rightly belongs as a core dep.
---
 docs/docs/configuration/networking-settings.mdx |   8 +-
 pyproject.toml                                  |   2 +-
 requirements/base.in                            |   3 -
 requirements/base.txt                           |  12 +-
 requirements/development.in                     |   2 +-
 requirements/development.txt                    | 408 +++++++++++++++-------
 requirements/translations.txt                   | 431 +-----------------------
 7 files changed, 304 insertions(+), 562 deletions(-)

diff --git a/docs/docs/configuration/networking-settings.mdx b/docs/docs/configuration/networking-settings.mdx
index eced46d487..7b17b949db 100644
--- a/docs/docs/configuration/networking-settings.mdx
+++ b/docs/docs/configuration/networking-settings.mdx
@@ -8,11 +8,11 @@ version: 1
 
 ## CORS
 
-To configure CORS, or cross-origin resource sharing, the following dependency must be installed:
 
-```python
-pip install apache_superset[cors]
-```
+:::note
+In Superset versions prior to `5.x` you have to install to install `flask-cors with` with `pip install apache-superset[cors]` to enable CORS support.
+:::
+
 
 The following keys in `superset_config.py` can be specified to configure CORS:
 
diff --git a/pyproject.toml b/pyproject.toml
index 8de6216d33..75b2901ac1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -40,6 +40,7 @@ dependencies = [
     "click>=8.0.3",
     "click-option-group",
     "colorama",
+    "flask-cors>=4.0.2, <5.0",
     "croniter>=0.3.28",
     "cron-descriptor",
     "cryptography>=42.0.4, <45.0.0",
@@ -115,7 +116,6 @@ bigquery = [
 ]
 clickhouse = ["clickhouse-connect>=0.5.14, <1.0"]
 cockroachdb = ["cockroachdb>=0.3.5, <0.4"]
-cors = ["flask-cors>=4.0.2, <5.0"]
 crate = ["sqlalchemy-cratedb>=0.40.1, <1"]
 databend = ["databend-sqlalchemy>=0.3.2, <1.0"]
 databricks = [
diff --git a/requirements/base.in b/requirements/base.in
index 769568dc2e..d110fa8931 100644
--- a/requirements/base.in
+++ b/requirements/base.in
@@ -36,6 +36,3 @@ marshmallow-sqlalchemy>=1.3.0,<1.4.1
 
 # needed for python 3.12 support
 openapi-schema-validator>=0.6.3
-
-# needed when using the flask-cors extension
-.[cors]
diff --git a/requirements/base.txt b/requirements/base.txt
index fd2d44b040..2ca4c174ec 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -11,7 +11,9 @@ apispec==6.6.1
 apsw==3.50.1.0
     # via shillelagh
 async-timeout==4.0.3
-    # via -r requirements/base.in
+    # via
+    #   -r requirements/base.in
+    #   redis
 attrs==25.3.0
     # via
     #   cattrs
@@ -97,6 +99,11 @@ email-validator==2.2.0
     # via flask-appbuilder
 et-xmlfile==2.0.0
     # via openpyxl
+exceptiongroup==1.3.0
+    # via
+    #   cattrs
+    #   trio
+    #   trio-websocket
 flask==2.3.3
     # via
     #   apache-superset (pyproject.toml)
@@ -154,7 +161,6 @@ greenlet==3.1.1
     # via
     #   apache-superset (pyproject.toml)
     #   shillelagh
-    #   sqlalchemy
 gunicorn==23.0.0
     # via apache-superset (pyproject.toml)
 h11==0.16.0
@@ -396,9 +402,11 @@ typing-extensions==4.14.0
     #   apache-superset (pyproject.toml)
     #   alembic
     #   cattrs
+    #   exceptiongroup
     #   limits
     #   pyopenssl
     #   referencing
+    #   rich
     #   selenium
     #   shillelagh
 tzdata==2025.2
diff --git a/requirements/development.in b/requirements/development.in
index 99584560e5..3a526c991a 100644
--- a/requirements/development.in
+++ b/requirements/development.in
@@ -16,4 +16,4 @@
 # specific language governing permissions and limitations
 # under the License.
 #
--e .[development,bigquery,cors,druid,gevent,gsheets,mysql,postgres,presto,prophet,trino,thumbnails]
+-e .[development,bigquery,druid,gevent,gsheets,mysql,postgres,presto,prophet,trino,thumbnails]
diff --git a/requirements/development.txt b/requirements/development.txt
index 76da8f463d..662ee8eb25 100644
--- a/requirements/development.txt
+++ b/requirements/development.txt
@@ -1,19 +1,32 @@
 # This file was autogenerated by uv via the following command:
-#    uv pip compile pyproject.toml requirements/development.in -o requirements/development.txt
+#    uv pip compile requirements/development.in -c requirements/base.txt -o requirements/development.txt
 -e .
     # via -r requirements/development.in
 alembic==1.15.2
-    # via flask-migrate
+    # via
+    #   -c requirements/base.txt
+    #   flask-migrate
 amqp==5.3.1
-    # via kombu
+    # via
+    #   -c requirements/base.txt
+    #   kombu
 apispec==6.6.1
-    # via flask-appbuilder
+    # via
+    #   -c requirements/base.txt
+    #   flask-appbuilder
 apsw==3.50.1.0
-    # via shillelagh
+    # via
+    #   -c requirements/base.txt
+    #   shillelagh
 astroid==3.3.10
     # via pylint
+async-timeout==4.0.3
+    # via
+    #   -c requirements/base.txt
+    #   redis
 attrs==25.3.0
     # via
+    #   -c requirements/base.txt
     #   cattrs
     #   jsonschema
     #   outcome
@@ -21,50 +34,69 @@ attrs==25.3.0
     #   requests-cache
     #   trio
 babel==2.17.0
-    # via flask-babel
+    # via
+    #   -c requirements/base.txt
+    #   flask-babel
 backoff==2.2.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 bcrypt==4.3.0
-    # via paramiko
+    # via
+    #   -c requirements/base.txt
+    #   paramiko
 billiard==4.2.1
-    # via celery
+    # via
+    #   -c requirements/base.txt
+    #   celery
 blinker==1.9.0
-    # via flask
+    # via
+    #   -c requirements/base.txt
+    #   flask
 bottleneck==1.5.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 brotli==1.1.0
-    # via flask-compress
+    # via
+    #   -c requirements/base.txt
+    #   flask-compress
 cachelib==0.13.0
     # via
+    #   -c requirements/base.txt
     #   flask-caching
     #   flask-session
 cachetools==5.5.2
-    # via google-auth
+    # via
+    #   -c requirements/base.txt
+    #   google-auth
 cattrs==25.1.1
-    # via requests-cache
+    # via
+    #   -c requirements/base.txt
+    #   requests-cache
 celery==5.5.2
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 certifi==2025.6.15
     # via
+    #   -c requirements/base.txt
     #   requests
     #   selenium
 cffi==1.17.1
     # via
+    #   -c requirements/base.txt
     #   cryptography
     #   pynacl
 cfgv==3.4.0
     # via pre-commit
 charset-normalizer==3.4.2
-    # via requests
+    # via
+    #   -c requirements/base.txt
+    #   requests
 click==8.2.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   celery
     #   click-didyoumean
@@ -74,20 +106,26 @@ click==8.2.1
     #   flask
     #   flask-appbuilder
 click-didyoumean==0.3.1
-    # via celery
+    # via
+    #   -c requirements/base.txt
+    #   celery
 click-option-group==0.5.7
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 click-plugins==1.1.1
-    # via celery
+    # via
+    #   -c requirements/base.txt
+    #   celery
 click-repl==0.3.0
-    # via celery
+    # via
+    #   -c requirements/base.txt
+    #   celery
 cmdstanpy==1.1.0
     # via prophet
 colorama==0.4.6
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   flask-appbuilder
 contourpy==1.0.7
@@ -96,15 +134,15 @@ coverage==7.6.8
     # via pytest-cov
 cron-descriptor==1.4.5
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 croniter==6.0.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 cryptography==44.0.3
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   paramiko
     #   pyopenssl
@@ -113,30 +151,47 @@ cycler==0.12.1
 db-dtypes==1.3.1
     # via pandas-gbq
 defusedxml==0.7.1
-    # via odfpy
+    # via
+    #   -c requirements/base.txt
+    #   odfpy
 deprecated==1.2.18
-    # via limits
+    # via
+    #   -c requirements/base.txt
+    #   limits
 deprecation==2.1.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 dill==0.4.0
     # via pylint
 distlib==0.3.8
     # via virtualenv
 dnspython==2.7.0
-    # via email-validator
+    # via
+    #   -c requirements/base.txt
+    #   email-validator
 docker==7.0.0
     # via apache-superset
 email-validator==2.2.0
-    # via flask-appbuilder
+    # via
+    #   -c requirements/base.txt
+    #   flask-appbuilder
 et-xmlfile==2.0.0
-    # via openpyxl
+    # via
+    #   -c requirements/base.txt
+    #   openpyxl
+exceptiongroup==1.3.0
+    # via
+    #   -c requirements/base.txt
+    #   cattrs
+    #   pytest
+    #   trio
+    #   trio-websocket
 filelock==3.12.2
     # via virtualenv
 flask==2.3.3
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   flask-appbuilder
     #   flask-babel
@@ -153,50 +208,59 @@ flask==2.3.3
     #   flask-wtf
 flask-appbuilder==4.8.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 flask-babel==2.0.0
-    # via flask-appbuilder
+    # via
+    #   -c requirements/base.txt
+    #   flask-appbuilder
 flask-caching==2.3.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 flask-compress==1.17
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 flask-cors==4.0.2
-    # via apache-superset
+    # via
+    #   -c requirements/base.txt
+    #   apache-superset
 flask-jwt-extended==4.7.1
-    # via flask-appbuilder
+    # via
+    #   -c requirements/base.txt
+    #   flask-appbuilder
 flask-limiter==3.12
-    # via flask-appbuilder
+    # via
+    #   -c requirements/base.txt
+    #   flask-appbuilder
 flask-login==0.6.3
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   flask-appbuilder
 flask-migrate==3.1.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 flask-session==0.8.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 flask-sqlalchemy==2.5.1
     # via
+    #   -c requirements/base.txt
     #   flask-appbuilder
     #   flask-migrate
 flask-talisman==1.1.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 flask-testing==0.8.1
     # via apache-superset
 flask-wtf==1.2.2
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   flask-appbuilder
 fonttools==4.55.0
@@ -206,10 +270,12 @@ freezegun==1.5.1
 future==1.0.0
     # via pyhive
 geographiclib==2.0
-    # via geopy
+    # via
+    #   -c requirements/base.txt
+    #   geopy
 geopy==2.4.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 gevent==24.2.1
     # via apache-superset
@@ -222,6 +288,7 @@ google-api-core==2.23.0
     #   sqlalchemy-bigquery
 google-auth==2.40.3
     # via
+    #   -c requirements/base.txt
     #   google-api-core
     #   google-auth-oauthlib
     #   google-cloud-bigquery
@@ -253,11 +320,10 @@ googleapis-common-protos==1.66.0
     #   grpcio-status
 greenlet==3.1.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   gevent
     #   shillelagh
-    #   sqlalchemy
 grpcio==1.71.0
     # via
     #   apache-superset
@@ -267,27 +333,30 @@ grpcio-status==1.60.1
     # via google-api-core
 gunicorn==23.0.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 h11==0.16.0
-    # via wsproto
+    # via
+    #   -c requirements/base.txt
+    #   wsproto
 hashids==1.3.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 holidays==0.25
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   prophet
 humanize==4.12.3
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 identify==2.5.36
     # via pre-commit
 idna==3.10
     # via
+    #   -c requirements/base.txt
     #   email-validator
     #   requests
     #   trio
@@ -298,24 +367,27 @@ iniconfig==2.0.0
     # via pytest
 isodate==0.7.2
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 isort==6.0.1
     # via pylint
 itsdangerous==2.2.0
     # via
+    #   -c requirements/base.txt
     #   flask
     #   flask-wtf
 jinja2==3.1.6
     # via
+    #   -c requirements/base.txt
     #   flask
     #   flask-babel
 jsonpath-ng==1.7.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 jsonschema==4.23.0
     # via
+    #   -c requirements/base.txt
     #   flask-appbuilder
     #   openapi-schema-validator
     #   openapi-spec-validator
@@ -323,66 +395,82 @@ jsonschema-path==0.3.4
     # via openapi-spec-validator
 jsonschema-specifications==2025.4.1
     # via
+    #   -c requirements/base.txt
     #   jsonschema
     #   openapi-schema-validator
 kiwisolver==1.4.7
     # via matplotlib
 kombu==5.5.3
-    # via celery
+    # via
+    #   -c requirements/base.txt
+    #   celery
 korean-lunar-calendar==0.3.1
-    # via holidays
+    # via
+    #   -c requirements/base.txt
+    #   holidays
 lazy-object-proxy==1.10.0
     # via openapi-spec-validator
 limits==5.1.0
-    # via flask-limiter
+    # via
+    #   -c requirements/base.txt
+    #   flask-limiter
 mako==1.3.10
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   alembic
     #   apache-superset
 markdown==3.8
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 markdown-it-py==3.0.0
-    # via rich
+    # via
+    #   -c requirements/base.txt
+    #   rich
 markupsafe==3.0.2
     # via
+    #   -c requirements/base.txt
     #   jinja2
     #   mako
     #   werkzeug
     #   wtforms
 marshmallow==3.26.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   flask-appbuilder
     #   marshmallow-sqlalchemy
 marshmallow-sqlalchemy==1.4.0
-    # via flask-appbuilder
+    # via
+    #   -c requirements/base.txt
+    #   flask-appbuilder
 matplotlib==3.9.0
     # via prophet
 mccabe==0.7.0
     # via pylint
 mdurl==0.1.2
-    # via markdown-it-py
+    # via
+    #   -c requirements/base.txt
+    #   markdown-it-py
 msgpack==1.0.8
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 msgspec==0.19.0
-    # via flask-session
+    # via
+    #   -c requirements/base.txt
+    #   flask-session
 mysqlclient==2.2.6
     # via apache-superset
 nh3==0.2.21
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 nodeenv==1.8.0
     # via pre-commit
 numpy==1.26.4
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   bottleneck
     #   cmdstanpy
@@ -395,22 +483,31 @@ numpy==1.26.4
 oauthlib==3.2.2
     # via requests-oauthlib
 odfpy==1.4.1
-    # via pandas
+    # via
+    #   -c requirements/base.txt
+    #   pandas
 openapi-schema-validator==0.6.3
-    # via openapi-spec-validator
+    # via
+    #   -c requirements/base.txt
+    #   openapi-spec-validator
 openapi-spec-validator==0.7.1
     # via apache-superset
 openpyxl==3.1.5
-    # via pandas
+    # via
+    #   -c requirements/base.txt
+    #   pandas
 ordered-set==4.1.0
-    # via flask-limiter
+    # via
+    #   -c requirements/base.txt
+    #   flask-limiter
 outcome==1.3.0.post0
     # via
+    #   -c requirements/base.txt
     #   trio
     #   trio-websocket
 packaging==25.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   apispec
     #   db-dtypes
@@ -426,7 +523,7 @@ packaging==25.0
     #   sqlalchemy-bigquery
 pandas==2.0.3
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   cmdstanpy
     #   db-dtypes
@@ -438,18 +535,18 @@ parameterized==0.9.0
     # via apache-superset
 paramiko==3.5.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   sshtunnel
 parsedatetime==2.6
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 pathable==0.4.3
     # via jsonschema-path
 pgsanity==0.2.9
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 pillow==10.3.0
     # via
@@ -457,25 +554,32 @@ pillow==10.3.0
     #   matplotlib
 platformdirs==4.3.8
     # via
+    #   -c requirements/base.txt
     #   pylint
     #   requests-cache
     #   virtualenv
 pluggy==1.5.0
     # via pytest
 ply==3.11
-    # via jsonpath-ng
+    # via
+    #   -c requirements/base.txt
+    #   jsonpath-ng
 polyline==2.0.2
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 pre-commit==4.1.0
     # via apache-superset
 prison==0.2.1
-    # via flask-appbuilder
+    # via
+    #   -c requirements/base.txt
+    #   flask-appbuilder
 progress==1.6
     # via apache-superset
 prompt-toolkit==3.0.51
-    # via click-repl
+    # via
+    #   -c requirements/base.txt
+    #   click-repl
 prophet==1.1.5
     # via apache-superset
 proto-plus==1.25.0
@@ -495,21 +599,25 @@ psycopg2-binary==2.9.6
     # via apache-superset
 pyarrow==18.1.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   db-dtypes
     #   pandas-gbq
 pyasn1==0.6.1
     # via
+    #   -c requirements/base.txt
     #   pyasn1-modules
     #   python-ldap
     #   rsa
 pyasn1-modules==0.4.2
     # via
+    #   -c requirements/base.txt
     #   google-auth
     #   python-ldap
 pycparser==2.22
-    # via cffi
+    # via
+    #   -c requirements/base.txt
+    #   cffi
 pydata-google-auth==1.9.0
     # via pandas-gbq
 pydruid==0.6.9
@@ -517,30 +625,38 @@ pydruid==0.6.9
 pyfakefs==5.3.5
     # via apache-superset
 pygments==2.19.1
-    # via rich
+    # via
+    #   -c requirements/base.txt
+    #   rich
 pyhive==0.7.0
     # via apache-superset
 pyinstrument==4.4.0
     # via apache-superset
 pyjwt==2.10.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   flask-appbuilder
     #   flask-jwt-extended
 pylint==3.3.7
     # via apache-superset
 pynacl==1.5.0
-    # via paramiko
+    # via
+    #   -c requirements/base.txt
+    #   paramiko
 pyopenssl==25.1.0
-    # via shillelagh
+    # via
+    #   -c requirements/base.txt
+    #   shillelagh
 pyparsing==3.2.3
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   matplotlib
 pysocks==1.7.1
-    # via urllib3
+    # via
+    #   -c requirements/base.txt
+    #   urllib3
 pytest==7.4.4
     # via
     #   apache-superset
@@ -552,7 +668,7 @@ pytest-mock==3.10.0
     # via apache-superset
 python-dateutil==2.9.0.post0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   celery
     #   croniter
@@ -567,40 +683,45 @@ python-dateutil==2.9.0.post0
     #   trino
 python-dotenv==1.1.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 python-geohash==0.8.5
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 python-ldap==3.4.4
     # via apache-superset
 pytz==2025.2
     # via
+    #   -c requirements/base.txt
     #   croniter
     #   flask-babel
     #   pandas
     #   trino
 pyxlsb==1.0.10
-    # via pandas
+    # via
+    #   -c requirements/base.txt
+    #   pandas
 pyyaml==6.0.2
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   apispec
     #   jsonschema-path
     #   pre-commit
 redis==4.6.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 referencing==0.36.2
     # via
+    #   -c requirements/base.txt
     #   jsonschema
     #   jsonschema-path
     #   jsonschema-specifications
 requests==2.32.4
     # via
+    #   -c requirements/base.txt
     #   docker
     #   google-api-core
     #   google-cloud-bigquery
@@ -612,24 +733,33 @@ requests==2.32.4
     #   shillelagh
     #   trino
 requests-cache==1.2.1
-    # via shillelagh
+    # via
+    #   -c requirements/base.txt
+    #   shillelagh
 requests-oauthlib==2.0.0
     # via google-auth-oauthlib
 rfc3339-validator==0.1.4
-    # via openapi-schema-validator
+    # via
+    #   -c requirements/base.txt
+    #   openapi-schema-validator
 rich==13.9.4
-    # via flask-limiter
+    # via
+    #   -c requirements/base.txt
+    #   flask-limiter
 rpds-py==0.25.0
     # via
+    #   -c requirements/base.txt
     #   jsonschema
     #   referencing
 rsa==4.9.1
-    # via google-auth
+    # via
+    #   -c requirements/base.txt
+    #   google-auth
 ruff==0.8.0
     # via apache-superset
 selenium==4.32.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 setuptools==80.7.1
     # via
@@ -640,29 +770,34 @@ setuptools==80.7.1
     #   zope-interface
 shillelagh==1.3.5
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 simplejson==3.20.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 six==1.17.0
     # via
+    #   -c requirements/base.txt
     #   prison
     #   python-dateutil
     #   rfc3339-validator
     #   wtforms-json
 slack-sdk==3.35.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 sniffio==1.3.1
-    # via trio
+    # via
+    #   -c requirements/base.txt
+    #   trio
 sortedcontainers==2.4.0
-    # via trio
+    # via
+    #   -c requirements/base.txt
+    #   trio
 sqlalchemy==1.4.54
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   alembic
     #   apache-superset
     #   flask-appbuilder
@@ -675,25 +810,30 @@ sqlalchemy-bigquery==1.12.0
     # via apache-superset
 sqlalchemy-utils==0.38.3
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   flask-appbuilder
 sqlglot==26.28.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 sqloxide==0.1.51
     # via apache-superset
 sshtunnel==0.4.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 statsd==4.0.1
     # via apache-superset
 tabulate==0.9.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
+tomli==2.2.1
+    # via
+    #   coverage
+    #   pylint
+    #   pytest
 tomlkit==0.13.3
     # via pylint
 tqdm==4.67.1
@@ -704,72 +844,94 @@ trino==0.330.0
     # via apache-superset
 trio==0.30.0
     # via
+    #   -c requirements/base.txt
     #   selenium
     #   trio-websocket
 trio-websocket==0.12.2
-    # via selenium
+    # via
+    #   -c requirements/base.txt
+    #   selenium
 typing-extensions==4.14.0
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   alembic
     #   apache-superset
+    #   astroid
     #   cattrs
+    #   exceptiongroup
     #   limits
     #   pyopenssl
     #   referencing
+    #   rich
     #   selenium
     #   shillelagh
 tzdata==2025.2
     # via
+    #   -c requirements/base.txt
     #   kombu
     #   pandas
 tzlocal==5.2
     # via trino
 url-normalize==2.2.1
-    # via requests-cache
+    # via
+    #   -c requirements/base.txt
+    #   requests-cache
 urllib3==2.5.0
     # via
+    #   -c requirements/base.txt
     #   docker
     #   requests
     #   requests-cache
     #   selenium
 vine==5.1.0
     # via
+    #   -c requirements/base.txt
     #   amqp
     #   celery
     #   kombu
 virtualenv==20.29.2
     # via pre-commit
 wcwidth==0.2.13
-    # via prompt-toolkit
+    # via
+    #   -c requirements/base.txt
+    #   prompt-toolkit
 websocket-client==1.8.0
-    # via selenium
+    # via
+    #   -c requirements/base.txt
+    #   selenium
 werkzeug==3.1.3
     # via
+    #   -c requirements/base.txt
     #   flask
     #   flask-appbuilder
     #   flask-jwt-extended
     #   flask-login
 wrapt==1.17.2
-    # via deprecated
+    # via
+    #   -c requirements/base.txt
+    #   deprecated
 wsproto==1.2.0
-    # via trio-websocket
+    # via
+    #   -c requirements/base.txt
+    #   trio-websocket
 wtforms==3.2.1
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   flask-appbuilder
     #   flask-wtf
     #   wtforms-json
 wtforms-json==0.3.5
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
 xlrd==2.0.1
-    # via pandas
+    # via
+    #   -c requirements/base.txt
+    #   pandas
 xlsxwriter==3.0.9
     # via
-    #   apache-superset (pyproject.toml)
+    #   -c requirements/base.txt
     #   apache-superset
     #   pandas
 zope-event==5.0
@@ -777,4 +939,6 @@ zope-event==5.0
 zope-interface==5.4.0
     # via gevent
 zstandard==0.23.0
-    # via flask-compress
+    # via
+    #   -c requirements/base.txt
+    #   flask-compress
diff --git a/requirements/translations.txt b/requirements/translations.txt
index 88513034d0..1cd3ce84d7 100644
--- a/requirements/translations.txt
+++ b/requirements/translations.txt
@@ -1,431 +1,4 @@
 # This file was autogenerated by uv via the following command:
-#    uv pip compile pyproject.toml requirements/translations.in -o requirements/translations.txt
-alembic==1.16.2
-    # via flask-migrate
-amqp==5.3.1
-    # via kombu
-apispec==6.8.2
-    # via flask-appbuilder
-apsw==3.50.2.0
-    # via shillelagh
-attrs==25.3.0
-    # via
-    #   cattrs
-    #   jsonschema
-    #   outcome
-    #   referencing
-    #   requests-cache
-    #   trio
+#    uv pip compile requirements/translations.in -o requirements/translations.txt
 babel==2.17.0
-    # via
-    #   -r requirements/translations.in
-    #   flask-babel
-backoff==2.2.1
-    # via apache-superset (pyproject.toml)
-bcrypt==4.3.0
-    # via paramiko
-billiard==4.2.1
-    # via celery
-blinker==1.9.0
-    # via flask
-bottleneck==1.5.0
-    # via apache-superset (pyproject.toml)
-brotli==1.1.0
-    # via flask-compress
-cachelib==0.13.0
-    # via
-    #   flask-caching
-    #   flask-session
-cachetools==5.5.2
-    # via google-auth
-cattrs==25.1.1
-    # via requests-cache
-celery==5.5.3
-    # via apache-superset (pyproject.toml)
-certifi==2025.6.15
-    # via
-    #   requests
-    #   selenium
-cffi==1.17.1
-    # via
-    #   cryptography
-    #   pynacl
-charset-normalizer==3.4.2
-    # via requests
-click==8.2.1
-    # via
-    #   apache-superset (pyproject.toml)
-    #   celery
-    #   click-didyoumean
-    #   click-option-group
-    #   click-plugins
-    #   click-repl
-    #   flask
-    #   flask-appbuilder
-click-didyoumean==0.3.1
-    # via celery
-click-option-group==0.5.7
-    # via apache-superset (pyproject.toml)
-click-plugins==1.1.1.2
-    # via celery
-click-repl==0.3.0
-    # via celery
-colorama==0.4.6
-    # via
-    #   apache-superset (pyproject.toml)
-    #   flask-appbuilder
-cron-descriptor==1.4.5
-    # via apache-superset (pyproject.toml)
-croniter==6.0.0
-    # via apache-superset (pyproject.toml)
-cryptography==44.0.3
-    # via
-    #   apache-superset (pyproject.toml)
-    #   paramiko
-    #   pyopenssl
-defusedxml==0.7.1
-    # via odfpy
-deprecated==1.2.18
-    # via limits
-deprecation==2.1.0
-    # via apache-superset (pyproject.toml)
-dnspython==2.7.0
-    # via email-validator
-email-validator==2.2.0
-    # via flask-appbuilder
-et-xmlfile==2.0.0
-    # via openpyxl
-flask==2.3.3
-    # via
-    #   apache-superset (pyproject.toml)
-    #   flask-appbuilder
-    #   flask-babel
-    #   flask-caching
-    #   flask-compress
-    #   flask-jwt-extended
-    #   flask-limiter
-    #   flask-login
-    #   flask-migrate
-    #   flask-session
-    #   flask-sqlalchemy
-    #   flask-wtf
-flask-appbuilder==4.8.0
-    # via apache-superset (pyproject.toml)
-flask-babel==2.0.0
-    # via flask-appbuilder
-flask-caching==2.3.1
-    # via apache-superset (pyproject.toml)
-flask-compress==1.17
-    # via apache-superset (pyproject.toml)
-flask-jwt-extended==4.7.1
-    # via flask-appbuilder
-flask-limiter==3.12
-    # via flask-appbuilder
-flask-login==0.6.3
-    # via
-    #   apache-superset (pyproject.toml)
-    #   flask-appbuilder
-flask-migrate==3.1.0
-    # via apache-superset (pyproject.toml)
-flask-session==0.8.0
-    # via apache-superset (pyproject.toml)
-flask-sqlalchemy==2.5.1
-    # via
-    #   flask-appbuilder
-    #   flask-migrate
-flask-talisman==1.1.0
-    # via apache-superset (pyproject.toml)
-flask-wtf==1.2.2
-    # via
-    #   apache-superset (pyproject.toml)
-    #   flask-appbuilder
-geographiclib==2.0
-    # via geopy
-geopy==2.4.1
-    # via apache-superset (pyproject.toml)
-google-auth==2.40.3
-    # via shillelagh
-greenlet==3.1.1
-    # via
-    #   apache-superset (pyproject.toml)
-    #   shillelagh
-    #   sqlalchemy
-gunicorn==23.0.0
-    # via apache-superset (pyproject.toml)
-h11==0.16.0
-    # via wsproto
-hashids==1.3.1
-    # via apache-superset (pyproject.toml)
-holidays==0.25
-    # via apache-superset (pyproject.toml)
-humanize==4.12.3
-    # via apache-superset (pyproject.toml)
-idna==3.10
-    # via
-    #   email-validator
-    #   requests
-    #   trio
-    #   url-normalize
-isodate==0.7.2
-    # via apache-superset (pyproject.toml)
-itsdangerous==2.2.0
-    # via
-    #   flask
-    #   flask-wtf
-jinja2==3.1.6
-    # via
-    #   flask
-    #   flask-babel
-jsonpath-ng==1.7.0
-    # via apache-superset (pyproject.toml)
-jsonschema==4.24.0
-    # via flask-appbuilder
-jsonschema-specifications==2025.4.1
-    # via jsonschema
-kombu==5.5.4
-    # via celery
-korean-lunar-calendar==0.3.1
-    # via holidays
-limits==5.4.0
-    # via flask-limiter
-mako==1.3.10
-    # via
-    #   apache-superset (pyproject.toml)
-    #   alembic
-markdown==3.8.2
-    # via apache-superset (pyproject.toml)
-markdown-it-py==3.0.0
-    # via rich
-markupsafe==3.0.2
-    # via
-    #   jinja2
-    #   mako
-    #   werkzeug
-    #   wtforms
-marshmallow==3.26.1
-    # via
-    #   apache-superset (pyproject.toml)
-    #   flask-appbuilder
-    #   marshmallow-sqlalchemy
-marshmallow-sqlalchemy==1.4.2
-    # via flask-appbuilder
-mdurl==0.1.2
-    # via markdown-it-py
-msgpack==1.0.8
-    # via apache-superset (pyproject.toml)
-msgspec==0.19.0
-    # via flask-session
-nh3==0.2.21
-    # via apache-superset (pyproject.toml)
-numpy==2.2.6
-    # via
-    #   apache-superset (pyproject.toml)
-    #   bottleneck
-    #   pandas
-odfpy==1.4.1
-    # via pandas
-openpyxl==3.1.5
-    # via pandas
-ordered-set==4.1.0
-    # via flask-limiter
-outcome==1.3.0.post0
-    # via
-    #   trio
-    #   trio-websocket
-packaging==25.0
-    # via
-    #   apache-superset (pyproject.toml)
-    #   apispec
-    #   deprecation
-    #   gunicorn
-    #   kombu
-    #   limits
-    #   marshmallow
-    #   shillelagh
-pandas==2.0.3
-    # via apache-superset (pyproject.toml)
-paramiko==3.5.1
-    # via
-    #   apache-superset (pyproject.toml)
-    #   sshtunnel
-parsedatetime==2.6
-    # via apache-superset (pyproject.toml)
-pgsanity==0.2.9
-    # via apache-superset (pyproject.toml)
-platformdirs==4.3.8
-    # via requests-cache
-ply==3.11
-    # via jsonpath-ng
-polyline==2.0.2
-    # via apache-superset (pyproject.toml)
-prison==0.2.1
-    # via flask-appbuilder
-prompt-toolkit==3.0.51
-    # via click-repl
-pyarrow==18.1.0
-    # via apache-superset (pyproject.toml)
-pyasn1==0.6.1
-    # via
-    #   pyasn1-modules
-    #   rsa
-pyasn1-modules==0.4.2
-    # via google-auth
-pycparser==2.22
-    # via cffi
-pygments==2.19.2
-    # via rich
-pyjwt==2.10.1
-    # via
-    #   apache-superset (pyproject.toml)
-    #   flask-appbuilder
-    #   flask-jwt-extended
-pynacl==1.5.0
-    # via paramiko
-pyopenssl==25.1.0
-    # via shillelagh
-pyparsing==3.2.3
-    # via apache-superset (pyproject.toml)
-pysocks==1.7.1
-    # via urllib3
-python-dateutil==2.9.0.post0
-    # via
-    #   apache-superset (pyproject.toml)
-    #   celery
-    #   croniter
-    #   flask-appbuilder
-    #   holidays
-    #   pandas
-    #   shillelagh
-python-dotenv==1.1.1
-    # via apache-superset (pyproject.toml)
-python-geohash==0.8.5
-    # via apache-superset (pyproject.toml)
-pytz==2025.2
-    # via
-    #   croniter
-    #   flask-babel
-    #   pandas
-pyxlsb==1.0.10
-    # via pandas
-pyyaml==6.0.2
-    # via
-    #   apache-superset (pyproject.toml)
-    #   apispec
-redis==4.6.0
-    # via apache-superset (pyproject.toml)
-referencing==0.36.2
-    # via
-    #   jsonschema
-    #   jsonschema-specifications
-requests==2.32.4
-    # via
-    #   requests-cache
-    #   shillelagh
-requests-cache==1.2.1
-    # via shillelagh
-rich==13.9.4
-    # via flask-limiter
-rpds-py==0.25.1
-    # via
-    #   jsonschema
-    #   referencing
-rsa==4.9.1
-    # via google-auth
-selenium==4.34.0
-    # via apache-superset (pyproject.toml)
-shillelagh==1.3.5
-    # via apache-superset (pyproject.toml)
-simplejson==3.20.1
-    # via apache-superset (pyproject.toml)
-six==1.17.0
-    # via
-    #   prison
-    #   python-dateutil
-    #   wtforms-json
-slack-sdk==3.35.0
-    # via apache-superset (pyproject.toml)
-sniffio==1.3.1
-    # via trio
-sortedcontainers==2.4.0
-    # via trio
-sqlalchemy==1.4.54
-    # via
-    #   apache-superset (pyproject.toml)
-    #   alembic
-    #   flask-appbuilder
-    #   flask-sqlalchemy
-    #   marshmallow-sqlalchemy
-    #   shillelagh
-    #   sqlalchemy-utils
-sqlalchemy-utils==0.38.3
-    # via
-    #   apache-superset (pyproject.toml)
-    #   flask-appbuilder
-sqlglot==26.31.0
-    # via apache-superset (pyproject.toml)
-sshtunnel==0.4.0
-    # via apache-superset (pyproject.toml)
-tabulate==0.9.0
-    # via apache-superset (pyproject.toml)
-trio==0.30.0
-    # via
-    #   selenium
-    #   trio-websocket
-trio-websocket==0.12.2
-    # via selenium
-typing-extensions==4.14.0
-    # via
-    #   apache-superset (pyproject.toml)
-    #   alembic
-    #   cattrs
-    #   limits
-    #   pyopenssl
-    #   referencing
-    #   selenium
-    #   shillelagh
-tzdata==2025.2
-    # via
-    #   kombu
-    #   pandas
-url-normalize==2.2.1
-    # via requests-cache
-urllib3==2.4.0
-    # via
-    #   requests
-    #   requests-cache
-    #   selenium
-vine==5.1.0
-    # via
-    #   amqp
-    #   celery
-    #   kombu
-wcwidth==0.2.13
-    # via prompt-toolkit
-websocket-client==1.8.0
-    # via selenium
-werkzeug==3.1.3
-    # via
-    #   flask
-    #   flask-appbuilder
-    #   flask-jwt-extended
-    #   flask-login
-wrapt==1.17.2
-    # via deprecated
-wsproto==1.2.0
-    # via trio-websocket
-wtforms==3.2.1
-    # via
-    #   apache-superset (pyproject.toml)
-    #   flask-appbuilder
-    #   flask-wtf
-    #   wtforms-json
-wtforms-json==0.3.5
-    # via apache-superset (pyproject.toml)
-xlrd==2.0.2
-    # via pandas
-xlsxwriter==3.0.9
-    # via
-    #   apache-superset (pyproject.toml)
-    #   pandas
-zstandard==0.23.0
-    # via flask-compress
+    # via -r requirements/translations.in