File pyproject.patch of Package python-djangorestframework
From 2001878298db05cfe4876549d1733c8567bf826a Mon Sep 17 00:00:00 2001
From: Mathieu Dupuy <deronnax@gmail.com>
Date: Fri, 19 Sep 2025 12:45:47 +0200
Subject: [PATCH] Migrate packaging to `pyproject.toml` (#9056)
Co-authored-by: Terence Honles <terence@honles.com>
Co-authored-by: Terence Honles <terencehonles@users.noreply.github.com>
Co-authored-by: Bruno Alla <alla.brunoo@gmail.com>
---
.pre-commit-config.yaml | 8 ++
docs/community/project-management.md | 8 +-
pyproject.toml | 76 +++++++++++++++++
setup.cfg | 33 --------
setup.py | 119 ---------------------------
5 files changed, 89 insertions(+), 155 deletions(-)
create mode 100644 pyproject.toml
delete mode 100755 setup.py
Index: django-rest-framework-3.16.1/docs/community/project-management.md
===================================================================
--- django-rest-framework-3.16.1.orig/docs/community/project-management.md
+++ django-rest-framework-3.16.1/docs/community/project-management.md
@@ -59,8 +59,8 @@ The following template should be used fo
- [ ] Create pull request for [release notes](https://github.com/encode/django-rest-framework/blob/master/docs/topics/release-notes.md) based on the [*.*.* milestone](https://github.com/encode/django-rest-framework/milestones/***).
- [ ] Update supported versions:
- - [ ] `setup.py` `python_requires` list
- - [ ] `setup.py` Python & Django version trove classifiers
+ - [ ] `pyproject.toml` `python_requires` list
+ - [ ] `pyproject.toml` Python & Django version trove classifiers
- [ ] `README` Python & Django versions
- [ ] `docs` Python & Django versions
- [ ] Update the translations from [transifex](https://www.django-rest-framework.org/topics/project-management/#translations).
@@ -71,7 +71,9 @@ The following template should be used fo
- [ ] Confirm with @tomchristie that release is finalized and ready to go.
- [ ] Ensure that release date is included in pull request.
- [ ] Merge the release pull request.
- - [ ] Push the package to PyPI with `./setup.py publish`.
+ - [ ] Install the release tools: `pip install build twine`
+ - [ ] Build the package: `python -m build`
+ - [ ] Push the package to PyPI with `twine upload dist/*`
- [ ] Tag the release, with `git tag -a *.*.* -m 'version *.*.*'; git push --tags`.
- [ ] Deploy the documentation with `mkdocs gh-deploy`.
- [ ] Make a release announcement on the [discussion group](https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework).
Index: django-rest-framework-3.16.1/pyproject.toml
===================================================================
--- /dev/null
+++ django-rest-framework-3.16.1/pyproject.toml
@@ -0,0 +1,76 @@
+[build-system]
+build-backend = "setuptools.build_meta"
+requires = [ "setuptools>=77.0.3" ]
+
+[project]
+name = "djangorestframework"
+description = "Web APIs for Django, made easy."
+readme = "README.md"
+license = "BSD-3-Clause"
+authors = [ { name = "Tom Christie", email = "tom@tomchristie.com" } ]
+requires-python = ">=3.9"
+classifiers = [
+ "Development Status :: 5 - Production/Stable",
+ "Environment :: Web Environment",
+ "Framework :: Django",
+ "Framework :: Django :: 4.2",
+ "Framework :: Django :: 5.0",
+ "Framework :: Django :: 5.1",
+ "Framework :: Django :: 5.2",
+ "Intended Audience :: Developers",
+ "Operating System :: OS Independent",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3 :: Only",
+ "Programming Language :: Python :: 3.9",
+ "Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+ "Topic :: Internet :: WWW/HTTP",
+]
+dynamic = [ "version" ]
+
+dependencies = [ "django>=4.2" ]
+urls.Changelog = "https://www.django-rest-framework.org/community/release-notes/"
+urls.Funding = "https://fund.django-rest-framework.org/topics/funding/"
+urls.Homepage = "https://www.django-rest-framework.org"
+urls.Source = "https://github.com/encode/django-rest-framework"
+
+[tool.setuptools]
+
+[tool.setuptools.dynamic]
+version = { attr = "rest_framework.__version__" }
+
+[tool.setuptools.packages.find]
+include = [ "rest_framework*" ]
+
+[tool.isort]
+skip = [ ".tox" ]
+atomic = true
+multi_line_output = 5
+extra_standard_library = [ "types" ]
+known_third_party = [ "pytest", "_pytest", "django", "pytz", "uritemplate" ]
+known_first_party = [ "rest_framework", "tests" ]
+
+[tool.codespell]
+# Ref: https://github.com/codespell-project/codespell#using-a-config-file
+skip = "*/kickstarter-announcement.md,*.js,*.map,*.po"
+ignore-words-list = "fo,malcom,ser"
+
+[tool.pytest.ini_options]
+addopts = "--tb=short --strict-markers -ra"
+testpaths = [ "tests" ]
+filterwarnings = [ "ignore:CoreAPI compatibility is deprecated*:rest_framework.RemovedInDRF317Warning" ]
+
+[tool.coverage.run]
+# NOTE: source is ignored with pytest-cov (but uses the same).
+source = [ "." ]
+include = [ "rest_framework/*", "tests/*" ]
+branch = true
+
+[tool.coverage.report]
+include = [ "rest_framework/*", "tests/*" ]
+exclude_lines = [
+ "pragma: no cover",
+ "raise NotImplementedError",
+]
Index: django-rest-framework-3.16.1/setup.cfg
===================================================================
--- django-rest-framework-3.16.1.orig/setup.cfg
+++ django-rest-framework-3.16.1/setup.cfg
@@ -1,36 +1,3 @@
-[metadata]
-license_files = LICENSE.md
-
-[tool:pytest]
-addopts=--tb=short --strict-markers -ra
-testpaths = tests
-filterwarnings = ignore:CoreAPI compatibility is deprecated*:rest_framework.RemovedInDRF317Warning
-
[flake8]
ignore = E501,W503,W504
banned-modules = json = use from rest_framework.utils import json!
-
-[isort]
-skip=.tox
-atomic=true
-multi_line_output=5
-extra_standard_library=types
-known_third_party=pytest,_pytest,django,pytz,uritemplate
-known_first_party=rest_framework,tests
-
-[coverage:run]
-# NOTE: source is ignored with pytest-cov (but uses the same).
-source = .
-include = rest_framework/*,tests/*
-branch = 1
-
-[coverage:report]
-include = rest_framework/*,tests/*
-exclude_lines =
- pragma: no cover
- raise NotImplementedError
-
-[codespell]
-# Ref: https://github.com/codespell-project/codespell#using-a-config-file
-skip = */kickstarter-announcement.md,*.js,*.map,*.po
-ignore-words-list = fo,malcom,ser
Index: django-rest-framework-3.16.1/setup.py
===================================================================
--- django-rest-framework-3.16.1.orig/setup.py
+++ /dev/null
@@ -1,119 +0,0 @@
-import os
-import re
-import shutil
-import sys
-
-from setuptools import find_packages, setup
-
-CURRENT_PYTHON = sys.version_info[:2]
-REQUIRED_PYTHON = (3, 9)
-
-# This check and everything above must remain compatible with Python 2.7.
-if CURRENT_PYTHON < REQUIRED_PYTHON:
- sys.stderr.write("""
-==========================
-Unsupported Python version
-==========================
-
-This version of Django REST Framework requires Python {}.{}, but you're trying
-to install it on Python {}.{}.
-
-This may be because you are using a version of pip that doesn't
-understand the python_requires classifier. Make sure you
-have pip >= 9.0 and setuptools >= 24.2, then try again:
-
- $ python -m pip install --upgrade pip setuptools
- $ python -m pip install djangorestframework
-
-This will install the latest version of Django REST Framework which works on
-your version of Python. If you can't upgrade your pip (or Python), request
-an older version of Django REST Framework:
-
- $ python -m pip install "djangorestframework<3.10"
-""".format(*(REQUIRED_PYTHON + CURRENT_PYTHON)))
- sys.exit(1)
-
-
-def read(f):
- with open(f, encoding='utf-8') as file:
- return file.read()
-
-
-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).group(1)
-
-
-version = get_version('rest_framework')
-
-
-if sys.argv[-1] == 'publish':
- if os.system("pip freeze | grep twine"):
- print("twine not installed.\nUse `pip install twine`.\nExiting.")
- sys.exit()
- 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()
- os.system("twine upload dist/*")
- print("You probably want to also tag the version now:")
- print(" git tag -a %s -m 'version %s'" % (version, version))
- print(" git push --tags")
- shutil.rmtree('dist')
- shutil.rmtree('build')
- shutil.rmtree('djangorestframework.egg-info')
- sys.exit()
-
-
-setup(
- name='djangorestframework',
- version=version,
- url='https://www.django-rest-framework.org/',
- license='BSD',
- description='Web APIs for Django, made easy.',
- long_description=read('README.md'),
- long_description_content_type='text/markdown',
- author='Tom Christie',
- author_email='tom@tomchristie.com', # SEE NOTE BELOW (*)
- packages=find_packages(exclude=['tests*']),
- include_package_data=True,
- install_requires=["django>=4.2"],
- python_requires=">=3.9",
- zip_safe=False,
- classifiers=[
- 'Development Status :: 5 - Production/Stable',
- 'Environment :: Web Environment',
- 'Framework :: Django',
- 'Framework :: Django :: 4.2',
- 'Framework :: Django :: 5.0',
- 'Framework :: Django :: 5.1',
- 'Framework :: Django :: 5.2',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: BSD License',
- 'Operating System :: OS Independent',
- 'Programming Language :: Python',
- 'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.9',
- 'Programming Language :: Python :: 3.10',
- 'Programming Language :: Python :: 3.11',
- 'Programming Language :: Python :: 3.12',
- 'Programming Language :: Python :: 3.13',
- 'Programming Language :: Python :: 3 :: Only',
- 'Topic :: Internet :: WWW/HTTP',
- ],
- project_urls={
- 'Funding': 'https://fund.django-rest-framework.org/topics/funding/',
- 'Source': 'https://github.com/encode/django-rest-framework',
- 'Changelog': 'https://www.django-rest-framework.org/community/release-notes/',
- },
-)
-
-# (*) Please direct queries to the discussion group, rather than to me directly
-# Doing so helps ensure your question is helpful to other users.
-# Queries directly to my email are likely to receive a canned response.
-#
-# Many thanks for your understanding.