Skip to content

Commit

Permalink
Switch to pyproject.toml
Browse files Browse the repository at this point in the history
With [PEP 621 support added to setuptools](pypa/setuptools#2970) last year, and with pip supporting editable installs as of 21.3, we can move to `pyproject.toml` and deprecate `setup.py`. The file remains for legacy pip support.

Because [flake8 does not want to support pyproject.tml yet](PyCQA/flake8#234), unlike all the other tools we use, I’m removing it in favor of [ruff](https://github.com/charliermarsh/ruff).

This change also enables support for Wagtail 3.x by removing the `<3` version pin. This will result in the last release of TreeModelAdmin to support Wagtail < 4.

Wagtail 4.x is not yet supported.

The version is bumped to 1.5.0 for anticipated release to permit installing with Wagtail 3.x.

I’ve also brought in some quality-of-life improvements for coverage checking from the Django-Flags tox/GHA setup.
  • Loading branch information
willbarton committed Dec 20, 2022
1 parent 1d7bc3d commit 4e6c2ea
Show file tree
Hide file tree
Showing 7 changed files with 176 additions and 118 deletions.
78 changes: 52 additions & 26 deletions .github/workflows/test.yml
Expand Up @@ -8,12 +8,12 @@ jobs:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v2

- name: Set up Python
uses: actions/setup-python@v1
uses: actions/setup-python@v4
with:
python-version: 3.9
python-version: 3.8

- name: Install dependencies
run: |
Expand All @@ -32,31 +32,25 @@ jobs:
strategy:
matrix:
toxenv:
- py36-dj22-wag211
- py36-dj22-waglatest
- py36-dj32-waglatest
- py39-dj22-wag211
- py39-dj22-waglatest
- py39-dj32-waglatest
- py38-dj3-wag2
- py38-dj3-wag3
- py38-dj3-waglatest
- py38-dj4-waglatest
include:
- toxenv: py36-dj22-wag211
python-version: 3.6
- toxenv: py36-dj22-waglatest
python-version: 3.6
- toxenv: py36-dj32-waglatest
python-version: 3.6
- toxenv: py39-dj22-wag211
python-version: 3.9
- toxenv: py39-dj22-waglatest
python-version: 3.9
- toxenv: py39-dj32-waglatest
python-version: 3.9
- toxenv: py38-dj3-wag2
python-version: 3.8
- toxenv: py38-dj3-wag3
python-version: 3.8
- toxenv: py38-dj3-waglatest
python-version: 3.8
- toxenv: py38-dj4-waglatest
python-version: 3.8

steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v1
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

Expand All @@ -68,8 +62,40 @@ jobs:
- name: Run tox
run: |
tox
coveralls
env:
TOXENV: ${{ matrix.toxenv }}
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Store test coverage
uses: actions/upload-artifact@v2
with:
name: coverage
path: .coverage.*

coverage:
name: coverage
runs-on: ubuntu-latest
needs:
- test

steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.10"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install tox
- name: Retrieve test coverage
uses: actions/download-artifact@v2
with:
name: coverage

- name: Check coverage
run: tox -e coverage
7 changes: 3 additions & 4 deletions .pre-commit-config.yaml
Expand Up @@ -5,11 +5,10 @@ repos:
- id: black
args: ["treemodeladmin", "setup.py", "--line-length=79"]
exclude: migrations
- repo: https://gitlab.com/pycqa/flake8
rev: 4.0.1
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.0.188
hooks:
- id: flake8
additional_dependencies: [flake8-bugbear==22.1.11]
- id: ruff
- repo: https://github.com/pycqa/isort
rev: 5.10.1
hooks:
Expand Down
72 changes: 67 additions & 5 deletions pyproject.toml
@@ -1,6 +1,53 @@
[project]
name = "wagtail-treemodeladmin"
version = "1.5.0"
description = "TreeModelAdmin for Wagtail"
readme = "README.md"
requires-python = ">=3.8"
license = {text = "CC0"}
authors = [
{name = "CFPB", email = "tech@cfpb.gov" }
]
dependencies = [
"wagtail>=2.15,<4",
]
classifiers = [
"Framework :: Django",
"Framework :: Django :: 3.2",
"Framework :: Django :: 4",
"Framework :: Wagtail",
"Framework :: Wagtail :: 2",
"Framework :: Wagtail :: 3",
"License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication",
"License :: Public Domain",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
]

[project.optional-dependencies]
testing = [
"coverage[toml]",
]

[project.urls]
"Homepage" = "https://github.com/cfpb/wagtail-treemodeladmin"
"Bug Reports" = "https://github.com/cfpb/wagtail-treemodeladmin/issues"
"Source" = "https://github.com/cfpb/wagtail-treemodeladmin"

[build-system]
requires = ["setuptools>=43.0.0", "wheel"]
build-backend = "setuptools.build_meta"

[tool.setuptools.package-data]
treemodeladmin = [
"templates/treemodeladmin/*",
"templates/treemodeladmin/includes/*",
"static/treemodeladmin/css/*",
]

[tool.black]
line-length = 79
target-version = ['py36', 'py38']
target-version = ["py38"]
include = '\.pyi?$'
exclude = '''
(
Expand All @@ -14,8 +61,6 @@ exclude = '''
| dist
| migrations
| site
| \*.json
| \*.csv
)/
)
'''
Expand All @@ -37,5 +82,22 @@ sections = [
"LOCALFOLDER"
]

[build-system]
requires = ["setuptools", "wheel"]
[tool.ruff]
exclude = [
".git",
".tox",
"__pycache__",
"*/migrations/*.py",
"*/tests/treemodeladmintest/migrations/*",
]
ignore = []
select = [
"E",
"F",
"W",
]

[tool.coverage.run]
omit = [
"treemodeladmin/tests/*",
]
42 changes: 2 additions & 40 deletions setup.py
@@ -1,42 +1,4 @@
from setuptools import find_packages, setup
from setuptools import setup

install_requires = [
"wagtail>=2.11,<3",
]

testing_extras = ["coverage>=3.7.0"]

setup(
name="wagtail-treemodeladmin",
url="https://github.com/cfpb/wagtail-treemodeladmin",
author="CFPB",
author_email="tech@cfpb.gov",
description="TreeModelAdmin for Wagtail",
long_description=open("README.md", "r", encoding="utf-8").read(),
long_description_content_type="text/markdown",
license="CC0",
version="1.5.0",
include_package_data=True,
packages=find_packages(),
package_data={
"treemodeladmin": [
"templates/treemodeladmin/*",
"templates/treemodeladmin/includes/*",
"static/treemodeladmin/css/*",
]
},
python_requires=">=3.6",
install_requires=install_requires,
extras_require={"testing": testing_extras},
classifiers=[
"Framework :: Django",
"Framework :: Django :: 2.2",
"Framework :: Django :: 3.1",
"Framework :: Wagtail",
"Framework :: Wagtail :: 2",
"License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication",
"License :: Public Domain",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
],
)
setup()
60 changes: 23 additions & 37 deletions tox.ini
Expand Up @@ -2,60 +2,46 @@
skipsdist=True
envlist=
lint,
py{36,39}-dj{22}-wag{211,latest}
py{36,39}-dj{32}-wag{latest}
py{38,311}-dj{3}-wag{2,3,latest},
coverage

[testenv]
install_command=pip install -e ".[testing]" -U {opts} {packages}
commands=
coverage erase
coverage run --source='treemodeladmin' {envbindir}/django-admin test {posargs}
coverage report -m
python -b -m coverage run --parallel-mode --source='treemodeladmin' {envbindir}/django-admin test {posargs}
setenv=
DJANGO_SETTINGS_MODULE=treemodeladmin.tests.settings

basepython=
py36: python3.6
py39: python3.9
py38: python3.8
py311: python3.11

deps=
dj22: Django>=2.2,<2.3
dj32: Django>=3.2,<3.3
wag211: wagtail>=2.11,<2.12
dj3: Django>=3.2,<4
dj4: Django>=4.1,<5
wag2: wagtail>=2.15,<3
wag3: wagtail>=3,<4
waglatest: wagtail<3

[testenv:lint]
basepython=python3.9
basepython=python3.8
deps=
black
flake8
ruff
isort
commands=
black --check treemodeladmin setup.py
flake8 treemodeladmin setup.py
black --check treemodeladmin
ruff treemodeladmin
isort --check-only --diff treemodeladmin

[flake8]
ignore=E732,W503,W504
exclude=
.git,
.tox,
__pycache__,
*/migrations/*.py,
*/tests/treemodeladmintest/migrations/*

[isort]
combine_as_imports=1
lines_after_imports=2
include_trailing_comma=1
multi_line_output=3
skip=.tox,migrations
use_parentheses=1
known_django=django
known_wagtail=wagtail
default_section=THIRDPARTY
sections=FUTURE,STDLIB,DJANGO,WAGTAIL,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
[testenv:coverage]
basepython=python3.8
deps=
coverage[toml]
diff_cover
commands=
coverage combine
coverage report -m
coverage xml
diff-cover coverage.xml --compare-branch=origin/main --fail-under=100

[coverage:run]
omit =
treemodeladmin/tests/*
34 changes: 28 additions & 6 deletions treemodeladmin/tests/settings.py
@@ -1,5 +1,7 @@
import os

import wagtail


DEBUG = True

Expand All @@ -26,19 +28,39 @@
"wagtail.contrib.forms",
"wagtail.contrib.modeladmin",
"wagtail.contrib.settings",
"wagtail.tests.testapp",
"wagtail.admin",
"wagtail.core",
"wagtail.documents",
"wagtail.images",
"wagtail.sites",
"wagtail.users",
)

WAGTAILADMIN_RICH_TEXT_EDITORS = {
"default": {"WIDGET": "wagtail.admin.rich_text.DraftailRichTextArea"},
"custom": {"WIDGET": "wagtail.tests.testapp.rich_text.CustomRichTextArea"},
}
if wagtail.VERSION >= (3, 0):
WAGTAIL_APPS += (
"wagtail",
"wagtail.test.testapp",
)

WAGTAILADMIN_RICH_TEXT_EDITORS = {
"default": {"WIDGET": "wagtail.admin.rich_text.DraftailRichTextArea"},
"custom": {
"WIDGET": "wagtail.test.testapp.rich_text.CustomRichTextArea"
},
}

else:
WAGTAIL_APPS += (
"wagtail.core",
"wagtail.tests.testapp",
)

WAGTAILADMIN_RICH_TEXT_EDITORS = {
"default": {"WIDGET": "wagtail.admin.rich_text.DraftailRichTextArea"},
"custom": {
"WIDGET": "wagtail.tests.testapp.rich_text.CustomRichTextArea"
},
}
WAGTAILADMIN_BASE_URL = "http://localhost:8000"

MIDDLEWARE = (
"django.middleware.common.CommonMiddleware",
Expand Down
1 change: 1 addition & 0 deletions treemodeladmin/tests/treemodeladmintest/apps.py
Expand Up @@ -6,3 +6,4 @@ class TreeModelAdminTestAppConfig(AppConfig):
name = "treemodeladmin.tests.treemodeladmintest"
label = "treemodeladmintest"
verbose_name = _("Test Tree Model Admin")
default_auto_field = "django.db.models.AutoField"

0 comments on commit 4e6c2ea

Please sign in to comment.