@@ -10,12 +10,11 @@ name = "attrs"
1010authors = [{ name = " Hynek Schlawack" , email = " hs@ox.cx" }]
1111license = " MIT"
1212license-files = [" LICENSE" ]
13- requires-python = " >=3.8 "
13+ requires-python = " >=3.9 "
1414description = " Classes Without Boilerplate"
1515keywords = [" class" , " attribute" , " boilerplate" ]
1616classifiers = [
1717 " Development Status :: 5 - Production/Stable" ,
18- " Programming Language :: Python :: 3.8" ,
1918 " Programming Language :: Python :: 3.9" ,
2019 " Programming Language :: Python :: 3.10" ,
2120 " Programming Language :: Python :: 3.11" ,
@@ -28,29 +27,41 @@ classifiers = [
2827dependencies = []
2928dynamic = [" version" , " readme" ]
3029
31- [project .optional-dependencies ]
30+ [project .urls ]
31+ Documentation = " https://www.attrs.org/"
32+ Changelog = " https://www.attrs.org/en/stable/changelog.html"
33+ GitHub = " https://github.com/python-attrs/attrs"
34+ Funding = " https://github.com/sponsors/hynek"
35+ Tidelift = " https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi"
36+
37+
38+ [dependency-groups ]
3239tests-mypy = [
3340 ' pytest-mypy-plugins; platform_python_implementation == "CPython" and python_version >= "3.10"' ,
3441 # Since the mypy error messages keep changing, we have to keep updating this
3542 # pin.
3643 ' mypy>=1.11.1; platform_python_implementation == "CPython" and python_version >= "3.10"' ,
3744]
3845tests = [
46+ { include-group = " tests-mypy" },
3947 # For regression test to ensure cloudpickle compat doesn't break.
4048 ' cloudpickle; platform_python_implementation == "CPython"' ,
4149 " hypothesis" ,
4250 " pympler" ,
4351 # 4.3.0 dropped last use of `convert`
4452 " pytest>=4.3.0" ,
45- " pytest-xdist[psutil]" ,
46- " attrs[tests-mypy]" ,
4753]
4854cov = [
49- " attrs[ tests] " ,
55+ { include-group = " tests" } ,
5056 # Ensure coverage is new enough for `source_pkgs`.
5157 " coverage[toml]>=5.3" ,
5258]
53- benchmark = [" pytest-codspeed" , " pytest-xdist[psutil]" , " attrs[tests]" ]
59+ pyright = [" pyright" , { include-group = " tests" }]
60+ benchmark = [
61+ { include-group = " tests" },
62+ " pytest-codspeed" ,
63+ " pytest-xdist[psutil]" ,
64+ ]
5465docs = [
5566 " cogapp" ,
5667 " furo" ,
@@ -59,17 +70,10 @@ docs = [
5970 " sphinx-notfound-page" ,
6071 " sphinxcontrib-towncrier" ,
6172 # See https://github.com/sphinx-contrib/sphinxcontrib-towncrier/issues/92
62- # Pin also present in tox.ini
6373 " towncrier<24.7" ,
6474]
65- dev = [" attrs[tests]" , " pre-commit-uv" ]
66-
67- [project .urls ]
68- Documentation = " https://www.attrs.org/"
69- Changelog = " https://www.attrs.org/en/stable/changelog.html"
70- GitHub = " https://github.com/python-attrs/attrs"
71- Funding = " https://github.com/sponsors/hynek"
72- Tidelift = " https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi"
75+ docs-watch = [{ include-group = " docs" }, " watchfiles" ]
76+ dev = [{ include-group = " tests" }]
7377
7478
7579[tool .hatch .version ]
@@ -227,6 +231,8 @@ ignore = [
227231 " TD" , # we don't follow other people's todo style
228232 " TRY301" , # I'm sorry, but this makes not sense for us.
229233 " UP031" , # format() is slow as molasses; % and f'' FTW.
234+ " UP006" , # replace Dict etc by dict etc later.
235+ " UP035" , # replace Dict etc by dict etc later.
230236]
231237
232238[tool .ruff .lint .per-file-ignores ]
@@ -254,10 +260,10 @@ ignore = [
254260"src/*/*.pyi" = [" ALL" ] # TODO
255261"tests/test_annotations.py" = [" FA100" ]
256262"tests/typing_example.py" = [
257- " E741" , # ambiguous variable names don't matter in type checks
258- " B018" , # useless expressions aren't useless in type checks
259- " B015" , # pointless comparison in type checks aren't pointless
260- " UP037" , # we test some older syntaxes on purpose
263+ " E741" , # ambiguous variable names don't matter in type checks
264+ " B018" , # useless expressions aren't useless in type checks
265+ " B015" , # pointless comparison in type checks aren't pointless
266+ " UP037" , # we test some older syntaxes on purpose
261267]
262268
263269[tool .ruff .lint .isort ]
0 commit comments