diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a8bfd1ce..86bd97f6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,4 +23,6 @@ jobs: TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} run: | - python setup.py publish \ No newline at end of file + python -m build + twine check dist/* + twine upload dist/* diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..9158042f --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,67 @@ +[build-system] +requires = ["setuptools>=61.2"] +build-backend = "setuptools.build_meta" + +[project] +name = "drf-spectacular" +authors = [{name = "T. Franzel", email = "tfranzel@gmail.com"}] +license = {text = "BSD"} +description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Framework :: Django", + "Framework :: Django :: 2.2", + "Framework :: Django :: 3.2", + "Framework :: Django :: 4.0", + "Framework :: Django :: 4.1", + "Framework :: Django :: 4.2", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "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", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: Documentation", + "Topic :: Software Development :: Code Generators", +] +requires-python = ">=3.6" +dependencies = [ + "Django>=2.2", + "djangorestframework>=3.10.3", + "uritemplate>=2.0.0", + "PyYAML>=5.1", + "jsonschema>=2.6.0", + "inflection>=0.3.1", + 'typing-extensions; python_version < "3.10"', +] +dynamic = ["version"] + +[project.readme] +file = "README.rst" +content-type = "text/x-rst" + +[project.urls] +Homepage = "https://github.com/tfranzel/drf-spectacular" +Source = "https://github.com/tfranzel/drf-spectacular" +Documentation = "https://drf-spectacular.readthedocs.io" + +[project.optional-dependencies] +offline = ["drf-spectacular-sidecar"] +sidecar = ["drf-spectacular-sidecar"] + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages] +find = {namespaces = false} + +[tool.setuptools.dynamic] +version = {attr = "drf_spectacular.__version__"} diff --git a/requirements/packaging.txt b/requirements/packaging.txt index 1eae9429..e851240a 100644 --- a/requirements/packaging.txt +++ b/requirements/packaging.txt @@ -1,3 +1,4 @@ twine>=3.1.1 wheel>=0.34.2 +build setuptools diff --git a/setup.py b/setup.py index 488db677..60684932 100644 --- a/setup.py +++ b/setup.py @@ -1,109 +1,3 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import os -import re -import shutil -import sys +from setuptools import setup -from setuptools import find_namespace_packages, setup - -name = 'drf-spectacular' -package = 'drf_spectacular' -description = 'Sane and flexible OpenAPI 3 schema generation for Django REST framework' -url = 'https://github.com/tfranzel/drf-spectacular' -author = 'T. Franzel' -author_email = 'tfranzel@gmail.com' -license = 'BSD' - -with open('README.rst') as readme: - long_description = readme.read() - -with open('requirements/base.txt') as fh: - requirements = [r for r in fh.read().split('\n') if not r.startswith('#')] - - -def get_version(package): - """ - Return package version as listed in `__version__` in `init.py`. - """ - init_py = open(os.path.join(package, '__init__.py')).read() - return re.search("^__version__ = ['\"]([^'\"]+)['\"]", - init_py, re.MULTILINE).group(1) - - -version = get_version(package) - - -if sys.argv[-1] == 'publish': - if os.system("pip freeze | grep twine"): - print("twine not installed.\nUse `pip install twine`.\nExiting.") - sys.exit(1) - os.system("python setup.py sdist bdist_wheel") - if os.system("twine check dist/*"): - print("twine check failed. Packages might be outdated.") - print("Try using `pip install -U twine wheel`.\nExiting.") - sys.exit(1) - if os.system("twine upload dist/*"): - print("failed to upload package") - sys.exit(1) - if os.environ.get('CI'): - os.system("git config user.name github-actions") - os.system("git config user.email github-actions@github.com") - os.system(f"git tag -a {version} -m 'version {version}'") - if os.system("git push --tags"): - print("failed pushing release tag") - sys.exit(1) - shutil.rmtree('dist') - shutil.rmtree('build') - shutil.rmtree('drf_spectacular.egg-info') - sys.exit() - - -setup( - name=name, - version=version, - url=url, - license=license, - description=description, - long_description=long_description, - long_description_content_type='text/x-rst', - author=author, - author_email=author_email, - packages=[p for p in find_namespace_packages(exclude=('tests*',)) if p.startswith(package)], - include_package_data=True, - python_requires=">=3.6", - install_requires=requirements, - extras_require={ - "offline": ["drf-spectacular-sidecar"], - "sidecar": ["drf-spectacular-sidecar"], - }, - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Environment :: Web Environment', - 'Framework :: Django', - 'Framework :: Django :: 2.2', - 'Framework :: Django :: 3.2', - 'Framework :: Django :: 4.0', - 'Framework :: Django :: 4.1', - 'Framework :: Django :: 4.2', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: BSD License', - 'Operating System :: OS Independent', - 'Natural Language :: English', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - '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', - 'Programming Language :: Python :: 3.12', - 'Topic :: Internet :: WWW/HTTP', - 'Topic :: Documentation', - 'Topic :: Software Development :: Code Generators', - ], - project_urls={ - 'Source': 'https://github.com/tfranzel/drf-spectacular', - 'Documentation': 'https://drf-spectacular.readthedocs.io', - }, -) +setup()