luth2 commented on code in PR #45823:
URL: https://github.com/apache/superset/pull/45823#discussion_r4431524171


##########
docker/install-app-dependencies.sh:
##########
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+SOURCE_ROOT="${1:?Application source root is required}"
+
+if python -c 'import sys; raise SystemExit(sys.version_info < (3, 15))'; then
+    if [[ -d "${SOURCE_ROOT}" && ! -w "${SOURCE_ROOT}" ]]; then
+        BUILD_ROOT="$(mktemp -d)"
+        trap 'rm -rf "${BUILD_ROOT}"' EXIT
+        cp -a "${SOURCE_ROOT}/." "${BUILD_ROOT}/"
+        SOURCE_ROOT="${BUILD_ROOT}"
+    fi
+    /app/docker/pip-install.sh --requires-build-essential \
+        --no-sources --no-editable "${SOURCE_ROOT}/superset-core" 
"${SOURCE_ROOT}"

Review Comment:
   Validated as fixed; audit commit e8e1b5cf85. The installer no longer passes 
--no-editable. Metadata installs use --no-sources followed by the two plain 
package paths. The executable installer-contract tests assert these exact 
arguments and passed on both Python baselines.



##########
docker/install-app-dependencies.sh:
##########
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash

Review Comment:
   Both files already carry the standard ASF header. Commit e8e1b5cf85 adds a 
parametrized regression checking the ASF notice and Apache-2.0 URL in both 
files. All 9 Docker contract tests pass on Python 3.11 and 3.15. This is a 
focused header check, not a claim that the full hosted RAT job has run.



##########
docs/admin_docs/installation/pypi.mdx:
##########
@@ -15,6 +15,143 @@ import useBaseUrl from '@docusaurus/useBaseUrl';
 
 This page describes how to install Superset using the `apache_superset` 
package [published on PyPI](https://pypi.org/project/apache_superset/).
 
+## Python Compatibility
+
+The minimum Python version is 3.11. The Python version classifiers in
+[pyproject.toml](https://github.com/apache/superset/blob/master/pyproject.toml)
+list the officially supported versions; the open-ended `requires-python` lower
+bound does not certify every newer interpreter.
+
+The source checkout includes experimental Python 3.15 compatibility. Its 
package
+requirements select NumPy `>=2.5.4,<2.6` and pandas `>=3.1.0,<3.2` on Python 
3.15
+and newer. Python 3.11 through 3.14 retain NumPy `>=1.23.5,<2.5` and pandas
+`>=2.3.3,<2.4`; the minimum Python version has not changed. These source 
changes
+do not imply that an already published PyPI release supports Python 3.15.
+
+The focused
+[compatibility 
workflow](https://github.com/apache/superset/blob/master/.github/workflows/python-metadata-compatibility.yml)
+tests Python 3.11 through 3.15. It installs the application without dependency
+overrides, checks dependency consistency, migrates a fresh SQLite metadata
+database, checks `/health`, and runs engine metadata, pandas post-processing
+(including Prophet), result-set, and core SDK tests. The same 278 tests and 
fresh
+SQLite migrations passed locally on Windows for all five interpreter versions,
+including CPython 3.15.0 final.
+
+A local Podman container running Debian 13 with CPython 3.15.2 also passed

Review Comment:
   Validated as addressed; audit commit e8e1b5cf85. The installation page no 
longer contains host-specific logs or run-specific test counts. It documents 
the source-install command, experimental support policy, focused workflow scope 
and known limitations, explicitly distinguishing source compatibility from 
certification of published releases or optional features.



##########
.github/workflows/python-metadata-compatibility.yml:
##########
@@ -0,0 +1,93 @@
+name: Python-Metadata-Compatibility
+
+permissions:
+  contents: read
+
+on:
+  pull_request:
+    paths:
+    - .github/workflows/python-metadata-compatibility.yml
+    - superset/db_engine_specs/**
+    - tests/unit_tests/db_engine_specs/test_lint_metadata.py
+    - pyproject.toml
+    - superset/result_set.py
+    - superset/utils/pandas_postprocessing/**
+    - tests/unit_tests/pandas_postprocessing/**
+    - tests/unit_tests/result_set_test.py
+    - superset-core/**
+  workflow_dispatch: {}
+
+concurrency:
+  group: ${{ github.workflow }}-${{ github.event.pull_request.number || 
github.run_id }}
+  cancel-in-progress: true
+
+jobs:
+  metadata-parser:
+    runs-on: ubuntu-26.04
+    timeout-minutes: 10
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: [ "3.11", "3.12", "3.13", "3.14", "3.15" ]
+    env:
+      PYTEST_DISABLE_PLUGIN_AUTOLOAD: "1"
+    steps:
+    - name: Checkout
+      uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+      with:
+        persist-credentials: false
+    - name: Setup Python
+      uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
+      with:
+        python-version: ${{ matrix.python-version }}
+        allow-prereleases: true
+    - name: Install standalone test dependencies
+      run: python -m pip install pytest==7.4.4
+    - name: Test metadata parser without application dependencies
+      run: python -m pytest --noconftest -o addopts= 
tests/unit_tests/db_engine_specs/test_lint_metadata.py -q -W 
default::DeprecationWarning
+
+  runtime-compatibility:
+    runs-on: ubuntu-26.04
+    timeout-minutes: 25
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: [ "3.11", "3.12", "3.13", "3.14", "3.15" ]
+    env:
+      SUPERSET_HOME: ${{ runner.temp }}/superset-python-compatibility
+      SUPERSET_SECRET_KEY: python-compatibility-ci-only-not-for-production
+      FLASK_APP: superset
+    steps:
+    - name: Checkout
+      uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+      with:
+        persist-credentials: false
+    - name: Setup Python
+      uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # 
v7.0.0
+      with:
+        python-version: ${{ matrix.python-version }}
+    - name: Install application and focused test dependencies
+      run: >-
+        python -m pip install -e ./superset-core -e . pytest==7.4.4 
pytest-mock freezegun parameterized responses rich prophet
+    - name: Check dependency consistency
+      run: python -m pip check
+    - name: Migrate a fresh metadata database
+      run: python -m flask db upgrade
+    - name: Test application health and runtime compatibility
+      run: |
+        python - <<'PY'
+        import pytest
+        from superset.app import create_app
+
+        app = create_app()
+        assert app.test_client().get('/health').status_code == 200
+        with app.app_context():
+            raise SystemExit(pytest.main([
+                '--noconftest', '-o', 'addopts=',
+                'tests/unit_tests/db_engine_specs/test_lint_metadata.py',

Review Comment:
   Validated as addressed; audit commit e8e1b5cf85. The workflow includes 
importer utilities, model helpers and the metadb fanout regression, and 
triggers on their source/test paths plus Dockerfile and docker/**. Structured 
checks verified those entries. All 213 selected review-regression tests passed 
on each of Python 3.11/pandas 3.0.6 and Python 3.15/pandas 3.1.0, including all 
5 cursor-access variants. SQLite fixtures were run on local temporary storage 
to avoid CIFS locking. Hosted CI still awaits maintainer approval.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to