Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pyproject-api for openSUSE:Factory checked in at 2025-07-09 17:27:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pyproject-api (Old) and /work/SRC/openSUSE:Factory/.python-pyproject-api.new.7373 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyproject-api" Wed Jul 9 17:27:11 2025 rev:4 rq:1291241 version:1.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pyproject-api/python-pyproject-api.changes 2023-11-09 21:36:14.982772161 +0100 +++ /work/SRC/openSUSE:Factory/.python-pyproject-api.new.7373/python-pyproject-api.changes 2025-07-09 17:27:50.922150580 +0200 @@ -1,0 +2,13 @@ +Tue Jul 8 11:46:40 UTC 2025 - Dirk Müller <dmuel...@suse.com> + +- update to 1.8.0: + * really drop python<3 support +- update to 1.7.2: + * Improve the CI +- update to 1.7.1: + * Move changelog to GH releases +- update to 1.7.0: + * docs: correct Homepage URL + * Bump and fix CI for new setuptools + +------------------------------------------------------------------- Old: ---- pyproject_api-1.6.1.tar.gz New: ---- pyproject_api-1.8.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pyproject-api.spec ++++++ --- /var/tmp/diff_new_pack.oRg6Fe/_old 2025-07-09 17:27:51.342168056 +0200 +++ /var/tmp/diff_new_pack.oRg6Fe/_new 2025-07-09 17:27:51.346168223 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-pyproject-api # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-pyproject-api -Version: 1.6.1 +Version: 1.8.0 Release: 0 Summary: API to interact with the python pyproject.toml based projects License: MIT @@ -28,28 +28,22 @@ BuildRequires: %{python_module hatch >= 0.3} BuildRequires: %{python_module hatch-vcs >= 0.3} BuildRequires: %{python_module hatchling >= 1.18} -BuildRequires: %{python_module importlib-metadata >= 6 if %python-base < 3.8} -BuildRequires: %{python_module packaging >= 23.1} +BuildRequires: %{python_module packaging >= 24.1} BuildRequires: %{python_module pip} -BuildRequires: %{python_module setuptools >= 68.1.2} +BuildRequires: %{python_module setuptools >= 75.1} BuildRequires: %{python_module setuptools_scm} -BuildRequires: %{python_module tomli >= 2.0.1 if %python-base < 3.11} BuildRequires: %{python_module wheel >= 0.41.2} BuildRequires: fdupes BuildRequires: python-rpm-macros BuildRequires: unzip -BuildRequires: (python36-importlib-metadata >= 6 if python36-base) -Requires: python-packaging >= 23 -Requires: (python-importlib-metadata >= 6 if python3-base < 3.8) -Requires: (python-tomli >= 2.0.1 if python3-base < 3.11) +Requires: python-packaging >= 24.1 BuildArch: noarch # SECTION testing= # (except for pytest-cov and -randomly) BuildRequires: %{python_module covdefaults >= 2.3} -BuildRequires: %{python_module pytest >= 7.4} -BuildRequires: %{python_module pytest-cov >= 4.1} -BuildRequires: %{python_module pytest-mock >= 3.11.1} -BuildRequires: %{python_module virtualenv >= 20.17.1} +BuildRequires: %{python_module pytest >= 8.3.3} +BuildRequires: %{python_module pytest-cov >= 5} +BuildRequires: %{python_module pytest-mock >= 3.14} # /SECTION %python_subpackages @@ -78,7 +72,7 @@ %files %{python_files} %license LICENSE -%doc README.md docs/changelog.rst +%doc README.md %{python_sitelib}/pyproject_api-%{version}*-info %{python_sitelib}/pyproject_api ++++++ pyproject_api-1.6.1.tar.gz -> pyproject_api-1.8.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/.github/workflows/check.yaml new/pyproject_api-1.8.0/.github/workflows/check.yaml --- old/pyproject_api-1.6.1/.github/workflows/check.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/.github/workflows/check.yaml 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1,65 @@ +name: check +on: + workflow_dispatch: + push: + branches: ["main"] + tags-ignore: ["**"] + pull_request: + schedule: + - cron: "0 8 * * *" + +concurrency: + group: check-${{ github.ref }} + cancel-in-progress: true + +jobs: + test: + name: test ${{ matrix.env }} - ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + env: + - "3.13" + - "3.12" + - "3.11" + - "3.10" + - "3.9" + - "3.8" + - type + - dev + - pkg_meta + os: + - ubuntu-latest + - windows-latest + - macos-latest + exclude: + - { os: macos-latest, env: "type" } + - { os: macos-latest, env: "dev" } + - { os: macos-latest, env: "pkg_meta" } + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install the latest version of uv + uses: astral-sh/setup-uv@v3 + with: + enable-cache: true + cache-dependency-glob: "pyproject.toml" + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Add .local/bin to Windows PATH + if: runner.os == 'Windows' + shell: bash + run: echo "$USERPROFILE/.local/bin" >> $GITHUB_PATH + - name: Install tox + run: uv tool install --python-preference only-managed --python 3.13 tox --with tox-uv + - name: Install Python + if: startsWith(matrix.env, '3.') && matrix.env != '3.13' + run: uv python install --python-preference only-managed ${{ matrix.env }} + - name: Setup test suite + run: tox run -vv --notest --skip-missing-interpreters false -e ${{ matrix.env }} + - name: Run test suite + run: tox run --skip-pkg-install -e ${{ matrix.env }} + env: + PYTEST_ADDOPTS: "-vv --durations=20" + DIFF_AGAINST: HEAD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/.github/workflows/check.yml new/pyproject_api-1.8.0/.github/workflows/check.yml --- old/pyproject_api-1.6.1/.github/workflows/check.yml 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/.github/workflows/check.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,90 +0,0 @@ -name: check -on: - push: - tags-ignore: ["**"] - pull_request: - schedule: - - cron: "0 8 * * *" - -concurrency: - group: check-${{ github.ref }} - cancel-in-progress: true - -jobs: - test: - name: test ${{ matrix.py }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - py: - - "3.12.0-rc.1" - - "3.11" - - "3.10" - - "3.9" - - "3.8" - os: - - ubuntu-latest - - windows-latest - - macos-latest - steps: - - name: Setup python for tox - uses: actions/setup-python@v4 - with: - python-version: "3.11" - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Install tox - run: python -m pip install tox - - name: Setup python for test ${{ matrix.py }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.py }} - - name: Pick environment to run - run: | - import os; import platform; import sys; from pathlib import Path - env = f'TOXENV=py{"" if platform.python_implementation() == "CPython" else "py"}3{sys.version_info.minor}' - print(f"Picked: {env} for {sys.version} based of {sys.executable}") - with Path(os.environ["GITHUB_ENV"]).open("ta") as file_handler: - file_handler.write(env) - shell: python - - name: Setup test suite - run: tox -vv --notest - - name: Run test suite - run: tox --skip-pkg-install - env: - PYTEST_ADDOPTS: "-vv --durations=20" - CI_RUN: "yes" - DIFF_AGAINST: HEAD - - check: - name: tox env ${{ matrix.tox_env }} on ${{ matrix.os }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - tox_env: - - type - - dev - - docs - - pkg_meta - os: - - ubuntu-latest - - windows-latest - exclude: - - { os: windows-latest, tox_env: pkg_meta } - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Setup Python 3.11 - uses: actions/setup-python@v4 - with: - python-version: "3.11" - - name: Install tox - run: python -m pip install tox - - name: Run check for ${{ matrix.tox_env }} - run: tox -e ${{ matrix.tox_env }} - env: - UPGRADE_ADVISORY: "yes" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/.github/workflows/release.yaml new/pyproject_api-1.8.0/.github/workflows/release.yaml --- old/pyproject_api-1.6.1/.github/workflows/release.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/.github/workflows/release.yaml 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1,48 @@ +name: Release to PyPI +on: + push: + tags: ["*"] + +env: + dists-artifact-name: python-package-distributions + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install the latest version of uv + uses: astral-sh/setup-uv@v3 + with: + enable-cache: true + cache-dependency-glob: "pyproject.toml" + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Build package + run: uv build --python 3.13 --python-preference only-managed --sdist --wheel . --out-dir dist + - name: Store the distribution packages + uses: actions/upload-artifact@v4 + with: + name: ${{ env.dists-artifact-name }} + path: dist/* + + release: + needs: + - build + runs-on: ubuntu-latest + environment: + name: release + url: https://pypi.org/project/pyproject-api/${{ github.ref_name }} + permissions: + id-token: write + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + name: ${{ env.dists-artifact-name }} + path: dist/ + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@v1.10.1 + with: + attestations: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/.github/workflows/release.yml new/pyproject_api-1.8.0/.github/workflows/release.yml --- old/pyproject_api-1.6.1/.github/workflows/release.yml 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/.github/workflows/release.yml 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -name: Release to PyPI -on: - push: - tags: ["*"] - -jobs: - release: - runs-on: ubuntu-latest - environment: - name: release - url: https://pypi.org/p/pyproject-api - permissions: - id-token: write - steps: - - name: Setup python to build package - uses: actions/setup-python@v4 - with: - python-version: "3.11" - - name: Install build - run: python -m pip install build - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Build package - run: pyproject-build -s -w . -o dist - - name: Publish to PyPI - uses: pypa/gh-action-pypi-publish@v1.8.10 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/.pre-commit-config.yaml new/pyproject_api-1.8.0/.pre-commit-config.yaml --- old/pyproject_api-1.6.1/.pre-commit-config.yaml 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/.pre-commit-config.yaml 2020-02-02 01:00:00.000000000 +0100 @@ -1,43 +1,34 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.6.0 hooks: - id: end-of-file-fixer - id: trailing-whitespace - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.0.286" + - repo: https://github.com/python-jsonschema/check-jsonschema + rev: 0.29.2 hooks: - - id: ruff - exclude: src/pyproject_api/_backend.py - args: [--fix, --exit-non-zero-on-fix] - - repo: https://github.com/psf/black - rev: 23.7.0 + - id: check-github-workflows + args: [ "--verbose" ] + - repo: https://github.com/codespell-project/codespell + rev: v2.3.0 hooks: - - id: black + - id: codespell + additional_dependencies: ["tomli>=2.0.1"] - repo: https://github.com/tox-dev/tox-ini-fmt - rev: "1.3.1" + rev: "1.4.0" hooks: - id: tox-ini-fmt args: ["-p", "fix"] - repo: https://github.com/tox-dev/pyproject-fmt - rev: "1.1.0" + rev: "2.2.3" hooks: - id: pyproject-fmt - additional_dependencies: ["tox>=4.10"] - - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.0.2" - hooks: - - id: prettier - args: ["--print-width=120", "--prose-wrap=always"] - - repo: https://github.com/asottile/blacken-docs - rev: 1.16.0 - hooks: - - id: blacken-docs - additional_dependencies: [black==23.7] - - repo: https://github.com/pre-commit/pygrep-hooks - rev: v1.10.0 + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: "v0.6.5" hooks: - - id: rst-backticks + - id: ruff-format + - id: ruff + args: ["--fix", "--unsafe-fixes", "--exit-non-zero-on-fix"] - repo: meta hooks: - id: check-hooks-apply diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/PKG-INFO new/pyproject_api-1.8.0/PKG-INFO --- old/pyproject_api-1.6.1/PKG-INFO 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/PKG-INFO 2020-02-02 01:00:00.000000000 +0100 @@ -1,8 +1,9 @@ -Metadata-Version: 2.1 +Metadata-Version: 2.3 Name: pyproject-api -Version: 1.6.1 +Version: 1.8.0 Summary: API to interact with the python pyproject.toml based projects -Project-URL: Homepage, http://pyproject_api.readthedocs.org +Project-URL: Changelog, https://github.com/tox-dev/pyproject-api/releases +Project-URL: Homepage, https://pyproject-api.readthedocs.io Project-URL: Source, https://github.com/tox-dev/pyproject-api Project-URL: Tracker, https://github.com/tox-dev/pyproject-api/issues Author-email: Bernát Gábor <gaborjber...@gmail.com> @@ -23,23 +24,22 @@ Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Software Development :: Testing Classifier: Topic :: Utilities Requires-Python: >=3.8 -Requires-Dist: packaging>=23.1 +Requires-Dist: packaging>=24.1 Requires-Dist: tomli>=2.0.1; python_version < '3.11' Provides-Extra: docs -Requires-Dist: furo>=2023.8.19; extra == 'docs' -Requires-Dist: sphinx-autodoc-typehints>=1.24; extra == 'docs' -Requires-Dist: sphinx<7.2; extra == 'docs' +Requires-Dist: furo>=2024.8.6; extra == 'docs' +Requires-Dist: sphinx-autodoc-typehints>=2.4.1; extra == 'docs' Provides-Extra: testing Requires-Dist: covdefaults>=2.3; extra == 'testing' -Requires-Dist: pytest-cov>=4.1; extra == 'testing' -Requires-Dist: pytest-mock>=3.11.1; extra == 'testing' -Requires-Dist: pytest>=7.4; extra == 'testing' -Requires-Dist: setuptools>=68.1.2; extra == 'testing' -Requires-Dist: wheel>=0.41.2; extra == 'testing' +Requires-Dist: pytest-cov>=5; extra == 'testing' +Requires-Dist: pytest-mock>=3.14; extra == 'testing' +Requires-Dist: pytest>=8.3.3; extra == 'testing' +Requires-Dist: setuptools>=75.1; extra == 'testing' Description-Content-Type: text/markdown # [`pyproject-api`](https://pyproject-api.readthedocs.io/en/latest/) @@ -48,7 +48,5 @@ [](https://pypi.org/project/pyproject-api/) [](https://pepy.tech/project/pyproject-api) -[](https://github.com/tox-dev/pyproject-api/actions/workflows/check.yml) -[](https://github.com/psf/black) +[](https://github.com/tox-dev/pyproject-api/actions/workflows/check.yaml) [](https://pyproject-api.readthedocs.io/en/latest/?badge=latest) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/README.md new/pyproject_api-1.8.0/README.md --- old/pyproject_api-1.6.1/README.md 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/README.md 2020-02-02 01:00:00.000000000 +0100 @@ -4,7 +4,5 @@ [](https://pypi.org/project/pyproject-api/) [](https://pepy.tech/project/pyproject-api) -[](https://github.com/tox-dev/pyproject-api/actions/workflows/check.yml) -[](https://github.com/psf/black) +[](https://github.com/tox-dev/pyproject-api/actions/workflows/check.yaml) [](https://pyproject-api.readthedocs.io/en/latest/?badge=latest) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/docs/api.rst new/pyproject_api-1.8.0/docs/api.rst --- old/pyproject_api-1.6.1/docs/api.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/docs/api.rst 2020-02-02 01:00:00.000000000 +0100 @@ -0,0 +1,59 @@ + +API ++++ + +.. currentmodule:: pyproject_api + +.. autodata:: __version__ + +Frontend +-------- +.. autoclass:: Frontend + +.. autoclass:: OptionalHooks + +Exceptions +---------- + +Backend failed +~~~~~~~~~~~~~~ +.. autoclass:: BackendFailed + +Results +------- + +Build source distribution requires +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. autoclass:: RequiresBuildSdistResult + +Build wheel requires +~~~~~~~~~~~~~~~~~~~~ +.. autoclass:: RequiresBuildWheelResult + +Editable requires +~~~~~~~~~~~~~~~~~ +.. autoclass:: RequiresBuildEditableResult + +Wheel metadata +~~~~~~~~~~~~~~ +.. autoclass:: MetadataForBuildWheelResult + +Editable metadata +~~~~~~~~~~~~~~~~~ +.. autoclass:: MetadataForBuildEditableResult + +Source distribution +~~~~~~~~~~~~~~~~~~~ +.. autoclass:: SdistResult + +Editable +~~~~~~~~ +.. autoclass:: EditableResult + +Wheel +~~~~~ +.. autoclass:: WheelResult + +Fresh subprocess frontend +------------------------- +.. autoclass:: SubprocessFrontend diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/docs/changelog.rst new/pyproject_api-1.8.0/docs/changelog.rst --- old/pyproject_api-1.6.1/docs/changelog.rst 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/docs/changelog.rst 1970-01-01 01:00:00.000000000 +0100 @@ -1,77 +0,0 @@ -Release History -=============== - -v1.6.1 - (2023-08-29) ---------------------- -- Fix :meth:`pyproject_api.Frontend.metadata_from_built` only extracts one of the dist info files. - -v1.6.0 - (2023-08-29) ---------------------- -- Remove ``build_<wheel|editable>`` from ``prepare_metadata_for_build_<wheel|editable>`` to allow separate config - parametrization and instead add :meth:`pyproject_api.Frontend.metadata_from_built` the user can call when the prepare - fails. Pass ``None`` for ``metadata_directory`` for such temporary wheel builds. - -v1.5.4 - (2023-08-17) ---------------------- -- Make sure that the order of Requires-Dist does not matter - -v1.5.3 - (2023-07-06) ---------------------- -- Fix ``read_line`` to raise ``EOFError`` if nothing was read - -v1.5.2 - (2023-06-14) ---------------------- -- Use ruff for linting. -- Drop 2.7 test run. - -v1.5.1 - (2023-03-12) ---------------------- -- docs: set html_last_updated_fmt to format string - -v1.5.0 - (2023-01-17) ---------------------- -- When getting metadata from a built wheel, do not pass ``metadata_directory`` - to ``build_wheel``, which forces the backend to generate the metadata - by :user:`masenf`. - (`#47 <https://github.com/tox-dev/pyproject-api/issues/47>`_) - -v1.4.0 - (2022-01-04) ---------------------- -- Add minimal CLI for debugging - -v1.3.0 - (2022-01-03) ---------------------- -- Do not allow exceptions to propagate in backend - -v1.2.1 - (2022-12-04) ---------------------- -- Fix Python 2 incompatibility on the backend -- Allow skipping prepare metadata for the full build by returning None as basename - -v1.2.0 - (2022-12-04) ---------------------- -- Expose which optional hooks are present or missing via :meth:`pyproject_api.Frontend.optional_hooks` - -v1.1.2 - (2022-10-30) ---------------------- -- Fix editable classes not exported at root level - -v1.1.1 - (2022-09-10) ---------------------- -- Add missed ``wheel`` as test dependency - -v1.1.0 - (2022-09-10) ---------------------- -- PEP-660 support - -v1.0.0 - (2022-09-10) ---------------------- -- Use hatchling as build backend -- 3.11 support - -v0.0.1 - (2021-12-30) ---------------------- -- Drop Python 3.6 support - -v0.1.0 - (2021-10-21) ---------------------- -- first version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/docs/index.rst new/pyproject_api-1.8.0/docs/index.rst --- old/pyproject_api-1.6.1/docs/index.rst 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/docs/index.rst 2020-02-02 01:00:00.000000000 +0100 @@ -3,67 +3,8 @@ ``pyproject-api`` aims to abstract away interaction with ``pyproject.toml`` style projects in a flexible way. -API -+++ - -.. currentmodule:: pyproject_api - -.. autodata:: __version__ - -Frontend --------- -.. autoclass:: Frontend - -.. autoclass:: OptionalHooks - -Exceptions ----------- - -Backend failed -~~~~~~~~~~~~~~ -.. autoclass:: BackendFailed - -Results -------- - -Build source distribution requires -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. autoclass:: RequiresBuildSdistResult - -Build wheel requires -~~~~~~~~~~~~~~~~~~~~ -.. autoclass:: RequiresBuildWheelResult - -Editable requires -~~~~~~~~~~~~~~~~~ -.. autoclass:: RequiresBuildEditableResult - -Wheel metadata -~~~~~~~~~~~~~~ -.. autoclass:: MetadataForBuildWheelResult - -Editable metadata -~~~~~~~~~~~~~~~~~ -.. autoclass:: MetadataForBuildEditableResult - -Source distribution -~~~~~~~~~~~~~~~~~~~ -.. autoclass:: SdistResult - -Editable -~~~~~~~~ -.. autoclass:: EditableResult - -Wheel -~~~~~ -.. autoclass:: WheelResult - -Fresh subprocess frontend -------------------------- -.. autoclass:: SubprocessFrontend - .. toctree:: :hidden: self - changelog + api diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/pyproject.toml new/pyproject_api-1.8.0/pyproject.toml --- old/pyproject_api-1.6.1/pyproject.toml 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100 @@ -1,8 +1,8 @@ [build-system] build-backend = "hatchling.build" requires = [ - "hatch-vcs>=0.3", - "hatchling>=1.18", + "hatch-vcs>=0.4", + "hatchling>=1.25", ] [project] @@ -17,8 +17,12 @@ "virtual", ] license = "MIT" -maintainers = [{ name = "Bernát Gábor", email = "gaborjber...@gmail.com" }] -authors = [{ name = "Bernát Gábor", email = "gaborjber...@gmail.com" }] +maintainers = [ + { name = "Bernát Gábor", email = "gaborjber...@gmail.com" }, +] +authors = [ + { name = "Bernát Gábor", email = "gaborjber...@gmail.com" }, +] requires-python = ">=3.8" classifiers = [ "Development Status :: 5 - Production/Stable", @@ -34,6 +38,7 @@ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Testing", "Topic :: Utilities", @@ -42,23 +47,22 @@ "version", ] dependencies = [ - "packaging>=23.1", - 'tomli>=2.0.1; python_version < "3.11"', + "packaging>=24.1", + "tomli>=2.0.1; python_version<'3.11'", ] optional-dependencies.docs = [ - "furo>=2023.8.19", - "sphinx<7.2", - "sphinx-autodoc-typehints>=1.24", + "furo>=2024.8.6", + "sphinx-autodoc-typehints>=2.4.1", ] optional-dependencies.testing = [ "covdefaults>=2.3", - "pytest>=7.4", - "pytest-cov>=4.1", - "pytest-mock>=3.11.1", - "setuptools>=68.1.2", - "wheel>=0.41.2", + "pytest>=8.3.3", + "pytest-cov>=5", + "pytest-mock>=3.14", + "setuptools>=75.1", ] -urls.Homepage = "http://pyproject_api.readthedocs.org" +urls.Changelog = "https://github.com/tox-dev/pyproject-api/releases" +urls.Homepage = "https://pyproject-api.readthedocs.io" urls.Source = "https://github.com/tox-dev/pyproject-api" urls.Tracker = "https://github.com/tox-dev/pyproject-api/issues" @@ -66,32 +70,63 @@ build.hooks.vcs.version-file = "src/pyproject_api/_version.py" version.source = "vcs" -[tool.black] -line-length = 120 - [tool.ruff] -select = ["ALL"] -line-length = 120 target-version = "py38" -isort = {known-first-party = ["pyproject_api"], required-imports = ["from __future__ import annotations"]} -ignore = [ - "INP001", # no implicit namespaces here - "ANN101", # Missing type annotation for `self` in method - "ANN102", # Missing type annotation for `cls` in classmethod" - "ANN401", # Dynamically typed expressions - "D203", # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible - "D212", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible - "S104", # Possible binding to all interface -] -[tool.ruff.per-file-ignores] -"tests/**/*.py" = [ - "S101", # asserts allowed in tests... - "FBT", # don"t care about booleans as positional arguments in tests - "INP001", # no implicit namespace - "D", # don"t care about documentation in tests - "S603", # `subprocess` call: check for execution of untrusted input - "PLR2004", # Magic value used in comparison, consider replacing with a constant variable -] +line-length = 120 +format.preview = true +format.docstring-code-line-length = 100 +format.docstring-code-format = true +lint.select = [ + "ALL", +] +lint.ignore = [ + "ANN101", # Missing type annotation for `self` in method + "ANN102", # Missing type annotation for `cls` in classmethod + "ANN401", # Dynamically typed expressions + "COM812", # Conflict with formatter + "CPY", # No copyright statements + "D203", # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible + "D212", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible + "DOC", # no restructuredtext support + "INP001", # no implicit namespaces here + "ISC001", # Conflict with formatter + "S104", # Possible binding to all interface +] +lint.per-file-ignores."src/pyproject_api/_backend.py" = [ + "ANN", + "I002", + "T201", + "UP", +] # no type annotations +lint.per-file-ignores."src/pyproject_api/_backend.pyi" = [ + "E301", + "E302", +] # https://github.com/astral-sh/ruff/issues/10077 +lint.per-file-ignores."tests/**/*.py" = [ + "D", # don't care about documentation in tests + "FBT", # don't care about booleans as positional arguments in tests + "INP001", # no implicit namespace + "PLC2701", # private imports + "PLR0913", # too many positional arguments + "PLR0917", # too many positional arguments + "PLR2004", # Magic value used in comparison, consider replacing with a constant variable + "S101", # asserts allowed in tests + "S603", # `subprocess` call: check for execution of untrusted input +] +lint.isort = { known-first-party = [ + "pyproject_api", +], required-imports = [ + "from __future__ import annotations", +] } +lint.preview = true + +[tool.codespell] +builtin = "clear,usage,en-GB_to_en-US" +write-changes = true +count = true + +[tool.pyproject-fmt] +max_supported_python = "3.13" [tool.coverage] html.show_contexts = true @@ -104,12 +139,19 @@ "*/src", "*\\src", ] -report.omit = [] +report.omit = [ +] run.parallel = true -run.plugins = ["covdefaults"] +run.plugins = [ + "covdefaults", +] [tool.mypy] -python_version = "3.11" +python_version = "3.12" show_error_codes = true strict = true -overrides = [{ module = ["virtualenv.*"], ignore_missing_imports = true }] +overrides = [ + { module = [ + "virtualenv.*", + ], ignore_missing_imports = true }, +] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/src/pyproject_api/__init__.py new/pyproject_api-1.8.0/src/pyproject_api/__init__.py --- old/pyproject_api-1.6.1/src/pyproject_api/__init__.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/src/pyproject_api/__init__.py 2020-02-02 01:00:00.000000000 +0100 @@ -1,4 +1,5 @@ """PyProject API interface.""" + from __future__ import annotations from ._frontend import ( @@ -22,18 +23,18 @@ __version__ = version __all__ = [ - "__version__", - "Frontend", "BackendFailed", "CmdStatus", + "EditableResult", + "Frontend", + "MetadataForBuildEditableResult", + "MetadataForBuildWheelResult", + "OptionalHooks", + "RequiresBuildEditableResult", "RequiresBuildSdistResult", "RequiresBuildWheelResult", - "RequiresBuildEditableResult", - "MetadataForBuildWheelResult", - "MetadataForBuildEditableResult", "SdistResult", - "WheelResult", - "EditableResult", "SubprocessFrontend", - "OptionalHooks", + "WheelResult", + "__version__", ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/src/pyproject_api/_backend.py new/pyproject_api-1.8.0/src/pyproject_api/_backend.py --- old/pyproject_api-1.6.1/src/pyproject_api/_backend.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/src/pyproject_api/_backend.py 2020-02-02 01:00:00.000000000 +0100 @@ -1,19 +1,20 @@ -"""Handles communication on the backend side between frontend and backend +""" +Handles communication on the backend side between frontend and backend. Please keep this file Python 2.7 compatible. See https://tox.readthedocs.io/en/rewrite/development.html#code-style-guide """ -from __future__ import print_function import importlib import json +import locale import os import sys import traceback -class MissingCommand(TypeError): - """Missing command""" +class MissingCommand(TypeError): # noqa: N818 + """Missing command.""" class BackendProxy: @@ -28,13 +29,14 @@ def __call__(self, name, *args, **kwargs): on_object = self if name.startswith("_") else self.backend if not hasattr(on_object, name): - raise MissingCommand("{!r} has no attribute {!r}".format(on_object, name)) + msg = f"{on_object!r} has no attribute {name!r}" + raise MissingCommand(msg) return getattr(on_object, name)(*args, **kwargs) def __str__(self): - return "{}(backend={})".format(self.__class__.__name__, self.backend) + return f"{self.__class__.__name__}(backend={self.backend})" - def _exit(self): + def _exit(self): # noqa: PLR6301 return 0 def _optional_hooks(self): @@ -56,16 +58,16 @@ sys.stdout.flush() -def run(argv): +def run(argv): # noqa: C901, PLR0912, PLR0915 reuse_process = argv[0].lower() == "true" try: - backend_proxy = BackendProxy(argv[1], None if len(argv) == 2 else argv[2]) + backend_proxy = BackendProxy(argv[1], None if len(argv) == 2 else argv[2]) # noqa: PLR2004 except BaseException: print("failed to start backend", file=sys.stderr) raise else: - print("started backend {}".format(backend_proxy), file=sys.stdout) + print(f"started backend {backend_proxy}", file=sys.stdout) finally: flush() # pragma: no branch while True: @@ -74,13 +76,14 @@ continue flush() # flush any output generated before try: - if sys.version_info[0] == 2: # pragma: no branch # python 2 does not support loading from bytearray + # python 2 does not support loading from bytearray + if sys.version_info[0] == 2: # pragma: no branch # noqa: PLR2004 content = content.decode() # pragma: no cover parsed_message = json.loads(content) result_file = parsed_message["result"] - except Exception: + except Exception: # noqa: BLE001 # ignore messages that are not valid JSON and contain a valid result path - print("Backend: incorrect request to backend: {}".format(content), file=sys.stderr) + print(f"Backend: incorrect request to backend: {content}", file=sys.stderr) flush() else: result = {} @@ -91,7 +94,7 @@ result["return"] = outcome if cmd == "_exit": break - except BaseException as exception: + except BaseException as exception: # noqa: BLE001 result["code"] = exception.code if isinstance(exception, SystemExit) else 1 result["exc_type"] = exception.__class__.__name__ result["exc_msg"] = str(exception) @@ -99,13 +102,14 @@ traceback.print_exc() finally: try: - with open(result_file, "w") as file_handler: + encoding = locale.getpreferredencoding(do_setlocale=False) + with open(result_file, "w", encoding=encoding) as file_handler: # noqa: PTH123 json.dump(result, file_handler) - except Exception: + except Exception: # noqa: BLE001 traceback.print_exc() finally: # used as done marker by frontend - print("Backend: Wrote response {} to {}".format(result, result_file)) + print(f"Backend: Wrote response {result} to {result_file}") flush() # pragma: no branch if reuse_process is False: # pragma: no branch # no test for reuse process in root test env break @@ -119,7 +123,8 @@ char = os.read(fd, 1) if not char: if not content: - raise EOFError("EOF without reading anything") # we didn't get a line at all, let the caller know + msg = "EOF without reading anything" + raise EOFError(msg) # we didn't get a line at all, let the caller know break # pragma: no cover if char == b"\n": break diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/src/pyproject_api/_backend.pyi new/pyproject_api-1.8.0/src/pyproject_api/_backend.pyi --- old/pyproject_api-1.6.1/src/pyproject_api/_backend.pyi 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/src/pyproject_api/_backend.pyi 2020-02-02 01:00:00.000000000 +0100 @@ -6,6 +6,7 @@ backend_module: str backend_object: str | None backend: Any + def __init__(self, backend_module: str, backend_obj: str | None) -> None: ... def __call__(self, name: str, *args: Any, **kwargs: Any) -> Any: ... def _exit(self) -> None: ... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/src/pyproject_api/_frontend.py new/pyproject_api-1.8.0/src/pyproject_api/_frontend.py --- old/pyproject_api-1.6.1/src/pyproject_api/_frontend.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/src/pyproject_api/_frontend.py 2020-02-02 01:00:00.000000000 +0100 @@ -1,4 +1,5 @@ """Build frontend for PEP-517.""" + from __future__ import annotations import json @@ -174,7 +175,7 @@ #: backend requirements when the ``pyproject.toml`` does not specify it LEGACY_REQUIRES: tuple[Requirement, ...] = (Requirement("setuptools >= 40.8.0"), Requirement("wheel")) - def __init__( # noqa: PLR0913 + def __init__( # noqa: PLR0913, PLR0917 self, root: Path, backend_paths: tuple[Path, ...], @@ -439,7 +440,7 @@ self._unexpected_response("build_editable", basename, str, out, err) return EditableResult(wheel_directory / basename, out, err) - def _unexpected_response( # noqa: PLR0913 + def _unexpected_response( self, cmd: str, got: Any, @@ -486,7 +487,7 @@ return metadata_directory / basename, out, err @contextmanager - def _wheel_directory(self) -> Iterator[Path]: + def _wheel_directory(self) -> Iterator[Path]: # noqa: PLR6301 with TemporaryDirectory() as wheel_directory: yield Path(wheel_directory) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/src/pyproject_api/_version.py new/pyproject_api-1.8.0/src/pyproject_api/_version.py --- old/pyproject_api-1.6.1/src/pyproject_api/_version.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/src/pyproject_api/_version.py 2020-02-02 01:00:00.000000000 +0100 @@ -1,4 +1,16 @@ # file generated by setuptools_scm # don't change, don't track in version control -__version__ = version = '1.6.1' -__version_tuple__ = version_tuple = (1, 6, 1) +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import Tuple, Union + VERSION_TUPLE = Tuple[Union[int, str], ...] +else: + VERSION_TUPLE = object + +version: str +__version__: str +__version_tuple__: VERSION_TUPLE +version_tuple: VERSION_TUPLE + +__version__ = version = '1.8.0' +__version_tuple__ = version_tuple = (1, 8, 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/src/pyproject_api/_via_fresh_subprocess.py new/pyproject_api-1.8.0/src/pyproject_api/_via_fresh_subprocess.py --- old/pyproject_api-1.6.1/src/pyproject_api/_via_fresh_subprocess.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/src/pyproject_api/_via_fresh_subprocess.py 2020-02-02 01:00:00.000000000 +0100 @@ -3,7 +3,7 @@ import os import sys from contextlib import contextmanager -from subprocess import PIPE, Popen +from subprocess import PIPE, Popen # noqa: S404 from threading import Thread from typing import IO, TYPE_CHECKING, Any, Iterator, Tuple, cast @@ -36,7 +36,7 @@ class SubprocessFrontend(Frontend): """A frontend that creates fresh subprocess at every call to communicate with the backend.""" - def __init__( # noqa: PLR0913 + def __init__( self, root: Path, backend_paths: tuple[Path, ...], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/tests/demo_pkg_inline/build.py new/pyproject_api-1.8.0/tests/demo_pkg_inline/build.py --- old/pyproject_api-1.6.1/tests/demo_pkg_inline/build.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/tests/demo_pkg_inline/build.py 2020-02-02 01:00:00.000000000 +0100 @@ -2,6 +2,7 @@ Please keep this file Python 2.7 compatible. See https://tox.readthedocs.io/en/rewrite/development.html#code-style-guide """ + from __future__ import annotations import os diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/tests/demo_pkg_inline/pyproject.toml new/pyproject_api-1.8.0/tests/demo_pkg_inline/pyproject.toml --- old/pyproject_api-1.6.1/tests/demo_pkg_inline/pyproject.toml 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/tests/demo_pkg_inline/pyproject.toml 2020-02-02 01:00:00.000000000 +0100 @@ -1,4 +1,4 @@ -[build-system] # noqa: D100 +[build-system] # noqa: D100 build-backend = "build" requires = [ ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/tests/test_frontend.py new/pyproject_api-1.8.0/tests/test_frontend.py --- old/pyproject_api-1.6.1/tests/test_frontend.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/tests/test_frontend.py 2020-02-02 01:00:00.000000000 +0100 @@ -11,7 +11,7 @@ from pyproject_api._via_fresh_subprocess import SubprocessFrontend -@pytest.fixture() +@pytest.fixture def local_builder(tmp_path: Path) -> Callable[[str], Path]: def _f(content: str) -> Path: toml = '[build-system]\nrequires=[]\nbuild-backend = "build_tester"\nbackend-path=["."]' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/tests/test_frontend_setuptools.py new/pyproject_api-1.8.0/tests/test_frontend_setuptools.py --- old/pyproject_api-1.6.1/tests/test_frontend_setuptools.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/tests/test_frontend_setuptools.py 2020-02-02 01:00:00.000000000 +0100 @@ -6,7 +6,6 @@ from typing import TYPE_CHECKING, Iterator, NamedTuple import pytest -from packaging.requirements import Requirement from pyproject_api._frontend import BackendFailed from pyproject_api._via_fresh_subprocess import SubprocessFrontend @@ -59,9 +58,7 @@ def test_setuptools_get_requires_for_build_wheel(frontend_setuptools: SubprocessFrontend) -> None: result = frontend_setuptools.get_requires_for_build_wheel() - for left, right in zip(result.requires, (Requirement("wheel"),)): - assert isinstance(left, Requirement) - assert str(left) == str(right) + assert not result.requires assert isinstance(result.out, str) assert isinstance(result.err, str) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/tests/test_main.py new/pyproject_api-1.8.0/tests/test_main.py --- old/pyproject_api-1.6.1/tests/test_main.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/tests/test_main.py 2020-02-02 01:00:00.000000000 +0100 @@ -59,7 +59,7 @@ ), ], ) -def test_parse_args( # noqa: PLR0913 +def test_parse_args( mocker: pytest_mock.MockerFixture, capsys: pytest.CaptureFixture[str], cli_args: list[str], diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/tests/test_version.py new/pyproject_api-1.8.0/tests/test_version.py --- old/pyproject_api-1.6.1/tests/test_version.py 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/tests/test_version.py 2020-02-02 01:00:00.000000000 +0100 @@ -2,6 +2,6 @@ def test_version() -> None: - from pyproject_api import __version__ + from pyproject_api import __version__ # noqa: PLC0415 assert __version__ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyproject_api-1.6.1/tox.ini new/pyproject_api-1.8.0/tox.ini --- old/pyproject_api-1.6.1/tox.ini 2020-02-02 01:00:00.000000000 +0100 +++ new/pyproject_api-1.8.0/tox.ini 2020-02-02 01:00:00.000000000 +0100 @@ -1,85 +1,88 @@ [tox] requires = tox>=4.2 + tox-uv>=1.11 env_list = fix - py312 - py311 - py310 - py39 - py38 - py37 - type + 3.13 + 3.12 + 3.11 + 3.10 + 3.9 + 3.8 docs + type pkg_meta skip_missing_interpreters = true [testenv] -description = run the tests with pytest under {envname} +description = run the unit tests with pytest under {base_python} package = wheel wheel_build_env = .pkg extras = testing pass_env = + DIFF_AGAINST PYTEST_* - SSL_CERT_FILE set_env = - COVERAGE_FILE = {env:COVERAGE_FILE:{toxworkdir}{/}.coverage.{envname}} -commands = - pytest {tty:--color=yes} {posargs: --no-cov-on-fail --cov-context=test \ - --cov={envsitepackagesdir}{/}pyproject_api --cov={toxinidir}{/}tests --cov-config={toxinidir}{/}pyproject.toml \ - --cov-report=term-missing:skip-covered --cov-report=html:{envtmpdir}{/}htmlcov \ - --cov-report=xml:{toxworkdir}{/}coverage.{envname}.xml --junitxml={toxworkdir}{/}junit.{envname}.xml \ + COVERAGE_FILE = {work_dir}/.coverage.{env_name} + COVERAGE_PROCESS_START = {tox_root}/pyproject.toml + _COVERAGE_SRC = {env_site_packages_dir}/sphinx_argparse_cli +commands = + pytest {tty:--color=yes} {posargs: \ + --junitxml {work_dir}{/}junit.{env_name}.xml --cov {env_site_packages_dir}{/}pyproject_api \ + --cov {tox_root}{/}tests --cov-fail-under=100 \ + --cov-config=pyproject.toml --no-cov-on-fail --cov-report term-missing:skip-covered --cov-context=test \ + --cov-report html:{env_tmp_dir}{/}htmlcov --cov-report xml:{work_dir}{/}coverage.{env_name}.xml \ tests} -labels = test [testenv:fix] -description = run formatter and linters -skip_install = true +description = run static analysis and style check using flake8 +package = skip deps = - pre-commit>=3.3.3 + pre-commit-uv>=4.1.1 pass_env = - {[testenv]passenv} + HOMEPATH PROGRAMDATA commands = - pre-commit run --all-files --show-diff-on-failure {tty:--color=always} {posargs} + pre-commit run --all-files --show-diff-on-failure + python -c 'print("hint: run {envdir}/bin/pre-commit install to add checks as pre-commit hook")' + +[testenv:docs] +description = build documentation +extras = + docs +commands = + sphinx-build -d "{env_tmp_dir}{/}doc_tree" docs "{work_dir}{/}docs_out" --color -b html {posargs} -W + python -c 'print(r"documentation available under file://{work_dir}{/}docs_out{/}index.html")' [testenv:type] description = run type check on code base deps = - mypy==1.5.1 + mypy==1.11.2 set_env = {tty:MYPY_FORCE_COLOR = 1} commands = - mypy src/pyproject_api --strict - mypy tests --strict - -[testenv:docs] -description = build documentation -extras = - docs -commands = - sphinx-build -d "{envtmpdir}{/}doctree" docs "{toxworkdir}{/}docs_out" --color -b html {posargs} -W - python -c 'print(r"documentation available under file://{toxworkdir}{/}docs_out{/}index.html")' + mypy src + mypy tests [testenv:pkg_meta] description = check that the long description is valid skip_install = true deps = - build[virtualenv]>=0.10 - check-wheel-contents>=0.4 - twine>=4.0.2 -commands = - python -m build -o {envtmpdir} -s -w . - twine check --strict {envtmpdir}{/}* - check-wheel-contents --no-config {envtmpdir} + check-wheel-contents>=0.6 + twine>=5.1.1 + uv>=0.4.10 +commands = + uv build --sdist --wheel --out-dir {env_tmp_dir} . + twine check {env_tmp_dir}{/}* + check-wheel-contents --no-config {env_tmp_dir} [testenv:dev] -description = dev environment with all deps at {envdir} +description = generate a DEV environment package = editable extras = - docs testing commands = - python -m pip list --format=columns - python -c "print(r'{envpython}')" + uv pip tree + python -c 'import sys; print(sys.executable)'