diff --git a/.gitignore b/.gitignore index c852266ecc..a92a445ac5 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ uvicorn.egg-info/ venv/ htmlcov/ site/ +dist/ diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 9cccc91b7d..0000000000 --- a/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -include LICENSE.md -global-exclude __pycache__ -global-exclude *.py[co] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000..aec35a7ad9 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,62 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "uvicorn" +dynamic = ["version"] +description = "The lightning-fast ASGI server." +readme = "README.md" +license = "BSD-3-Clause" +requires-python = ">=3.7" +authors = [ + { name = "Tom Christie", email = "tom@tomchristie.com" }, +] +classifiers = [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet :: WWW/HTTP", +] +dependencies = [ + "click>=7.0", + "h11>=0.8", + "typing-extensions;python_version < '3.8'", +] + +[project.optional-dependencies] +standard = [ + "colorama>=0.4;sys_platform == 'win32'", + "httptools>=0.4.0", + "python-dotenv>=0.13", + "PyYAML>=5.1", + "uvloop>=0.14.0,!=0.15.0,!=0.15.1; sys_platform != 'win32' and (sys_platform != 'cygwin' and platform_python_implementation != 'PyPy')", + "watchfiles>=0.13", + "websockets>=10.0", +] + +[project.scripts] +uvicorn = "uvicorn.main:main" + +[project.urls] +Changelog = "https://github.com/encode/uvicorn/blob/master/CHANGELOG.md" +Funding = "https://github.com/sponsors/encode" +Homepage = "https://www.uvicorn.org/" +Source = "https://github.com/encode/uvicorn" + +[tool.hatch.version] +path = "uvicorn/__init__.py" + +[tool.hatch.build.targets.sdist] +include = [ + "/uvicorn", +] diff --git a/requirements.txt b/requirements.txt index c73c9671a4..183b908f18 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,8 +7,8 @@ asgiref==3.5.2 wsproto==1.1.0 # Packaging +build==0.8.0 twine==4.0.1 -wheel==0.37.1 # Testing autoflake==1.4 diff --git a/scripts/build b/scripts/build index 1c47d2cc2a..92378cb942 100755 --- a/scripts/build +++ b/scripts/build @@ -8,6 +8,6 @@ fi set -x -${PREFIX}python setup.py sdist bdist_wheel +${PREFIX}python -m build ${PREFIX}twine check dist/* ${PREFIX}mkdocs build diff --git a/setup.py b/setup.py deleted file mode 100755 index bd0fd27205..0000000000 --- a/setup.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import os -import re - -from setuptools import setup - - -def get_version(package): - """ - Return package version as listed in `__version__` in `init.py`. - """ - path = os.path.join(package, "__init__.py") - init_py = open(path, "r", encoding="utf8").read() - return re.search("__version__ = ['\"]([^'\"]+)['\"]", init_py).group(1) - - -def get_long_description(): - """ - Return the README. - """ - return open("README.md", "r", encoding="utf8").read() - - -def get_packages(package): - """ - Return root package and all sub-packages. - """ - return [ - dirpath - for dirpath, dirnames, filenames in os.walk(package) - if os.path.exists(os.path.join(dirpath, "__init__.py")) - ] - - -env_marker_cpython = ( - "sys_platform != 'win32'" - " and (sys_platform != 'cygwin'" - " and platform_python_implementation != 'PyPy')" -) - -env_marker_win = "sys_platform == 'win32'" -env_marker_below_38 = "python_version < '3.8'" - -minimal_requirements = [ - "click>=7.0", - "h11>=0.8", - "typing-extensions;" + env_marker_below_38, -] - - -extra_requirements = [ - "websockets>=10.0", - "httptools>=0.4.0", - "uvloop>=0.14.0,!=0.15.0,!=0.15.1; " + env_marker_cpython, - "colorama>=0.4;" + env_marker_win, - "watchfiles>=0.13", - "python-dotenv>=0.13", - "PyYAML>=5.1", -] - - -setup( - name="uvicorn", - version=get_version("uvicorn"), - url="https://www.uvicorn.org/", - license="BSD", - description="The lightning-fast ASGI server.", - long_description=get_long_description(), - long_description_content_type="text/markdown", - author="Tom Christie", - author_email="tom@tomchristie.com", - packages=get_packages("uvicorn"), - python_requires=">=3.7", - install_requires=minimal_requirements, - extras_require={"standard": extra_requirements}, - include_package_data=True, - classifiers=[ - "Development Status :: 4 - Beta", - "Environment :: Web Environment", - "Intended Audience :: Developers", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - "Topic :: Internet :: WWW/HTTP", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", - ], - entry_points=""" - [console_scripts] - uvicorn=uvicorn.main:main - """, - project_urls={ - "Funding": "https://github.com/sponsors/encode", - "Source": "https://github.com/encode/uvicorn", - "Changelog": "https://github.com/encode/uvicorn/blob/master/CHANGELOG.md", - }, -)