diff --git a/CHANGELOG.md b/CHANGELOG.md index 57c19a20c..02b77eef8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- superset: Add 6.0.0-rc2 ([#1337]). + +[#1337]: https://github.com/stackabletech/docker-images/pull/1337 + ## [25.11.0] - 2025-11-07 ## [25.11.0-rc1] - 2025-11-06 diff --git a/superset/Dockerfile b/superset/Dockerfile index fcd47eead..4de89db3a 100644 --- a/superset/Dockerfile +++ b/superset/Dockerfile @@ -20,7 +20,7 @@ microdnf install \ microdnf clean all rm -rf /var/cache/yum -pip install \ +pip${PYTHON_VERSION} install \ --no-cache-dir \ --upgrade \ poetry==2.1.1 \ @@ -71,6 +71,9 @@ RUN microdnf module enable -y nodejs:${NODEJS_VERSION} && \ nodejs \ # Needed to create the source code snapshot tar \ + # Needed by `npm run build`: + which \ + zstd \ && microdnf clean all && \ rm -rf /var/cache/yum @@ -115,8 +118,7 @@ uv pip install --no-cache-dir build # This picks up the UI assets from the npm build cd .. python${PYTHON_VERSION} -m build --wheel - -uv pip install --no-cache-dir dist/apache_superset-${PRODUCT_VERSION}-py3-none-any.whl --constraint /tmp/constraints.txt --build-constraints /tmp/build-constraints.txt +uv pip install --no-cache-dir dist/apache_superset-*-py3-none-any.whl --constraint /tmp/constraints.txt --build-constraints /tmp/build-constraints.txt # Install additional dependencies # Add optional dependencies for use in custom Superset configurations. @@ -150,7 +152,7 @@ uv pip install --no-cache-dir \ cyclonedx-bom==${CYCLONEDX_BOM_VERSION} if [ -n "$AUTHLIB_VERSION" ]; then - pip install Authlib==${AUTHLIB_VERSION} + uv pip install Authlib==${AUTHLIB_VERSION} fi uv pip install --no-cache-dir /tmp/opa_authorizer-0.1.0-py3-none-any.whl diff --git a/superset/boil-config.toml b/superset/boil-config.toml index 0bd257877..4433d2ef2 100644 --- a/superset/boil-config.toml +++ b/superset/boil-config.toml @@ -5,6 +5,7 @@ vector = "0.49.0" [versions."4.0.2".build-arguments] cyclonedx-bom-version = "6.0.0" +# Find the flask-appbuilder version in the applicable constraints.txt file, then find the authlib version. # https://github.com/dpgaspar/Flask-AppBuilder/blob/release/4.4.1/requirements/extra.txt#L7 authlib-version = "1.2.1" python-version = "3.9" @@ -18,6 +19,7 @@ vector = "0.49.0" [versions."4.1.2".build-arguments] cyclonedx-bom-version = "6.0.0" +# Find the flask-appbuilder version in the applicable constraints.txt file, then find the authlib version. # https://github.com/dpgaspar/Flask-AppBuilder/blob/release/4.5.0/requirements/extra.txt#L7 authlib-version = "1.2.1" python-version = "3.9" @@ -31,8 +33,23 @@ vector = "0.49.0" [versions."4.1.4".build-arguments] cyclonedx-bom-version = "6.0.0" +# Find the flask-appbuilder version in the applicable constraints.txt file, then find the authlib version. # https://github.com/dpgaspar/Flask-AppBuilder/blob/release/4.5.0/requirements/extra.txt#L7 authlib-version = "1.2.1" python-version = "3.9" uv-version = "0.7.3" nodejs-version = "20" + +[versions."6.0.0-rc2".local-images] +"shared/statsd-exporter" = "0.28.0" +stackable-devel = "1.0.0" +vector = "0.49.0" + +[versions."6.0.0-rc2".build-arguments] +cyclonedx-bom-version = "6.0.0" +# Find the flask-appbuilder version in the applicable constraints.txt file, then find the authlib version. +# https://github.com/dpgaspar/Flask-AppBuilder/blob/release/5.0.0/requirements/extra.txt#L7 +authlib-version = "1.2.1" +python-version = "3.11" +uv-version = "0.7.3" +nodejs-version = "20" diff --git a/superset/stackable/constraints/6.0.0-rc2/build-constraints.txt b/superset/stackable/constraints/6.0.0-rc2/build-constraints.txt new file mode 100644 index 000000000..e3ab313e1 --- /dev/null +++ b/superset/stackable/constraints/6.0.0-rc2/build-constraints.txt @@ -0,0 +1,3 @@ +# It is not yet known how and when to change this +# I will try without it overridden for now +# Cython==3.0.12 diff --git a/superset/stackable/constraints/6.0.0-rc2/constraints.txt b/superset/stackable/constraints/6.0.0-rc2/constraints.txt new file mode 100644 index 000000000..54a278d02 --- /dev/null +++ b/superset/stackable/constraints/6.0.0-rc2/constraints.txt @@ -0,0 +1,454 @@ +# From: https://raw.githubusercontent.com/apache/superset/refs/tags/6.0.0rc2/requirements/base.txt +# This file was autogenerated by uv via the following command: +# uv pip compile pyproject.toml requirements/base.in -o requirements/base.txt +alembic==1.15.2 + # via flask-migrate +amqp==5.3.1 + # via kombu +apispec==6.6.1 + # via + # -r requirements/base.in + # flask-appbuilder +apsw==3.50.1.0 + # via shillelagh +async-timeout==4.0.3 + # via -r requirements/base.in +attrs==25.3.0 + # via + # cattrs + # jsonschema + # outcome + # referencing + # requests-cache + # trio +babel==2.17.0 + # via 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.2 + # 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 + # 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-cors + # flask-jwt-extended + # flask-limiter + # flask-login + # flask-migrate + # flask-session + # flask-sqlalchemy + # flask-wtf +flask-appbuilder==5.0.0 + # via apache-superset (pyproject.toml) +flask-babel==3.1.0 + # via flask-appbuilder +flask-caching==2.3.1 + # via apache-superset (pyproject.toml) +flask-compress==1.17 + # via apache-superset (pyproject.toml) +flask-cors==4.0.2 + # 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.23.0 + # via + # flask-appbuilder + # openapi-schema-validator +jsonschema-specifications==2025.4.1 + # via + # jsonschema + # openapi-schema-validator +kombu==5.5.3 + # via celery +korean-lunar-calendar==0.3.1 + # via holidays +limits==5.1.0 + # via flask-limiter +mako==1.3.10 + # via + # apache-superset (pyproject.toml) + # alembic +markdown==3.8 + # 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.0 + # via + # -r requirements/base.in + # 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) +numexpr==2.10.2 + # via -r requirements/base.in +numpy==1.26.4 + # via + # apache-superset (pyproject.toml) + # bottleneck + # numexpr + # pandas +odfpy==1.4.1 + # via pandas +openapi-schema-validator==0.6.3 + # via -r requirements/base.in +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 + # limits + # marshmallow + # shillelagh +pandas==2.1.4 + # 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) +pillow==11.3.0 + # 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==16.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.1 + # 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.0 + # 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 +rfc3339-validator==0.1.4 + # via openapi-schema-validator +rich==13.9.4 + # via flask-limiter +rpds-py==0.25.0 + # via + # jsonschema + # referencing +rsa==4.9.1 + # via google-auth +selenium==4.32.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 + # rfc3339-validator + # 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==27.15.2 + # 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.5.0 + # via + # -r requirements/base.in + # 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 + # -r requirements/base.in + # 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.1 + # via pandas +xlsxwriter==3.0.9 + # via + # apache-superset (pyproject.toml) + # pandas +zstandard==0.23.0 + # via flask-compress diff --git a/superset/stackable/opa-authorizer/opa_authorizer/opa_manager.py b/superset/stackable/opa-authorizer/opa_authorizer/opa_manager.py index 74e6e925b..9915c52fe 100644 --- a/superset/stackable/opa-authorizer/opa_authorizer/opa_manager.py +++ b/superset/stackable/opa-authorizer/opa_authorizer/opa_manager.py @@ -57,7 +57,7 @@ class OpaSupersetSecurityManager(SupersetSecurityManager): def __init__(self, appbuilder: AppBuilder): super().__init__(appbuilder) - config = appbuilder.get_app.config + config = current_app.config self.role_cache: TTLCache[str, set[Role]] = TTLCache( maxsize=config.get( @@ -74,7 +74,7 @@ def __init__(self, appbuilder: AppBuilder): self.auth_opa_rule: str = config.get( "AUTH_OPA_RULE", self.AUTH_OPA_RULE_DEFAULT ) - self.auth_opa_request_timeout: int = current_app.config.get( + self.auth_opa_request_timeout: int = config.get( "AUTH_OPA_REQUEST_TIMEOUT", self.AUTH_OPA_REQUEST_TIMEOUT_DEFAULT ) diff --git a/superset/stackable/patches/6.0.0-rc2/patchable.toml b/superset/stackable/patches/6.0.0-rc2/patchable.toml new file mode 100644 index 000000000..9827f86e7 --- /dev/null +++ b/superset/stackable/patches/6.0.0-rc2/patchable.toml @@ -0,0 +1,2 @@ +mirror = "https://github.com/stackabletech/superset.git" +base = "886f52554539318521858fbcf493123c8c4199ef"