diff --git a/.github/actions/setup-backend/action.yml b/.github/actions/setup-backend/action.yml index 1910f4851..2d2f993ff 100644 --- a/.github/actions/setup-backend/action.yml +++ b/.github/actions/setup-backend/action.yml @@ -44,10 +44,13 @@ runs: if [ "${{ inputs.install-superset }}" = "true" ]; then sudo apt-get update && sudo apt-get -y install libldap2-dev libsasl2-dev pip install --upgrade pip setuptools wheel uv + if [ "${{ inputs.requirements-type }}" = "dev" ]; then uv pip install --system -r requirements/development.txt elif [ "${{ inputs.requirements-type }}" = "base" ]; then uv pip install --system -r requirements/base.txt fi + + uv pip install --system -e . fi shell: bash diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 286749a78..089473a3a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -22,8 +22,7 @@ updates: # - package-ecosystem: "pip" - # NOTE: as dependabot isn't compatible with our python - # dependency setup (pip-compile-multi), we'll be using + # NOTE: as dependabot isn't compatible with our usage of `uv pip compile` we're using # `supersetbot` instead - package-ecosystem: "npm" diff --git a/.github/workflows/bump-python-package.yml b/.github/workflows/bump-python-package.yml index 9f3fff5ce..6a57d20f1 100644 --- a/.github/workflows/bump-python-package.yml +++ b/.github/workflows/bump-python-package.yml @@ -45,8 +45,8 @@ jobs: with: python-version: "3.10" - - name: Install pip-compile-multi - run: pip install pip-compile-multi + - name: Install uv + run: pip install uv - name: supersetbot bump-python -p "${{ github.event.inputs.package }}" env: diff --git a/.github/workflows/check-python-deps.yml b/.github/workflows/check-python-deps.yml new file mode 100644 index 000000000..749c41b75 --- /dev/null +++ b/.github/workflows/check-python-deps.yml @@ -0,0 +1,44 @@ +name: Check python dependencies + +on: + push: + branches: + - "master" + - "[0-9].[0-9]*" + pull_request: + types: [synchronize, opened, reopened, ready_for_review] + +# cancel previous workflow jobs for PRs +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} + cancel-in-progress: true + +jobs: + check-python-deps: + runs-on: ubuntu-22.04 + steps: + + - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" + uses: actions/checkout@v4 + with: + persist-credentials: false + submodules: recursive + depth: 1 + + - name: Setup Python + if: steps.check.outputs.python + uses: ./.github/actions/setup-backend/ + + - name: Run uv + if: steps.check.outputs.python + run: ./scripts/uv-pip-compile.sh + + - name: Check for uncommitted changes + run: | + if [[ -n "$(git diff)" ]]; then + echo "ERROR: The pinned dependencies are not up-to-date." + echo "Please run './scripts/uv-pip-compile.sh' and commit the changes." + exit 1 + else + echo "Pinned dependencies are up-to-date." + fi diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 60107de11..f43616165 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,10 +38,6 @@ repos: types-paramiko, types-Markdown, ] - - repo: https://github.com/peterdemin/pip-compile-multi - rev: v2.6.4 - hooks: - - id: pip-compile-multi-verify - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: diff --git a/Dockerfile b/Dockerfile index ea2586e0a..4f2436098 100644 --- a/Dockerfile +++ b/Dockerfile @@ -137,7 +137,7 @@ FROM python-base AS python-translation-compiler # Install Python dependencies using docker/pip-install.sh COPY requirements/translations.txt requirements/ RUN --mount=type=cache,target=/root/.cache/uv \ - /app/docker/pip-install.sh -r requirements/translations.txt + /app/docker/pip-install.sh --requires-build-essential -r requirements/translations.txt COPY superset/translations/ /app/translations_mo/ RUN if [ "$BUILD_TRANSLATIONS" = "true" ]; then \ diff --git a/docs/docs/contributing/development.mdx b/docs/docs/contributing/development.mdx index 9ecce26fc..ac58f92e8 100644 --- a/docs/docs/contributing/development.mdx +++ b/docs/docs/contributing/development.mdx @@ -255,19 +255,19 @@ If you add a new requirement or update an existing requirement (per the `install $ python3 -m venv venv $ source venv/bin/activate $ python3 -m pip install -r requirements/development.txt -$ pip-compile-multi --no-upgrade +$ ./scripts/uv-pip-compile.sh ``` -When upgrading the version number of a single package, you should run `pip-compile-multi` with the `-P` flag: +When upgrading the version number of a single package, you should run `./scripts/uv-pip-compile.sh` with the `-P` flag: ```bash -$ pip-compile-multi -P my-package +$ ./scripts/uv-pip-compile.sh -P some-package-to-upgrade ``` -To bring all dependencies up to date as per the restrictions defined in `setup.py` and `requirements/*.in`, run pip-compile-multi` without any flags: +To bring all dependencies up to date as per the restrictions defined in `setup.py` and `requirements/*.in`, run `./scripts/uv-pip-compile.sh --upgrade` ```bash -$ pip-compile-multi +$ ./scripts/uv-pip-compile.sh --upgrade ``` This should be done periodically, but it is recommended to do thorough manual testing of the application to ensure no breaking changes have been introduced that aren't caught by the unit and integration tests. diff --git a/pyproject.toml b/pyproject.toml index 176caaf9e..510fd12c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -191,7 +191,6 @@ development = [ "grpcio>=1.55.3", "openapi-spec-validator", "parameterized", - "pip-compile-multi", "pre-commit", "progress>=1.5,<2", "psutil", diff --git a/requirements/base.in b/requirements/base.in index ca3a260a0..17f5379cc 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -16,7 +16,6 @@ # specific language governing permissions and limitations # under the License. # --e file:. urllib3>=1.26.18 werkzeug>=3.0.1 numexpr>=2.9.0 diff --git a/requirements/base.txt b/requirements/base.txt index b610aa0e6..514119d68 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,17 +1,10 @@ -# SHA1:04f7e0860829f18926ea238354e6d4a6ab823d50 -# -# This file is autogenerated by pip-compile-multi -# To update, run: -# -# pip-compile-multi -# --e file:. - # via -r requirements/base.in +# This file was autogenerated by uv via the following command: +# uv pip compile pyproject.toml requirements/base.in -o requirements/base.txt alembic==1.14.0 # via flask-migrate amqp==5.3.1 # via kombu -apispec[yaml]==6.3.0 +apispec==6.3.0 # via flask-appbuilder apsw==3.46.0.0 # via shillelagh @@ -27,7 +20,7 @@ attrs==24.2.0 babel==2.16.0 # via flask-babel backoff==2.2.1 - # via apache-superset + # via apache-superset (pyproject.toml) bcrypt==4.2.1 # via paramiko billiard==4.2.1 @@ -35,7 +28,7 @@ billiard==4.2.1 blinker==1.9.0 # via flask bottleneck==1.4.2 - # via apache-superset + # via apache-superset (pyproject.toml) brotli==1.1.0 # via flask-compress cachelib==0.9.0 @@ -47,7 +40,7 @@ cachetools==5.5.0 cattrs==24.1.2 # via requests-cache celery==5.4.0 - # via apache-superset + # via apache-superset (pyproject.toml) certifi==2024.8.30 # via requests cffi==1.17.1 @@ -58,7 +51,7 @@ charset-normalizer==3.4.0 # via requests click==8.1.7 # via - # apache-superset + # apache-superset (pyproject.toml) # celery # click-didyoumean # click-option-group @@ -69,22 +62,22 @@ click==8.1.7 click-didyoumean==0.3.1 # via celery click-option-group==0.5.6 - # via apache-superset + # 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 + # apache-superset (pyproject.toml) # flask-appbuilder cron-descriptor==1.4.5 - # via apache-superset + # via apache-superset (pyproject.toml) croniter==5.0.1 - # via apache-superset + # via apache-superset (pyproject.toml) cryptography==43.0.3 # via - # apache-superset + # apache-superset (pyproject.toml) # paramiko # pyopenssl defusedxml==0.7.1 @@ -92,7 +85,7 @@ defusedxml==0.7.1 deprecated==1.2.15 # via limits deprecation==2.1.0 - # via apache-superset + # via apache-superset (pyproject.toml) dnspython==2.7.0 # via email-validator email-validator==2.2.0 @@ -103,7 +96,7 @@ exceptiongroup==1.2.2 # via cattrs flask==2.3.3 # via - # apache-superset + # apache-superset (pyproject.toml) # flask-appbuilder # flask-babel # flask-caching @@ -116,66 +109,66 @@ flask==2.3.3 # flask-sqlalchemy # flask-wtf flask-appbuilder==4.5.2 - # via apache-superset + # via apache-superset (pyproject.toml) flask-babel==2.0.0 # via flask-appbuilder flask-caching==2.3.0 - # via apache-superset + # via apache-superset (pyproject.toml) flask-compress==1.17 - # via apache-superset + # via apache-superset (pyproject.toml) flask-jwt-extended==4.7.1 # via flask-appbuilder flask-limiter==3.8.0 # via flask-appbuilder flask-login==0.6.3 # via - # apache-superset + # apache-superset (pyproject.toml) # flask-appbuilder flask-migrate==3.1.0 - # via apache-superset + # via apache-superset (pyproject.toml) flask-session==0.8.0 - # via apache-superset + # via apache-superset (pyproject.toml) flask-sqlalchemy==2.5.1 # via # flask-appbuilder # flask-migrate flask-talisman==1.1.0 - # via apache-superset + # via apache-superset (pyproject.toml) flask-wtf==1.2.2 # via - # apache-superset + # apache-superset (pyproject.toml) # flask-appbuilder func-timeout==4.3.5 - # via apache-superset + # via apache-superset (pyproject.toml) geographiclib==2.0 # via geopy geopy==2.4.1 - # via apache-superset + # via apache-superset (pyproject.toml) google-auth==2.36.0 # via shillelagh greenlet==3.0.3 # via # -r requirements/base.in - # apache-superset + # apache-superset (pyproject.toml) # shillelagh gunicorn==23.0.0 - # via apache-superset + # via apache-superset (pyproject.toml) hashids==1.3.1 - # via apache-superset + # via apache-superset (pyproject.toml) holidays==0.25 - # via apache-superset + # via apache-superset (pyproject.toml) humanize==4.11.0 - # via apache-superset + # via apache-superset (pyproject.toml) idna==3.10 # via # email-validator # requests importlib-metadata==8.5.0 - # via apache-superset + # via apache-superset (pyproject.toml) importlib-resources==6.4.5 # via limits isodate==0.7.2 - # via apache-superset + # via apache-superset (pyproject.toml) itsdangerous==2.2.0 # via # flask @@ -185,7 +178,7 @@ jinja2==3.1.4 # flask # flask-babel jsonpath-ng==1.7.0 - # via apache-superset + # via apache-superset (pyproject.toml) jsonschema==4.17.3 # via flask-appbuilder kombu==5.4.2 @@ -196,10 +189,10 @@ limits==3.13.0 # via flask-limiter mako==1.3.6 # via + # apache-superset (pyproject.toml) # alembic - # apache-superset markdown==3.7 - # via apache-superset + # via apache-superset (pyproject.toml) markdown-it-py==3.0.0 # via rich markupsafe==3.0.2 @@ -217,16 +210,16 @@ marshmallow-sqlalchemy==0.28.2 mdurl==0.1.2 # via markdown-it-py msgpack==1.0.8 - # via apache-superset + # via apache-superset (pyproject.toml) msgspec==0.18.6 # via flask-session nh3==0.2.19 - # via apache-superset + # via apache-superset (pyproject.toml) numexpr==2.10.2 # via -r requirements/base.in numpy==1.23.5 # via - # apache-superset + # apache-superset (pyproject.toml) # bottleneck # numexpr # pandas @@ -239,7 +232,7 @@ ordered-set==4.1.0 # via flask-limiter packaging==24.2 # via - # apache-superset + # apache-superset (pyproject.toml) # apispec # deprecation # gunicorn @@ -247,28 +240,28 @@ packaging==24.2 # marshmallow # marshmallow-sqlalchemy # shillelagh -pandas[excel]==2.0.3 - # via apache-superset +pandas==2.0.3 + # via apache-superset (pyproject.toml) paramiko==3.5.0 # via - # apache-superset + # apache-superset (pyproject.toml) # sshtunnel parsedatetime==2.6 - # via apache-superset + # via apache-superset (pyproject.toml) pgsanity==0.2.9 - # via apache-superset + # via apache-superset (pyproject.toml) platformdirs==3.8.1 # via requests-cache ply==3.11 # via jsonpath-ng polyline==2.0.2 - # via apache-superset + # via apache-superset (pyproject.toml) prison==0.2.1 # via flask-appbuilder prompt-toolkit==3.0.48 # via click-repl pyarrow==14.0.2 - # via apache-superset + # via apache-superset (pyproject.toml) pyasn1==0.6.1 # via # pyasn1-modules @@ -281,7 +274,7 @@ pygments==2.18.0 # via rich pyjwt==2.10.1 # via - # apache-superset + # apache-superset (pyproject.toml) # flask-appbuilder # flask-jwt-extended pynacl==1.5.0 @@ -289,12 +282,12 @@ pynacl==1.5.0 pyopenssl==24.2.1 # via shillelagh pyparsing==3.2.0 - # via apache-superset + # via apache-superset (pyproject.toml) pyrsistent==0.20.0 # via jsonschema python-dateutil==2.9.0.post0 # via - # apache-superset + # apache-superset (pyproject.toml) # celery # croniter # flask-appbuilder @@ -302,9 +295,9 @@ python-dateutil==2.9.0.post0 # pandas # shillelagh python-dotenv==1.0.1 - # via apache-superset + # via apache-superset (pyproject.toml) python-geohash==0.8.5 - # via apache-superset + # via apache-superset (pyproject.toml) pytz==2024.2 # via # croniter @@ -314,10 +307,10 @@ pyxlsb==1.0.10 # via pandas pyyaml==6.0.2 # via - # apache-superset + # apache-superset (pyproject.toml) # apispec redis==4.6.0 - # via apache-superset + # via apache-superset (pyproject.toml) requests==2.32.2 # via # requests-cache @@ -329,13 +322,13 @@ rich==13.9.4 rsa==4.9 # via google-auth selenium==3.141.0 - # via apache-superset -shillelagh[gsheetsapi]==1.2.18 - # via apache-superset + # via apache-superset (pyproject.toml) +shillelagh==1.2.18 + # via apache-superset (pyproject.toml) shortid==0.1.2 - # via apache-superset + # via apache-superset (pyproject.toml) simplejson==3.19.3 - # via apache-superset + # via apache-superset (pyproject.toml) six==1.16.0 # via # prison @@ -343,11 +336,11 @@ six==1.16.0 # url-normalize # wtforms-json slack-sdk==3.33.4 - # via apache-superset + # via apache-superset (pyproject.toml) sqlalchemy==1.4.54 # via + # apache-superset (pyproject.toml) # alembic - # apache-superset # flask-appbuilder # flask-sqlalchemy # marshmallow-sqlalchemy @@ -355,20 +348,20 @@ sqlalchemy==1.4.54 # sqlalchemy-utils sqlalchemy-utils==0.38.3 # via - # apache-superset + # apache-superset (pyproject.toml) # flask-appbuilder sqlglot==25.24.5 - # via apache-superset + # via apache-superset (pyproject.toml) sqlparse==0.5.2 - # via apache-superset + # via apache-superset (pyproject.toml) sshtunnel==0.4.0 - # via apache-superset + # via apache-superset (pyproject.toml) tabulate==0.8.10 - # via apache-superset + # via apache-superset (pyproject.toml) typing-extensions==4.12.2 # via + # apache-superset (pyproject.toml) # alembic - # apache-superset # cattrs # flask-limiter # limits @@ -405,17 +398,17 @@ wrapt==1.17.0 # via deprecated wtforms==3.2.1 # via - # apache-superset + # apache-superset (pyproject.toml) # flask-appbuilder # flask-wtf # wtforms-json wtforms-json==0.3.5 - # via apache-superset + # via apache-superset (pyproject.toml) xlrd==2.0.1 # via pandas xlsxwriter==3.0.9 # via - # apache-superset + # apache-superset (pyproject.toml) # pandas zipp==3.21.0 # via importlib-metadata diff --git a/requirements/development.in b/requirements/development.in index c82f20923..99584560e 100644 --- a/requirements/development.in +++ b/requirements/development.in @@ -16,5 +16,4 @@ # specific language governing permissions and limitations # under the License. # --r base.in -e .[development,bigquery,cors,druid,gevent,gsheets,mysql,postgres,presto,prophet,trino,thumbnails] diff --git a/requirements/development.txt b/requirements/development.txt index 41fc32b9e..a4b9ec2b6 100644 --- a/requirements/development.txt +++ b/requirements/development.txt @@ -1,54 +1,294 @@ -# SHA1:9a543d5cd98c8ac766ad556ef5bd59de47834c9e -# -# This file is autogenerated by pip-compile-multi -# To update, run: -# -# pip-compile-multi -# --r base.txt --e file:. +# This file was autogenerated by uv via the following command: +# uv pip compile requirements/development.in -c requirements/base.txt -o requirements/development.txt +-e . + # via -r requirements/development.in +alembic==1.14.0 # via - # -r /Users/max/code/superset/requirements/base.in - # -r requirements/development.in -build==1.2.1 - # via pip-tools + # -c requirements/base.txt + # flask-migrate +amqp==5.3.1 + # via + # -c requirements/base.txt + # kombu +apispec==6.3.0 + # via + # -c requirements/base.txt + # flask-appbuilder +apsw==3.46.0.0 + # via + # -c requirements/base.txt + # shillelagh +async-timeout==4.0.3 + # via + # -c requirements/base.txt + # redis +attrs==24.2.0 + # via + # -c requirements/base.txt + # cattrs + # jsonschema + # requests-cache +babel==2.16.0 + # via + # -c requirements/base.txt + # flask-babel +backoff==2.2.1 + # via + # -c requirements/base.txt + # apache-superset +bcrypt==4.2.1 + # via + # -c requirements/base.txt + # paramiko +billiard==4.2.1 + # via + # -c requirements/base.txt + # celery +blinker==1.9.0 + # via + # -c requirements/base.txt + # flask +bottleneck==1.4.2 + # via + # -c requirements/base.txt + # apache-superset +brotli==1.1.0 + # via + # -c requirements/base.txt + # flask-compress +cachelib==0.9.0 + # via + # -c requirements/base.txt + # flask-caching + # flask-session +cachetools==5.5.0 + # via + # -c requirements/base.txt + # google-auth +cattrs==24.1.2 + # via + # -c requirements/base.txt + # requests-cache +celery==5.4.0 + # via + # -c requirements/base.txt + # apache-superset +certifi==2024.8.30 + # via + # -c requirements/base.txt + # requests +cffi==1.17.1 + # via + # -c requirements/base.txt + # cryptography + # pynacl cfgv==3.4.0 # via pre-commit +charset-normalizer==3.4.0 + # via + # -c requirements/base.txt + # requests +click==8.1.7 + # via + # -c requirements/base.txt + # apache-superset + # celery + # click-didyoumean + # click-option-group + # click-plugins + # click-repl + # flask + # flask-appbuilder +click-didyoumean==0.3.1 + # via + # -c requirements/base.txt + # celery +click-option-group==0.5.6 + # via + # -c requirements/base.txt + # apache-superset +click-plugins==1.1.1 + # via + # -c requirements/base.txt + # celery +click-repl==0.3.0 + # via + # -c requirements/base.txt + # celery cmdstanpy==1.1.0 # via prophet +colorama==0.4.6 + # via + # -c requirements/base.txt + # apache-superset + # flask-appbuilder contourpy==1.0.7 # via matplotlib -coverage[toml]==7.6.8 +coverage==7.6.8 # via pytest-cov +cron-descriptor==1.4.5 + # via + # -c requirements/base.txt + # apache-superset +croniter==5.0.1 + # via + # -c requirements/base.txt + # apache-superset +cryptography==43.0.3 + # via + # -c requirements/base.txt + # apache-superset + # paramiko + # pyopenssl cycler==0.12.1 # via matplotlib db-dtypes==1.3.1 # via pandas-gbq +defusedxml==0.7.1 + # via + # -c requirements/base.txt + # odfpy +deprecated==1.2.15 + # via + # -c requirements/base.txt + # limits +deprecation==2.1.0 + # via + # -c requirements/base.txt + # apache-superset distlib==0.3.8 # via virtualenv +dnspython==2.7.0 + # via + # -c requirements/base.txt + # email-validator docker==7.0.0 # via apache-superset +email-validator==2.2.0 + # via + # -c requirements/base.txt + # flask-appbuilder +et-xmlfile==2.0.0 + # via + # -c requirements/base.txt + # openpyxl +exceptiongroup==1.2.2 + # via + # -c requirements/base.txt + # cattrs + # pytest filelock==3.12.2 # via virtualenv +flask==2.3.3 + # via + # -c requirements/base.txt + # apache-superset + # flask-appbuilder + # flask-babel + # flask-caching + # flask-compress + # flask-cors + # flask-jwt-extended + # flask-limiter + # flask-login + # flask-migrate + # flask-session + # flask-sqlalchemy + # flask-testing + # flask-wtf +flask-appbuilder==4.5.2 + # via + # -c requirements/base.txt + # apache-superset +flask-babel==2.0.0 + # via + # -c requirements/base.txt + # flask-appbuilder +flask-caching==2.3.0 + # via + # -c requirements/base.txt + # apache-superset +flask-compress==1.17 + # via + # -c requirements/base.txt + # apache-superset flask-cors==4.0.0 # via apache-superset +flask-jwt-extended==4.7.1 + # via + # -c requirements/base.txt + # flask-appbuilder +flask-limiter==3.8.0 + # via + # -c requirements/base.txt + # flask-appbuilder +flask-login==0.6.3 + # via + # -c requirements/base.txt + # apache-superset + # flask-appbuilder +flask-migrate==3.1.0 + # via + # -c requirements/base.txt + # apache-superset +flask-session==0.8.0 + # via + # -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 + # -c requirements/base.txt + # apache-superset flask-testing==0.8.1 # via apache-superset +flask-wtf==1.2.2 + # via + # -c requirements/base.txt + # apache-superset + # flask-appbuilder fonttools==4.55.0 # via matplotlib freezegun==1.5.1 # via apache-superset +func-timeout==4.3.5 + # via + # -c requirements/base.txt + # apache-superset future==1.0.0 # via pyhive +geographiclib==2.0 + # via + # -c requirements/base.txt + # geopy +geopy==2.4.1 + # via + # -c requirements/base.txt + # apache-superset gevent==24.2.1 # via apache-superset -google-api-core[grpc]==2.23.0 +google-api-core==2.23.0 # via # google-cloud-bigquery # google-cloud-bigquery-storage # google-cloud-core # pandas-gbq # sqlalchemy-bigquery +google-auth==2.36.0 + # via + # -c requirements/base.txt + # google-api-core + # google-auth-oauthlib + # google-cloud-bigquery + # google-cloud-core + # pandas-gbq + # pydata-google-auth + # shillelagh + # sqlalchemy-bigquery google-auth-oauthlib==1.2.1 # via # pandas-gbq @@ -70,6 +310,12 @@ googleapis-common-protos==1.66.0 # via # google-api-core # grpcio-status +greenlet==3.0.3 + # via + # -c requirements/base.txt + # apache-superset + # gevent + # shillelagh grpcio==1.68.0 # via # apache-superset @@ -77,48 +323,241 @@ grpcio==1.68.0 # grpcio-status grpcio-status==1.60.1 # via google-api-core +gunicorn==23.0.0 + # via + # -c requirements/base.txt + # apache-superset +hashids==1.3.1 + # via + # -c requirements/base.txt + # apache-superset +holidays==0.25 + # via + # -c requirements/base.txt + # apache-superset + # prophet +humanize==4.11.0 + # via + # -c requirements/base.txt + # apache-superset identify==2.5.36 # via pre-commit +idna==3.10 + # via + # -c requirements/base.txt + # email-validator + # requests +importlib-metadata==8.5.0 + # via + # -c requirements/base.txt + # apache-superset +importlib-resources==6.4.5 + # via + # -c requirements/base.txt + # limits + # prophet iniconfig==2.0.0 # via pytest +isodate==0.7.2 + # via + # -c requirements/base.txt + # apache-superset +itsdangerous==2.2.0 + # via + # -c requirements/base.txt + # flask + # flask-wtf +jinja2==3.1.4 + # via + # -c requirements/base.txt + # flask + # flask-babel +jsonpath-ng==1.7.0 + # via + # -c requirements/base.txt + # apache-superset +jsonschema==4.17.3 + # via + # -c requirements/base.txt + # flask-appbuilder + # jsonschema-spec + # openapi-schema-validator + # openapi-spec-validator jsonschema-spec==0.1.6 # via openapi-spec-validator kiwisolver==1.4.7 # via matplotlib +kombu==5.4.2 + # via + # -c requirements/base.txt + # celery +korean-lunar-calendar==0.3.1 + # via + # -c requirements/base.txt + # holidays lazy-object-proxy==1.10.0 # via openapi-spec-validator +limits==3.13.0 + # via + # -c requirements/base.txt + # flask-limiter +mako==1.3.6 + # via + # -c requirements/base.txt + # alembic + # apache-superset +markdown==3.7 + # via + # -c requirements/base.txt + # apache-superset +markdown-it-py==3.0.0 + # via + # -c requirements/base.txt + # rich +markupsafe==3.0.2 + # via + # -c requirements/base.txt + # jinja2 + # mako + # werkzeug + # wtforms +marshmallow==3.23.1 + # via + # -c requirements/base.txt + # flask-appbuilder + # marshmallow-sqlalchemy +marshmallow-sqlalchemy==0.28.2 + # via + # -c requirements/base.txt + # flask-appbuilder matplotlib==3.9.0 # via prophet +mdurl==0.1.2 + # via + # -c requirements/base.txt + # markdown-it-py +msgpack==1.0.8 + # via + # -c requirements/base.txt + # apache-superset +msgspec==0.18.6 + # via + # -c requirements/base.txt + # flask-session mysqlclient==2.2.6 # via apache-superset +nh3==0.2.19 + # via + # -c requirements/base.txt + # apache-superset nodeenv==1.8.0 # via pre-commit +numpy==1.23.5 + # via + # -c requirements/base.txt + # apache-superset + # bottleneck + # cmdstanpy + # contourpy + # db-dtypes + # matplotlib + # pandas + # pandas-gbq + # prophet + # pyarrow oauthlib==3.2.2 # via requests-oauthlib +odfpy==1.4.1 + # via + # -c requirements/base.txt + # pandas openapi-schema-validator==0.4.4 # via openapi-spec-validator openapi-spec-validator==0.5.6 # via apache-superset +openpyxl==3.1.5 + # via + # -c requirements/base.txt + # pandas +ordered-set==4.1.0 + # via + # -c requirements/base.txt + # flask-limiter +packaging==24.2 + # via + # -c requirements/base.txt + # apache-superset + # apispec + # db-dtypes + # deprecation + # docker + # google-cloud-bigquery + # gunicorn + # limits + # marshmallow + # marshmallow-sqlalchemy + # matplotlib + # pytest + # shillelagh + # sqlalchemy-bigquery +pandas==2.0.3 + # via + # -c requirements/base.txt + # apache-superset + # cmdstanpy + # db-dtypes + # pandas-gbq + # prophet pandas-gbq==0.19.1 # via apache-superset parameterized==0.9.0 # via apache-superset +paramiko==3.5.0 + # via + # -c requirements/base.txt + # apache-superset + # sshtunnel +parsedatetime==2.6 + # via + # -c requirements/base.txt + # apache-superset pathable==0.4.3 # via jsonschema-spec +pgsanity==0.2.9 + # via + # -c requirements/base.txt + # apache-superset pillow==10.3.0 # via # apache-superset # matplotlib -pip-compile-multi==2.6.3 - # via apache-superset -pip-tools==7.4.1 - # via pip-compile-multi +platformdirs==3.8.1 + # via + # -c requirements/base.txt + # requests-cache + # virtualenv pluggy==1.5.0 # via pytest +ply==3.11 + # via + # -c requirements/base.txt + # jsonpath-ng +polyline==2.0.2 + # via + # -c requirements/base.txt + # apache-superset pre-commit==4.0.1 # via apache-superset +prison==0.2.1 + # via + # -c requirements/base.txt + # flask-appbuilder progress==1.6 # via apache-superset +prompt-toolkit==3.0.48 + # via + # -c requirements/base.txt + # click-repl prophet==1.1.5 # via apache-superset proto-plus==1.25.0 @@ -136,20 +575,64 @@ psutil==6.1.0 # via apache-superset psycopg2-binary==2.9.6 # via apache-superset +pyarrow==14.0.2 + # via + # -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.1 + # via + # -c requirements/base.txt + # google-auth + # python-ldap +pycparser==2.22 + # via + # -c requirements/base.txt + # cffi pydata-google-auth==1.9.0 # via pandas-gbq pydruid==0.6.9 # via apache-superset pyfakefs==5.3.5 # via apache-superset -pyhive[presto]==0.7.0 +pygments==2.18.0 + # via + # -c requirements/base.txt + # rich +pyhive==0.7.0 # via apache-superset pyinstrument==4.4.0 # via apache-superset -pyproject-hooks==1.2.0 +pyjwt==2.10.1 # via - # build - # pip-tools + # -c requirements/base.txt + # apache-superset + # flask-appbuilder + # flask-jwt-extended +pynacl==1.5.0 + # via + # -c requirements/base.txt + # paramiko +pyopenssl==24.2.1 + # via + # -c requirements/base.txt + # shillelagh +pyparsing==3.2.0 + # via + # -c requirements/base.txt + # apache-superset + # matplotlib +pyrsistent==0.20.0 + # via + # -c requirements/base.txt + # jsonschema pytest==7.4.4 # via # apache-superset @@ -159,45 +642,248 @@ pytest-cov==6.0.0 # via apache-superset pytest-mock==3.10.0 # via apache-superset +python-dateutil==2.9.0.post0 + # via + # -c requirements/base.txt + # apache-superset + # celery + # croniter + # flask-appbuilder + # freezegun + # google-cloud-bigquery + # holidays + # matplotlib + # pandas + # pyhive + # shillelagh + # trino +python-dotenv==1.0.1 + # via + # -c requirements/base.txt + # apache-superset +python-geohash==0.8.5 + # via + # -c requirements/base.txt + # apache-superset python-ldap==3.4.4 # via apache-superset +pytz==2024.2 + # via + # -c requirements/base.txt + # croniter + # flask-babel + # pandas + # trino +pyxlsb==1.0.10 + # via + # -c requirements/base.txt + # pandas +pyyaml==6.0.2 + # via + # -c requirements/base.txt + # apache-superset + # apispec + # jsonschema-spec + # pre-commit +redis==4.6.0 + # via + # -c requirements/base.txt + # apache-superset +requests==2.32.2 + # via + # -c requirements/base.txt + # docker + # google-api-core + # google-cloud-bigquery + # jsonschema-spec + # pydruid + # pyhive + # requests-cache + # requests-oauthlib + # shillelagh + # trino +requests-cache==1.2.0 + # via + # -c requirements/base.txt + # shillelagh requests-oauthlib==2.0.0 # via google-auth-oauthlib rfc3339-validator==0.1.4 # via openapi-schema-validator +rich==13.9.4 + # via + # -c requirements/base.txt + # flask-limiter +rsa==4.9 + # via + # -c requirements/base.txt + # google-auth ruff==0.8.0 # via apache-superset +selenium==3.141.0 + # via + # -c requirements/base.txt + # apache-superset +setuptools==75.6.0 + # via + # nodeenv + # pandas-gbq + # pydata-google-auth + # zope-event + # zope-interface +shillelagh==1.2.18 + # via + # -c requirements/base.txt + # apache-superset +shortid==0.1.2 + # via + # -c requirements/base.txt + # apache-superset +simplejson==3.19.3 + # via + # -c requirements/base.txt + # apache-superset +six==1.16.0 + # via + # -c requirements/base.txt + # prison + # python-dateutil + # rfc3339-validator + # url-normalize + # wtforms-json +slack-sdk==3.33.4 + # via + # -c requirements/base.txt + # apache-superset +sqlalchemy==1.4.54 + # via + # -c requirements/base.txt + # alembic + # apache-superset + # flask-appbuilder + # flask-sqlalchemy + # marshmallow-sqlalchemy + # shillelagh + # sqlalchemy-bigquery + # sqlalchemy-utils sqlalchemy-bigquery==1.12.0 # via apache-superset +sqlalchemy-utils==0.38.3 + # via + # -c requirements/base.txt + # apache-superset + # flask-appbuilder +sqlglot==25.24.5 + # via + # -c requirements/base.txt + # apache-superset sqloxide==0.1.51 # via apache-superset +sqlparse==0.5.2 + # via + # -c requirements/base.txt + # apache-superset +sshtunnel==0.4.0 + # via + # -c requirements/base.txt + # apache-superset statsd==4.0.1 # via apache-superset -tomli==2.1.0 +tabulate==0.8.10 + # via + # -c requirements/base.txt + # apache-superset +tomli==2.2.1 # via - # build # coverage - # pip-tools # pytest -toposort==1.10 - # via pip-compile-multi tqdm==4.67.1 # via # cmdstanpy # prophet trino==0.330.0 # via apache-superset +typing-extensions==4.12.2 + # via + # -c requirements/base.txt + # alembic + # apache-superset + # cattrs + # flask-limiter + # limits + # rich + # shillelagh +tzdata==2024.2 + # via + # -c requirements/base.txt + # celery + # kombu + # pandas tzlocal==5.2 # via trino +url-normalize==1.4.3 + # via + # -c requirements/base.txt + # requests-cache +urllib3==1.26.18 + # via + # -c requirements/base.txt + # docker + # requests + # requests-cache + # selenium +vine==5.1.0 + # via + # -c requirements/base.txt + # amqp + # celery + # kombu virtualenv==20.23.1 # via pre-commit -wheel==0.45.1 - # via pip-tools +wcwidth==0.2.13 + # via + # -c requirements/base.txt + # prompt-toolkit +werkzeug==3.1.3 + # via + # -c requirements/base.txt + # flask + # flask-appbuilder + # flask-jwt-extended + # flask-login +wrapt==1.17.0 + # via + # -c requirements/base.txt + # deprecated +wtforms==3.2.1 + # via + # -c requirements/base.txt + # apache-superset + # flask-appbuilder + # flask-wtf + # wtforms-json +wtforms-json==0.3.5 + # via + # -c requirements/base.txt + # apache-superset +xlrd==2.0.1 + # via + # -c requirements/base.txt + # pandas +xlsxwriter==3.0.9 + # via + # -c requirements/base.txt + # apache-superset + # pandas +zipp==3.21.0 + # via + # -c requirements/base.txt + # importlib-metadata zope-event==5.0 # via gevent zope-interface==5.4.0 # via gevent - -# The following packages are considered to be unsafe in a requirements file: -# pip -# setuptools +zstandard==0.23.0 + # via + # -c requirements/base.txt + # flask-compress diff --git a/requirements/translations.txt b/requirements/translations.txt index 4eab2d21f..cc863d50f 100644 --- a/requirements/translations.txt +++ b/requirements/translations.txt @@ -1,9 +1,4 @@ -# SHA1:cad160f3d4cd7c33896f42a479eeaa1b5bedc5fb -# -# This file is autogenerated by pip-compile-multi -# To update, run: -# -# pip-compile-multi -# +# This file was autogenerated by uv via the following command: +# uv pip compile requirements/translations.in -o requirements/translations.txt babel==2.16.0 # via -r requirements/translations.in diff --git a/scripts/uv-pip-compile.sh b/scripts/uv-pip-compile.sh new file mode 100755 index 000000000..dd1208ec2 --- /dev/null +++ b/scripts/uv-pip-compile.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +# +# 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. +# + +set -e + +ADDITIONAL_ARGS="$@" + +# Generate the requirements/base.txt file +uv pip compile pyproject.toml requirements/base.in -o requirements/base.txt $ADDITIONAL_ARGS + +# Generate the requirements/development.txt file, making sure requirements/base.txt is a constraint to keep the versions in sync +uv pip compile requirements/development.in -c requirements/base.txt -o requirements/development.txt $ADDITIONAL_ARGS + +uv pip compile requirements/translations.in -o requirements/translations.txt $ADDITIONAL_ARGS