Skip to content

Commit

Permalink
Migrated setup.py -> pyproject.toml with Hatchling
Browse files Browse the repository at this point in the history
Most of the changes to `pyproject.toml` were made by running
`hatch new --init` (see
https://hatch.pypa.io/latest/intro/#existing-project).
Most of the changes to the other files were based on the changes made in
django-commons/django-debug-toolbar#1690.

### `release.yml`:
* `hatch version` is run instead of `hatchling version` (as is done in
  the PR mentioned above), as the latter crashes with the error:
  ```
  hatchling.plugin.exceptions.UnknownPluginError: Unknown version source: vcs
  ```
  Installing `hatch` takes considerably longer than just `hatchling`,
  but I think it's still acceptable.
* Updated the `pypa/gh-action-pypi-publish` action from the sunset
  `master` branch to `release/v1`; see warning at
  https://github.com/jazzband/django-simple-history/actions/runs/9246937361.
  Also replaced the deprecated `repository_url` with `repository-url`; see
  https://github.com/pypa/gh-action-pypi-publish/blob/v1.8.14/action.yml#L15
### `.pre-commit-config.yaml`:
* Added some pre-commit hooks for formatting and validating
  `pyproject.toml`
### `MANIFEST.in`:
* Removed `MANIFEST.in`, as the default
  `[tool.hatch.build.targets.sdist]` configuration (in `pyproject.toml`)
  includes all files not ignored through our `.gitignore`; see
  https://hatch.pypa.io/latest/plugins/builder/sdist/#default-file-selection
### `pyproject.toml`:
* Didn't include the `license` field, as the docs recommend using a
  `License ::` classifier instead - see
  https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license
* The classifier "Programming Language :: Python :: 3"
  was changed to "Programming Language :: Python :: 3 :: Only"
  by the `pyproject-fmt` pre-commit hook
* Set `core-metadata-version = "2.2"` (copied from
  django-commons/django-debug-toolbar#1916) due to
  jazzband/help#360
* Didn't include the last 3 packages from the `packages` kwarg in
  `setup.py` when configuring `[tool.hatch.build.targets.wheel]`, since
  they don't make any difference in the generated wheel, as having just
  `simple_history` will include all its subpackages
* As part of porting long_description's file concatenation from
  `setup.py`, `hatch-fancy-pypi-readme` was added to `requires` and
  configured to concatenate the same files - except with the first title
  of `README.rst` and the "Unreleased" section of `CHANGES.rst` removed
  (facilitated by the added "Start of PyPI readme" comments in those two
  files)
  • Loading branch information
ddabble committed May 29, 2024
1 parent cf6848c commit fef00f6
Show file tree
Hide file tree
Showing 9 changed files with 113 additions and 72 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,18 @@ jobs:
- name: Install dependencies
run: |
python -m pip install -U pip
python -m pip install -U setuptools twine wheel
python -m pip install -U hatch build twine
- name: Build package
run: |
python setup.py --version
python setup.py sdist --format=gztar bdist_wheel
hatch version
python -m build
twine check dist/*
- name: Upload packages to Jazzband
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
uses: pypa/gh-action-pypi-publish@master
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: jazzband
password: ${{ secrets.JAZZBAND_RELEASE_KEY }}
repository_url: https://jazzband.co/projects/django-simple-history/upload
repository-url: https://jazzband.co/projects/django-simple-history/upload
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ jobs:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: |
setup.py
pyproject.toml
tox.ini
requirements/*.txt
Expand Down
10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,19 @@ repos:
- id: check-docstring-first
- id: check-executables-have-shebangs
- id: check-merge-conflict
- id: check-toml
- id: debug-statements
- id: detect-private-key

- repo: https://github.com/tox-dev/pyproject-fmt
rev: 2.1.3
hooks:
- id: pyproject-fmt
- repo: https://github.com/abravalheri/validate-pyproject
rev: v0.18
hooks:
- id: validate-pyproject

- repo: https://github.com/adrienverge/yamllint
rev: v1.35.1
hooks:
Expand Down
5 changes: 5 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ Unreleased
- Dropped support for Django 3.2, which reached end-of-life on 2024-04-01 (gh-1344)
- Removed the temporary requirement on ``asgiref>=3.6`` added in 3.5.0,
now that the minimum required Django version is 4.2 (gh-1344)
- Migrated package building from using the deprecated ``setup.py`` to using
``pyproject.toml`` (with Hatchling as build backend);
``setup.py`` has consequently been removed (gh-1348)

.. Start of PyPI readme
3.6.0 (2024-05-26)
------------------
Expand Down
6 changes: 0 additions & 6 deletions MANIFEST.in

This file was deleted.

2 changes: 2 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
django-simple-history |pypi-version|
====================================

.. Start of PyPI readme
|jazzband| |build-status| |docs| |coverage| |maintainability| |code-style| |downloads|

.. |pypi-version| image:: https://img.shields.io/pypi/v/django-simple-history.svg
Expand Down
92 changes: 88 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,83 @@
[build-system]
build-backend = "hatchling.build"
requires = [
"hatch-fancy-pypi-readme",
"hatch-vcs",
"hatchling",
]

[project]
name = "django-simple-history"
description = "Store model history and view/revert changes from admin site."
maintainers = [
{ name = "Trey Hunner" },
]
authors = [
{ name = "Corey Bertram", email = "corey@qr7.com" },
]
requires-python = ">=3.8"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Framework :: Django",
"Framework :: Django :: 4.2",
"Framework :: Django :: 5.0",
"Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
"Programming Language :: Python",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
# DEV: uncomment this when the `pyproject-fmt` pre-commit hook stops removing it
#"Programming Language :: Python :: 3.13",
]
dynamic = [
"readme",
"version",
]
dependencies = [
]
urls.Changelog = "https://github.com/jazzband/django-simple-history/blob/master/CHANGES.rst"
urls.Documentation = "https://django-simple-history.readthedocs.io/en/stable/"
urls.Homepage = "https://github.com/jazzband/django-simple-history"
urls.Source = "https://github.com/jazzband/django-simple-history"
urls.Tracker = "https://github.com/jazzband/django-simple-history/issues"

[tool.hatch.version]
source = "vcs"
fallback-version = "0.0.0"

[tool.hatch.version.raw-options]
version_scheme = "no-guess-dev"
local_scheme = "node-and-date"

[tool.hatch.build.targets.wheel]
# Jazzband's release process is limited to 2.2 metadata
core-metadata-version = "2.2"
packages = [
"simple_history",
]

[tool.hatch.build.targets.sdist]
# Jazzband's release process is limited to 2.2 metadata
core-metadata-version = "2.2"

[tool.hatch.metadata.hooks.fancy-pypi-readme]
content-type = "text/x-rst"
fragments = [
{ path = "README.rst", start-after = ".. Start of PyPI readme\n\n" },
{ text = "\n====\n\nChangelog\n=========\n\n" },
{ path = "CHANGES.rst", start-after = ".. Start of PyPI readme\n\n" },
]

[tool.black]
line-length = 88
target-version = ["py38"]
target-version = [
"py38",
]

[tool.isort]
profile = "black"
Expand All @@ -9,12 +86,19 @@ py_version = "38"
[tool.coverage.run]
parallel = true
branch = true
source = ["simple_history"]
source = [
"simple_history",
]

[tool.coverage.paths]
source = ["simple_history", ".tox/*/site-packages"]
source = [
"simple_history",
".tox/*/site-packages",
]

[tool.coverage.report]
show_missing = true
skip_covered = true
omit = ["requirements/*"]
omit = [
"requirements/*",
]
54 changes: 0 additions & 54 deletions setup.py

This file was deleted.

4 changes: 2 additions & 2 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ commands =
[testenv:format]
deps = -rrequirements/lint.txt
commands =
isort docs simple_history runtests.py setup.py
black docs simple_history runtests.py setup.py
isort docs simple_history runtests.py
black docs simple_history runtests.py
flake8 simple_history

[testenv:lint]
Expand Down

0 comments on commit fef00f6

Please sign in to comment.