Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-hatch-fancy-pypi-readme for openSUSE:Factory checked in at 2024-01-08 23:44:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-hatch-fancy-pypi-readme (Old) and /work/SRC/openSUSE:Factory/.python-hatch-fancy-pypi-readme.new.21961 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-hatch-fancy-pypi-readme" Mon Jan 8 23:44:04 2024 rev:6 rq:1137420 version:24.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-hatch-fancy-pypi-readme/python-hatch-fancy-pypi-readme.changes 2023-05-23 14:53:32.806129332 +0200 +++ /work/SRC/openSUSE:Factory/.python-hatch-fancy-pypi-readme.new.21961/python-hatch-fancy-pypi-readme.changes 2024-01-08 23:44:22.360371268 +0100 @@ -1,0 +2,22 @@ +Sun Jan 7 18:17:04 UTC 2024 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- update to 24.1.0: + The last release [broke + _scikit-build-core_](https://github.com/scikit-build/scikit-build-core/issues/592) + so this one adds a default argument value. No user-visible + changes. + * Added a default to an internal API that is used by + *scikit-build-core*. + +------------------------------------------------------------------- +Sun Jan 7 18:15:38 UTC 2024 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- update to 23.2.0: + There's only one change but I think it's really cool: you can now + add the package version into your PyPI readme by adding the + string `$HFPR_VERSION` to it! + * `$HFPR_VERSION` is now replaced by the package version in the + PyPI readme. The version is not available in CLI mode, therefore + it's replaced by the dummy value of `42.0`. + +------------------------------------------------------------------- Old: ---- hatch_fancy_pypi_readme-23.1.0.tar.gz New: ---- hatch_fancy_pypi_readme-24.1.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-hatch-fancy-pypi-readme.spec ++++++ --- /var/tmp/diff_new_pack.qr1fNY/_old 2024-01-08 23:44:22.976393665 +0100 +++ /var/tmp/diff_new_pack.qr1fNY/_new 2024-01-08 23:44:22.980393811 +0100 @@ -1,7 +1,7 @@ # # spec file # -# Copyright (c) 2023 SUSE LLC +# Copyright (c) 2024 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -26,7 +26,7 @@ %endif %{?sle15_python_module_pythons} Name: python-hatch-fancy-pypi-readme%{psuffix} -Version: 23.1.0 +Version: 24.1.0 Release: 0 Summary: Fancy PyPI READMEs with Hatch License: MIT ++++++ hatch_fancy_pypi_readme-23.1.0.tar.gz -> hatch_fancy_pypi_readme-24.1.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/.github/CONTRIBUTING.md new/hatch_fancy_pypi_readme-24.1.0/.github/CONTRIBUTING.md --- old/hatch_fancy_pypi_readme-23.1.0/.github/CONTRIBUTING.md 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/.github/CONTRIBUTING.md 2024-01-01 10:18:10.000000000 +0100 @@ -24,7 +24,7 @@ You won't get any feedback until it's green unless you ask for it. For the CI to pass, the coverage must be 100%. If you have problems to test something, open anyway and ask for advice. - In some situations, we may agree to add an `# pragma: no cover`. + In some situations, we may agree to add a `# pragma: no cover`. - Once you've addressed review feedback, make sure to bump the pull request with a short note, so we know you're done. - Donât break backwards-compatibility. @@ -33,39 +33,27 @@ You can (and should) run our test suite using [*tox*]. However, youâll probably want a more traditional environment as well. -We highly recommend to develop using the latest Python release because we try to take advantage of modern features whenever possible. -First create a [virtual environment](https://virtualenv.pypa.io/) so you don't break your system-wide Python installation. -Itâs out of scope for this document to list all the ways to manage virtual environments in Python, but if you donât already have a pet way, take some time to look at tools like [*direnv*](https://hynek.me/til/python-project-local-venvs/), [*virtualfish*](https://virtualfish.readthedocs.io/), and [*virtualenvwrapper*](https://virtualenvwrapper.readthedocs.io/). +We recommend using the Python version from the `.python-version-default` file in the project's root directory, because that's the one that is used in the CI by default, too. -Next, get an up to date checkout of the *hatch-fancy-pypi-readme* repository: +If you're using [*direnv*](https://direnv.net), you can automate the creation of the project virtual environment with the correct Python version by adding the following `.envrc` to the project root: -```console -$ git clone g...@github.com:hynek/hatch-fancy-pypi-readme.git -``` - -or if you want to use git via `https`: - -```console -$ git clone https://github.com/hynek/hatch-fancy-pypi-readme.git +```bash +layout python python$(cat .python-version-default) ``` -Change into the newly created directory and **after activating your virtual environment** install an editable version of *hatch-fancy-pypi-readme* along with its tests requirements: +You can now install the package with its development dependencies into the virtual environment: ```console -$ cd hatch-fancy-pypi-readme -$ pip install --upgrade pip setuptools # PLEASE don't skip this step -$ pip install -e '.[dev]' +$ pip install -e .[dev] ``` -At this point, +Now you can run the test suite: ```console $ python -m pytest ``` -should work and pass. - To avoid committing code that violates our style guide, we strongly advise you to install [*pre-commit*] and its hooks: ```console @@ -78,8 +66,8 @@ $ pre-commit run --all-files ``` -and our CI has integration with `pre-commit.ci <https://pre-commit.ci>`_. -But it's way more comfortable to run it locally and *git* catching avoidable errors. +and our CI has integration with [pre-commit.ci](https://pre-commit.ci). +But it's way more comfortable to run it locally and Git catching avoidable errors. ## Code @@ -190,6 +178,6 @@ [CI]: https://github.com/hynek/hatch-fancy-pypi-readme/actions [Hynek Schlawack]: https://hynek.me/about/ [*pre-commit*]: https://pre-commit.com/ -[*tox*]: https://https://tox.wiki/ +[*tox*]: https://tox.wiki/ [semantic newlines]: https://rhodesmill.org/brandon/2012/one-sentence-per-line/ [*reStructuredText*]: https://www.sphinx-doc.org/en/stable/usage/restructuredtext/basics.html diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/.github/workflows/ci.yml new/hatch_fancy_pypi_readme-24.1.0/.github/workflows/ci.yml --- old/hatch_fancy_pypi_readme-23.1.0/.github/workflows/ci.yml 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/.github/workflows/ci.yml 2024-01-01 10:18:10.000000000 +0100 @@ -12,30 +12,56 @@ env: FORCE_COLOR: "1" # Make tools pretty. PYTHONIOENCODING: utf-8 - TOX_TESTENV_PASSENV: FORCE_COLOR PIP_DISABLE_PIP_VERSION_CHECK: "1" PIP_NO_PYTHON_VERSION_WARNING: "1" - SETUPTOOLS_SCM_PRETEND_VERSION: "1.0" # avoid warnings about shallow checkout - PYTHON_LATEST: "3.11" jobs: + build-package: + name: Build & verify package + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: hynek/build-and-inspect-python-package@v2 + tests: name: Tests on ${{ matrix.python-version }} runs-on: ubuntu-latest + needs: build-package strategy: fail-fast: false matrix: - python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"] + python-version: + - "3.7" + - "3.8" + - "3.9" + - "3.10" + - "3.11" + - "3.12" steps: - - uses: actions/checkout@v3 + - name: Download pre-built packages + uses: actions/download-artifact@v4 + with: + name: Packages + path: dist + - run: tar xf dist/*.tar.gz --strip-components=1 # needed for config files - uses: actions/setup-python@v4 with: + cache: pip python-version: ${{ matrix.python-version }} - - run: python -Im pip install --upgrade wheel tox + allow-prereleases: true - - run: python -Im tox run -f py$(echo ${{ matrix.python-version }} | tr -d .) + - run: python -Im pip install tox + + - run: | + python -Im tox run \ + --installpkg dist/*.whl \ + -f py$(echo ${{ matrix.python-version }} | tr -d .) - name: Upload coverage data uses: actions/upload-artifact@v3 @@ -47,14 +73,14 @@ coverage: runs-on: ubuntu-latest needs: tests + if: always() steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: - python-version: ${{ env.PYTHON_LATEST }} - - - run: python -Im pip install --upgrade coverage[toml] + cache: pip + python-version-file: .python-version-default - name: Download coverage data uses: actions/download-artifact@v3 @@ -63,12 +89,20 @@ - name: Combine coverage and fail if it's <100%. run: | + python -Im pip install --upgrade coverage[toml] + python -Im coverage combine python -Im coverage html --skip-covered --skip-empty + + # Report and write to summary. + python -Im coverage report --format=markdown >> $GITHUB_STEP_SUMMARY + + # Report again and fail if under 100%. python -Im coverage report --fail-under=100 + - name: Upload HTML report if check failed. - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: html-report path: htmlcov @@ -77,13 +111,21 @@ mypy: name: Mypy runs-on: ubuntu-latest + needs: build-package steps: - - uses: actions/checkout@v3 + - name: Download pre-built packages + uses: actions/download-artifact@v4 + with: + name: Packages + path: dist + - run: tar xf dist/*.tar.gz --strip-components=1 # needed for config files - uses: actions/setup-python@v4 with: - python-version: ${{ env.PYTHON_LATEST }} - - run: python -Im pip install --upgrade wheel tox + cache: pip + python-version-file: .python-version-default + + - run: python -Im pip install tox - run: python -Im tox run -e mypy @@ -95,10 +137,12 @@ os: [ubuntu-latest, windows-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: - python-version: ${{ env.PYTHON_LATEST }} + cache: pip + python-version-file: .python-version-default + - run: python -Im pip install -e .[dev] - run: python -Ic 'import hatch_fancy_pypi_readme' - run: python -m hatch_fancy_pypi_readme tests/example_pyproject.toml @@ -111,6 +155,7 @@ needs: - coverage - install-dev + - mypy runs-on: ubuntu-latest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/.github/workflows/pypi-package.yml new/hatch_fancy_pypi_readme-24.1.0/.github/workflows/pypi-package.yml --- old/hatch_fancy_pypi_readme-23.1.0/.github/workflows/pypi-package.yml 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/.github/workflows/pypi-package.yml 2024-01-01 10:18:10.000000000 +0100 @@ -5,8 +5,6 @@ push: branches: [main] tags: ["*"] - pull_request: - branches: [main] release: types: - published @@ -23,8 +21,8 @@ runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: hynek/build-and-inspect-python-package@v1 + - uses: actions/checkout@v4 + - uses: hynek/build-and-inspect-python-package@v2 # Upload to Test PyPI on every tag on main. release-test-pypi: @@ -36,7 +34,7 @@ steps: - name: Download packages built by build-and-inspect-python-package - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: Packages path: dist @@ -56,7 +54,7 @@ steps: - name: Download packages built by build-and-inspect-python-package - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: Packages path: dist diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/.gitignore new/hatch_fancy_pypi_readme-24.1.0/.gitignore --- old/hatch_fancy_pypi_readme-23.1.0/.gitignore 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/.gitignore 2024-01-01 10:18:10.000000000 +0100 @@ -14,3 +14,4 @@ dist htmlcov tmp +Justfile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/.pre-commit-config.yaml new/hatch_fancy_pypi_readme-24.1.0/.pre-commit-config.yaml --- old/hatch_fancy_pypi_readme-23.1.0/.pre-commit-config.yaml 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/.pre-commit-config.yaml 2024-01-01 10:18:10.000000000 +0100 @@ -4,18 +4,18 @@ repos: - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 23.12.1 hooks: - id: black - - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: v0.0.269 + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.1.9 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.5.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/.python-version-default new/hatch_fancy_pypi_readme-24.1.0/.python-version-default --- old/hatch_fancy_pypi_readme-23.1.0/.python-version-default 1970-01-01 01:00:00.000000000 +0100 +++ new/hatch_fancy_pypi_readme-24.1.0/.python-version-default 2024-01-01 10:18:10.000000000 +0100 @@ -0,0 +1 @@ +3.12 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/CHANGELOG.md new/hatch_fancy_pypi_readme-24.1.0/CHANGELOG.md --- old/hatch_fancy_pypi_readme-23.1.0/CHANGELOG.md 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/CHANGELOG.md 2024-01-01 10:18:10.000000000 +0100 @@ -10,6 +10,23 @@ <!-- changelog follows --> + +## [24.1.0](https://github.com/hynek/hatch-fancy-pypi-readme/compare/23.2.0...24.1.0) - 2024-01-01 + +### Fixed + +- Added a default to an internal API that is used by *scikit-build-core*. + + +## [23.2.0](https://github.com/hynek/hatch-fancy-pypi-readme/compare/23.1.0...23.2.0) - 2023-12-31 + +### Added + +- `$HFPR_VERSION` is now replaced by the package version in the PyPI readme. + The version is not available in CLI mode, therefore it's replaced by the dummy value of `42.0`. + [#39](https://github.com/hynek/hatch-fancy-pypi-readme/pull/39) + + ## [23.1.0](https://github.com/hynek/hatch-fancy-pypi-readme/compare/22.8.0...23.1.0) - 2023-05-22 ### Added diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/PKG-INFO new/hatch_fancy_pypi_readme-24.1.0/PKG-INFO --- old/hatch_fancy_pypi_readme-23.1.0/PKG-INFO 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/PKG-INFO 2024-01-01 10:18:10.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: hatch-fancy-pypi-readme -Version: 23.1.0 +Version: 24.1.0 Summary: Fancy PyPI READMEs with Hatch Project-URL: Documentation, https://github.com/hynek/hatch-fancy-pypi-readme#readme Project-URL: Changelog, https://github.com/hynek/hatch-fancy-pypi-readme/blob/main/CHANGELOG.md @@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 Classifier: Topic :: Software Development :: Build Tools Requires-Python: >=3.7 Requires-Dist: hatchling diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/README.md new/hatch_fancy_pypi_readme-24.1.0/README.md --- old/hatch_fancy_pypi_readme-23.1.0/README.md 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/README.md 2024-01-01 10:18:10.000000000 +0100 @@ -1,9 +1,10 @@ # Your â¨Fancy⨠Project Deserves a â¨Fancy⨠PyPI Readme! -[](https://pypi.org/project/hatch-fancy-pypi-readme) -[](https://pypi.org/project/hatch-fancy-pypi-readme) [](https://github.com/pypa/hatch) [](https://github.com/hynek/hatch-fancy-pypi-readme/blob/main/LICENSE.txt) +[](https://pypi.org/project/hatch-fancy-pypi-readme) +[](https://pypi.org/project/hatch-fancy-pypi-readme) +[](https://pepy.tech/project/hatch-fancy-pypi-readme) *hatch-fancy-pypi-readme* is a [Hatch] metadata plugin for everyone who cares about the first impression of their projectâs PyPI landing page. It allows you to define your PyPI project description in terms of concatenated fragments that are based on **static strings**, **files**, and most importantly: @@ -15,7 +16,7 @@ Do you want your PyPI readme to be the project readme, but without badges, followed by the license file, and the changelog section for *only the last* release? Youâve come to the right place! -> **Note** +> [!NOTE] > âPyPI project descriptionâ, âPyPI landing pageâ, and âPyPI > readmeâ all refer to the same thing. > In *setuptools* itâs called `long_description` and is the text shown on a > projectâs PyPI page. > We refer to it as âreadmeâ because thatâs how itâs called in [PEP > 621](https://peps.python.org/pep-0621/)-based `pyproject.toml` files. @@ -23,18 +24,22 @@ ### Showcases ð§ -<!-- Please add your project in alphabetic order, except leave hatch-fancy-pypi-readme last. --> -- [*Awkward Array*](https://pypi.org/project/awkward/) ([`pyproject.toml`](https://github.com/scikit-hep/awkward/blob/main/pyproject.toml)) -- [*Black*](https://pypi.org/project/black/) ([`pyproject.toml`](https://github.com/psf/black/blob/main/pyproject.toml)) +<!-- Please add your project in alphabetic order, except leave hatch-fancy-pypi-readme last. If your project is lower-case, add it emphasized (surrounded by *), otherwise leave it plain. --> +- [*attrs*](https://pypi.org/project/attrs/) ([`pyproject.toml`](https://github.com/python-attrs/attrs/blob/main/pyproject.toml)) +- [Awkward Array](https://pypi.org/project/awkward/) ([`pyproject.toml`](https://github.com/scikit-hep/awkward/blob/main/pyproject.toml)) +- [Black](https://pypi.org/project/black/) ([`pyproject.toml`](https://github.com/psf/black/blob/main/pyproject.toml)) - [*doc2dash*](https://pypi.org/project/doc2dash/) ([`pyproject.toml`](https://github.com/hynek/doc2dash/blob/main/pyproject.toml)) - [*environ-config*](https://pypi.org/project/environ-config/) ([`pyproject.toml`](https://github.com/hynek/environ-config/blob/main/pyproject.toml)) - [*jsonschema*](https://pypi.org/project/jsonschema/) ([`pyproject.toml`](https://github.com/python-jsonschema/jsonschema/blob/main/pyproject.toml)) -- [*Gradio*](https://pypi.org/project/gradio/) ([`pyproject.toml`](https://github.com/gradio-app/gradio/blob/main/pyproject.toml)) +- [Gradio](https://pypi.org/project/gradio/) ([`pyproject.toml`](https://github.com/gradio-app/gradio/blob/main/pyproject.toml)) - [*httpx*](https://pypi.org/project/httpx/) ([`pyproject.toml`](https://github.com/encode/httpx/blob/master/pyproject.toml)) +- [OpenLLM](https://github.com/bentoml/OpenLLM) ([`pyproject.toml`](https://github.com/bentoml/OpenLLM/blob/main/openllm-python/pyproject.toml)) +- [Pydantic](https://pypi.org/project/pydantic/) ([`pyproject.toml`](https://github.com/pydantic/pydantic/blob/main/pyproject.toml)) - [*pytermgui*](https://pypi.org/project/pytermgui/) ([`pyproject.toml`](https://github.com/bczsalba/pytermgui/blob/master/pyproject.toml)) - [*scikit-build*](https://pypi.org/project/scikit-build/) ([`pyproject.toml`](https://github.com/scikit-build/scikit-build/blob/main/pyproject.toml)) - [*stamina*](https://pypi.org/project/stamina/) ([`pyproject.toml`](https://github.com/hynek/stamina/blob/main/pyproject.toml)) - [*structlog*](https://pypi.org/project/structlog/) ([`pyproject.toml`](https://github.com/hynek/structlog/blob/main/pyproject.toml)) +- [Twisted](https://pypi.org/project/twisted/) ([`pyproject.toml`](https://github.com/twisted/twisted/blob/trunk/pyproject.toml)) *hatch-fancy-pypi-readme* doesnât use itself to avoid a circular dependency that can be problematic in some cases. The shoemakerâs kids always go barefoot. @@ -79,7 +84,7 @@ dynamic = ["readme"] ``` -> **Note**: +> [!IMPORTANT] > Donât forget to remove the old `readme` key! Next, you add a `[tool.hatch.metadata.hooks.fancy-pypi-readme]` section. @@ -148,7 +153,7 @@ to find it. -Both Markdown and *reST* have comments (`<!-- this is a Markdown comment -->` and `.. this is a reST comment`) that you can use for invisible markers: +Both Markdown and reStructuredText (reST) have comments (`<!-- this is a Markdown comment -->` and `.. this is a reST comment`) that you can use for invisible markers: ```markdown # Boring Header @@ -180,7 +185,7 @@ to your readme. -> **Note** +> [!TIP] > > - You can insert the same file **multiple times** â each time a different > part! > - The order of the options in a fragment block does *not* matter. @@ -219,7 +224,7 @@ ```toml [[tool.hatch.metadata.hooks.fancy-pypi-readme.substitutions]] -# Regular TOML strings (double quotes) do. +# Regular TOML strings (double quotes) do need escaping. pattern = "#(\\d+)" replacement = "[#\\1](https://github.com/hynek/hatch-fancy-pypi-readme/issues/\\1)" ``` @@ -227,6 +232,14 @@ Again, please check out our [example configuration][example-config] for a complete example. +### Referencing Packaging Metadata + +If the final readme contains the string `$HFPR_VERSION`, it is replaced by the current package version. + +When running *hatch-fancy-pypi-readme* in CLI mode (as described in the next section), packaging metadata is not available. +In that case `$HFPR_VERSION` is hardcoded to `42.0` so you can still test your readme. + + ## CLI Interface For faster feedback loops, *hatch-fancy-pypi-readme* comes with a CLI interface that takes a `pyproject.toml` file as an argument and renders out the readme that would go into respective package. @@ -240,7 +253,7 @@ ```shell -pipx run hatch-fancy-pypi-readme +$ pipx run hatch-fancy-pypi-readme ``` --- @@ -257,7 +270,7 @@  -> **Warning** +> [!WARNING] > While the execution model is somewhat different from the [Hatch]-Python > packaging pipeline, it uses the same configuration validator and text > renderer, so the fidelity should be high. > > It will **not** help you debug **packaging issues**, though. @@ -267,17 +280,7 @@ > If you ensure that *hatch-fancy-pypi-readme* is installed in your Hatch > environment (that means where the `hatch` CLI command lives â not your > development environment), you can also let Hatch render it for you: > > - `hatch project metadata readme` gives you a rendered version of the readme. -> - `hatch project metadata | jq -r .readme.text` gives you the raw Markdown (needs [*jq*](https://stedolan.github.io/jq/)). - - -## Project Links - -- **License**: [MIT](LICENSE.txt) -- **Supported Python Versions**: 3.7 and later (follows [Hatch]) -- [**Documentation**](https://github.com/hynek/hatch-fancy-pypi-readme#readme) -- [**Changelog**](CHANGELOG.md) -- [**PyPI**](https://pypi.org/project/hatch-fancy-pypi-readme/) -- [**Source Code**](https://github.com/hynek/hatch-fancy-pypi-readme) +> - `hatch project metadata | jq -r .readme.text` gives you the raw Markdown (needs [*jq*](https://jqlang.github.io/jq/)). [example-config]: tests/example_pyproject.toml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/pyproject.toml new/hatch_fancy_pypi_readme-24.1.0/pyproject.toml --- old/hatch_fancy_pypi_readme-23.1.0/pyproject.toml 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/pyproject.toml 2024-01-01 10:18:10.000000000 +0100 @@ -5,7 +5,7 @@ [project] name = "hatch-fancy-pypi-readme" -version = "23.1.0" +version = "24.1.0" description = "Fancy PyPI READMEs with Hatch" requires-python = ">=3.7" keywords = ["hatch", "pypi", "readme", "documentation"] @@ -23,6 +23,7 @@ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", ] dependencies = [ "hatchling", @@ -122,37 +123,25 @@ [tool.ruff] src = ["src", "tests"] -select = [ - "E", # pycodestyle - "W", # pycodestyle - "F", # Pyflakes - "UP", # pyupgrade - "N", # pep8-naming - "YTT", # flake8-2020 - "S", # flake8-bandit - "B", # flake8-bugbear - "C4", # flake8-comprehensions - "T10", # flake8-debugger - "ISC", # flake8-implicit-str-concat - "RET", # flake8-return - "SIM", # flake8-simplify - "DTZ", # flake8-datetimez - "I", # isort - "PGH", # pygrep-hooks - "PLC", # Pylint - "PIE", # flake8-pie - "RUF", # ruff -] +select = ["ALL"] ignore = [ - "E501", # leave line-length enforcement to Black + "ANN", # Mypy is better at this. + "C901", # Leave complexity to me. + "COM", # Leave commas to Black. + "D", # We have different ideas about docstrings. + "E501", # leave line-length enforcement to Black + "PLR0912", # Leave complexity to me. + "TRY301", # Raise in try blocks can totally make sense. ] [tool.ruff.per-file-ignores] +"src/hatch_fancy_pypi_readme/_cli.py" = ["T201"] # need print in CLI "tests/*" = [ + "PLC1901", # empty strings are falsey, but are less specific in tests + "PT005", # we use always underscores and explicit names "S101", # assert "SIM300", # Yoda rocks in tests - "PLC1901", # empty strings are falsey, but are less specific in tests ] [tool.ruff.isort] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/__main__.py new/hatch_fancy_pypi_readme-24.1.0/src/hatch_fancy_pypi_readme/__main__.py --- old/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/__main__.py 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/src/hatch_fancy_pypi_readme/__main__.py 2024-01-01 10:18:10.000000000 +0100 @@ -52,7 +52,7 @@ hatch_toml = _maybe_load_hatch_toml(args.hatch_toml) out: TextIO - out = open(args.o, "w") if args.o else sys.stdout # noqa: SIM115 + out = Path(args.o).open("w") if args.o else sys.stdout # noqa: SIM115 with closing(out): cli_run(pyproject, hatch_toml, out) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/_builder.py new/hatch_fancy_pypi_readme-24.1.0/src/hatch_fancy_pypi_readme/_builder.py --- old/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/_builder.py 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/src/hatch_fancy_pypi_readme/_builder.py 2024-01-01 10:18:10.000000000 +0100 @@ -4,20 +4,26 @@ from __future__ import annotations -from ._fragments import Fragment -from ._substitutions import Substituter +from typing import TYPE_CHECKING + + +if TYPE_CHECKING: + from ._fragments import Fragment + from ._substitutions import Substituter def build_text( - fragments: list[Fragment], substitutions: list[Substituter] + fragments: list[Fragment], + substitutions: list[Substituter], + version: str = "", ) -> str: - rv = [] - for f in fragments: - rv.append(f.render()) - - text = "".join(rv) + """ + Try avoiding breaking the API unnecessarily; it's used directly by + scikit-build-core. + """ + text = "".join(f.render() for f in fragments) for sub in substitutions: text = sub.substitute(text) - return text + return text.replace("$HFPR_VERSION", version) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/_cli.py new/hatch_fancy_pypi_readme-24.1.0/src/hatch_fancy_pypi_readme/_cli.py --- old/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/_cli.py 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/src/hatch_fancy_pypi_readme/_cli.py 2024-01-01 10:18:10.000000000 +0100 @@ -65,7 +65,7 @@ + "\n".join(f"- {msg}" for msg in e.errors), ) - print(build_text(config.fragments, config.substitutions), file=out) + print(build_text(config.fragments, config.substitutions, "42.0"), file=out) def _fail(msg: str) -> NoReturn: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/hooks.py new/hatch_fancy_pypi_readme-24.1.0/src/hatch_fancy_pypi_readme/hooks.py --- old/hatch_fancy_pypi_readme-23.1.0/src/hatch_fancy_pypi_readme/hooks.py 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/src/hatch_fancy_pypi_readme/hooks.py 2024-01-01 10:18:10.000000000 +0100 @@ -20,15 +20,18 @@ """ Update the project table's metadata. """ - config = load_and_validate_config(self.config) metadata["readme"] = { "content-type": config.content_type, - "text": build_text(config.fragments, config.substitutions), + "text": build_text( + config.fragments, + config.substitutions, + version=metadata.get("version", ""), + ), } -@hookimpl # type: ignore[misc] +@hookimpl def hatch_register_metadata_hook() -> type[MetadataHookInterface]: return FancyReadmeMetadataHook diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/tests/test_builder.py new/hatch_fancy_pypi_readme-24.1.0/tests/test_builder.py --- old/hatch_fancy_pypi_readme-23.1.0/tests/test_builder.py 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/tests/test_builder.py 2024-01-01 10:18:10.000000000 +0100 @@ -11,8 +11,8 @@ """ A single text fragment becomes the readme. """ - assert "This is the README!" == build_text( - [TextFragment("This is the README!")], [] + assert "This is the README for 1.0!" == build_text( + [TextFragment("This is the README for $HFPR_VERSION!")], [], "1.0" ) def test_multiple_text_fragment(self): @@ -26,4 +26,5 @@ TextFragment("This is the README!"), ], [], + "1.0", ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/tests/test_end_to_end.py new/hatch_fancy_pypi_readme-24.1.0/tests/test_end_to_end.py --- old/hatch_fancy_pypi_readme-23.1.0/tests/test_end_to_end.py 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/tests/test_end_to_end.py 2024-01-01 10:18:10.000000000 +0100 @@ -16,7 +16,7 @@ return run("build", *args, check=check) -@pytest.mark.slow +@pytest.mark.slow() def test_build(new_project): """ Build a fake project end-to-end and verify wheel contents. @@ -58,7 +58,7 @@ ) -@pytest.mark.slow +@pytest.mark.slow() def test_invalid_config(new_project): """ Missing config makes the build fail with a meaningful error message. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/tests/test_substitutions.py new/hatch_fancy_pypi_readme-24.1.0/tests/test_substitutions.py --- old/hatch_fancy_pypi_readme-23.1.0/tests/test_substitutions.py 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/tests/test_substitutions.py 2024-01-01 10:18:10.000000000 +0100 @@ -47,7 +47,7 @@ ) @pytest.mark.parametrize( - "pat,repl,text,expect", + ("pat", "repl", "text", "expect"), [ ( r"#(\d+)", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/tests/utils.py new/hatch_fancy_pypi_readme-24.1.0/tests/utils.py --- old/hatch_fancy_pypi_readme-23.1.0/tests/utils.py 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/tests/utils.py 2024-01-01 10:18:10.000000000 +0100 @@ -9,7 +9,7 @@ def run(*args, check=True): - process = subprocess.run( + process = subprocess.run( # noqa: PLW1510 [sys.executable, "-m", *args], # noqa: S603 stdout=subprocess.PIPE, stderr=subprocess.STDOUT, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hatch_fancy_pypi_readme-23.1.0/tox.ini new/hatch_fancy_pypi_readme-24.1.0/tox.ini --- old/hatch_fancy_pypi_readme-23.1.0/tox.ini 2023-05-22 08:59:35.000000000 +0200 +++ new/hatch_fancy_pypi_readme-24.1.0/tox.ini 2024-01-01 10:18:10.000000000 +0100 @@ -3,17 +3,22 @@ env_list = pre-commit, mypy, - py37, - py38, - py39, - py310, - py311, - py3{7,10,11}-cli, + py3{7,8,9,10,11,12}, + py3{7,10,11,12}-cli, coverage-report -isolated_build = true -[testenv:py3{7,10,11}-cli] +[testenv] +package = wheel +wheel_build_env = .pkg +extras = tests +pass_env = + FORCE_COLOR + NO_COLOR +commands = pytest {posargs} + + +[testenv:py3{7,10,12}-cli] deps = coverage[toml] commands = # Use -o only once, so we exercise both code paths. @@ -33,18 +38,14 @@ commands = mypy src -[testenv] -extras = tests -commands = pytest {posargs} - - -[testenv:py31{0,1}] +[testenv:py31{0,2}] deps = coverage[toml] commands = coverage run -m pytest {posargs} [testenv:coverage-report] -base_python = python3.11 +; Keep version in-sync with .python-version-default +base_python = python3.12 deps = coverage[toml] skip_install = true commands =