Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Moved the metadata from setup.cfg into PEP 621-compliant pyproject.toml #2449

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .readthedocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ formats:
python:
version: 3.7
install:
- method: pip
path: .
- requirements: docs-requirements.txt

sphinx:
Expand Down
6 changes: 3 additions & 3 deletions check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ python ./trio/_tools/gen_exports.py --test \
# see https://forum.bors.tech/t/pre-test-and-pre-merge-hooks/322)
# autoflake --recursive --in-place .
# pyupgrade --py3-plus $(find . -name "*.py")
if ! black --check setup.py trio; then
if ! black --check trio; then
EXIT_STATUS=1
black --diff setup.py trio
black --diff trio
fi

# Run flake8 without pycodestyle and import-related errors
Expand All @@ -38,7 +38,7 @@ Problems were found by static analysis (listed above).
To fix formatting and see remaining errors, run

pip install -r test-requirements.txt
black setup.py trio
black trio
./check.sh

in your local checkout.
Expand Down
6 changes: 3 additions & 3 deletions ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,11 @@ fi

python -c "import sys, struct, ssl; print('#' * 70); print('python:', sys.version); print('version_info:', sys.version_info); print('bits:', struct.calcsize('P') * 8); print('openssl:', ssl.OPENSSL_VERSION, ssl.OPENSSL_VERSION_INFO); print('#' * 70)"

python -m pip install -U pip setuptools wheel
python -m pip install -U pip hatchling build
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Backends are never needed in outer envs — the frontends automatically provision them in the build venvs.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
python -m pip install -U pip hatchling build
python -m pip install -U pip build

python -m pip --version

python setup.py sdist --formats=zip
python -m pip install dist/*.zip
python -m build -nsx .
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's highly discouraged to use short options with unknown meanings in shell scripts. The typical convention is to use long names so that the readers could know what's happening without having to google or misinterpret things. Also, no need to pass the current dir as it's the default. And two of those options are probably harmful in this case too.

python -m pip install dist/*.tar.gz

if [ "$CHECK_FORMATTING" = "1" ]; then
python -m pip install -r test-requirements.txt
Expand Down
1 change: 1 addition & 0 deletions docs-requirements.in
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ jinja2 < 3.1
sphinx_rtd_theme
sphinxcontrib-trio
towncrier
setuptools-scm

# Trio's own dependencies
cffi; os_name == "nt"
Expand Down
2 changes: 2 additions & 0 deletions docs-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ pytz==2022.4
# via babel
requests==2.28.1
# via sphinx
setuptools-scm==7.0.5
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't seem needed/related. Also, it's a bad idea to change behavior together with refactoring. If this plugin is needed, it should be integrated separately.

# via setuptools-scm
sniffio==1.3.0
# via -r docs-requirements.in
snowballstemmer==2.2.0
Expand Down
Binary file added docs/source/.conf.py.kate-swp
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this seems like an accidental commit, you should probably add .kate-swp to your global git ignore

Binary file not shown.
6 changes: 3 additions & 3 deletions docs/source/contributing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ in separate sections below:
adding a test to make sure it stays fixed.

* :ref:`pull-request-formatting`: If you changed Python code, then did
you run ``black setup.py trio``? (Or for other packages, replace
you run ``black trio``? (Or for other packages, replace
``trio`` with the package name.)

* :ref:`pull-request-release-notes`: If your change affects
Expand Down Expand Up @@ -292,7 +292,7 @@ sloppy as you like about whitespace; and then before you commit, just
run::

pip install -U black
black setup.py trio
black trio

to fix it up. (And don't worry if you forget – when you submit a pull
request then we'll automatically check and remind you.) Hopefully this
Expand All @@ -305,7 +305,7 @@ you can can add ``# fmt: off`` and ``# fmt: on`` comments.

If you want to see what changes black will make, you can use::

black --diff setup.py trio
black --diff trio

(``--diff`` displays a diff, versus the default mode which fixes files
in-place.)
Expand Down
8 changes: 6 additions & 2 deletions docs/source/releasing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ Things to do for releasing:

+ bump version number

- increment as per Semantic Versioning rules
- increment as per Semantic Versioning rules in

- in the metadata file (``setup.cfg``)

- in ``trio/_version.py``

- remove ``+dev`` tag from version number

Expand All @@ -44,7 +48,7 @@ Things to do for releasing:
* push to PyPI::

git clean -xdf # maybe run 'git clean -xdn' first to see what it will delete
python3 setup.py sdist bdist_wheel
python3 -m build -ws
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do not pass both --sdist and --wheel, because this causes wheels building from the Git checkout, as opposed to building wheels from sdist (as pip wheel does).

Suggested change
python3 -m build -ws
python3 -m build

twine upload dist/*

* update version number in the same pull request
Expand Down
1 change: 1 addition & 0 deletions newsfragments/2449.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Moved the metadata into ``PEP 621``-compliant ``pyproject.toml``.
63 changes: 63 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,66 @@
[build-system]
requires = ["hatchling>=1.8.0"]
build-backend = "hatchling.build"
#requires = ["setuptools>=61.2", "setuptools_scm[toml]>=3.4.3"]
#build-backend = "setuptools.build_meta"

[project]
name = "trio"
authors = [{name = "Nathaniel J. Smith", email = "njs@pobox.com"}]
license = {text = "MIT OR Apache-2.0"}
description = "A friendly Python library for async concurrency and I/O"
readme = "README.rst"
keywords = ["async", "io", "networking", "trio"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"License :: OSI Approved :: Apache Software License",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS :: MacOS X",
"Operating System :: POSIX :: BSD",
"Operating System :: Microsoft :: Windows",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Topic :: System :: Networking",
"Framework :: Trio",
]
urls = {Homepage = "https://github.com/python-trio/trio"}
requires-python = ">=3.7"
dependencies = [
"attrs >= 19.2.0",
"sortedcontainers",
"async_generator >= 1.9",
"idna",
"outcome",
"sniffio",
# cffi 1.12 adds from_buffer(require_writable=True) and ffi.release()
# cffi 1.14 fixes memory leak inside ffi.getwinerror()
# cffi is required on Windows, except on PyPy where it is built-in
"cffi>=1.14; os_name == 'nt' and implementation_name != 'pypy'",
"exceptiongroup >= 1.0.0rc9; python_version < '3.11'",
]
dynamic = ["version"]

[tool.hatch.version]
path = "trio/_version.py"

[tool.setuptools]
include-package-data = true

[tool.setuptools.packages]
find = {namespaces = false}

[tool.setuptools_scm]
write_to = "trio/_version.py"
write_to_template = "__version__ = \"{version}\"\n"
Comment on lines +54 to +62
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need


[tool.black]
target-version = ['py37']

Expand Down
135 changes: 18 additions & 117 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,119 +1,20 @@
from setuptools import setup, find_packages

exec(open("trio/_version.py", encoding="utf-8").read())

LONG_DESC = """\
.. image:: https://raw.githubusercontent.com/python-trio/trio/9b0bec646a31e0d0f67b8b6ecc6939726faf3e17/logo/logo-with-background.svg
:width: 200px
:align: right

The Trio project's goal is to produce a production-quality, `permissively
licensed <https://github.com/python-trio/trio/blob/master/LICENSE>`__,
async/await-native I/O library for Python. Like all async libraries,
its main purpose is to help you write programs that do **multiple
things at the same time** with **parallelized I/O**. A web spider that
wants to fetch lots of pages in parallel, a web server that needs to
juggle lots of downloads and websocket connections at the same time, a
process supervisor monitoring multiple subprocesses... that sort of
thing. Compared to other libraries, Trio attempts to distinguish
itself with an obsessive focus on **usability** and
**correctness**. Concurrency is complicated; we try to make it *easy*
to get things *right*.

Trio was built from the ground up to take advantage of the `latest
Python features <https://www.python.org/dev/peps/pep-0492/>`__, and
draws inspiration from `many sources
<https://github.com/python-trio/trio/wiki/Reading-list>`__, in
particular Dave Beazley's `Curio <https://curio.readthedocs.io/>`__.
The resulting design is radically simpler than older competitors like
`asyncio <https://docs.python.org/3/library/asyncio.html>`__ and
`Twisted <https://twistedmatrix.com/>`__, yet just as capable. Trio is
the Python I/O library I always wanted; I find it makes building
I/O-oriented programs easier, less error-prone, and just plain more
fun. `Perhaps you'll find the same
<https://github.com/python-trio/trio/wiki/Testimonials>`__.

This project is young and still somewhat experimental: the overall
design is solid and the existing features are fully tested and
documented, but you may encounter missing functionality or rough
edges. We *do* encourage you do use it, but you should `read and
subscribe to issue #1
<https://github.com/python-trio/trio/issues/1>`__ to get warning and a
chance to give feedback about any compatibility-breaking changes.

Vital statistics:

* Supported environments: Linux, macOS, or Windows running some kind of Python
3.7-or-better (either CPython or PyPy3 is fine). \\*BSD and illumos likely
work too, but are not tested.

* Install: ``python3 -m pip install -U trio`` (or on Windows, maybe
``py -3 -m pip install -U trio``). No compiler needed.

* Tutorial and reference manual: https://trio.readthedocs.io

* Bug tracker and source code: https://github.com/python-trio/trio

* Real-time chat: https://gitter.im/python-trio/general

* Discussion forum: https://trio.discourse.group

* License: MIT or Apache 2, your choice

* Contributor guide: https://trio.readthedocs.io/en/latest/contributing.html

* Code of conduct: Contributors are requested to follow our `code of
conduct
<https://trio.readthedocs.io/en/latest/code-of-conduct.html>`_
in all project spaces.
import inspect
import sys
from warnings import warn

from setuptools import setup

if len(inspect.stack()) == 1:
warn(
"""
========================================
Unsupported building/installation method
========================================
This version of trio has dropped support for using `python setup.py ...`.
`setup.py` will be removed in future.
Please use `python -m build` (or any other PEP 517 build backend) and then install the built wheel with `pip` instead.
"""
)

setup(
name="trio",
version=__version__,
description="A friendly Python library for async concurrency and I/O",
long_description=LONG_DESC,
author="Nathaniel J. Smith",
author_email="njs@pobox.com",
url="https://github.com/python-trio/trio",
license="MIT OR Apache-2.0",
packages=find_packages(),
install_requires=[
"attrs >= 19.2.0", # for eq
"sortedcontainers",
"async_generator >= 1.9",
"idna",
"outcome",
"sniffio",
# cffi 1.12 adds from_buffer(require_writable=True) and ffi.release()
# cffi 1.14 fixes memory leak inside ffi.getwinerror()
# cffi is required on Windows, except on PyPy where it is built-in
"cffi>=1.14; os_name == 'nt' and implementation_name != 'pypy'",
"exceptiongroup >= 1.0.0rc9; python_version < '3.11'",
],
# This means, just install *everything* you see under trio/, even if it
# doesn't look like a source file, so long as it appears in MANIFEST.in:
include_package_data=True,
python_requires=">=3.7",
keywords=["async", "io", "networking", "trio"],
classifiers=[
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"License :: OSI Approved :: Apache Software License",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS :: MacOS X",
"Operating System :: POSIX :: BSD",
"Operating System :: Microsoft :: Windows",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Topic :: System :: Networking",
"Framework :: Trio",
],
)
if __name__ == "__main__":
setup()
2 changes: 1 addition & 1 deletion trio/_core/tests/test_multierror_scripts/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# This isn't really a package, everything in here is a standalone script. This
# __init__.py is just to fool setup.py into actually installing the things.
# __init__.py is just to fool the build backend used into actually installing the things.