-
-
Notifications
You must be signed in to change notification settings - Fork 7k
migrate packaging to pyproject.toml #9056
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
base: main
Are you sure you want to change the base?
Changes from 28 commits
3136996
401de87
6019f1d
121caba
c2062da
a71ed6a
0bcd152
34840fd
9b6e714
cf25dcd
040ded0
9ce6b62
c4bcfc4
2770f5e
6f8da97
2ef6126
c8030fc
0101d89
c1c39d4
561bd4c
29205f0
1278968
06bebc2
ea10c54
5729b02
7770fe4
63d340b
3542e40
3b6e49c
c086598
1018978
2c8d10d
3150ff1
f8e5cba
4bbd84f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,79 @@ | ||||||||||
[build-system] | ||||||||||
requires = ["setuptools>=61.2"] | ||||||||||
build-backend = "setuptools.build_meta" | ||||||||||
|
||||||||||
[project] | ||||||||||
name = "djangorestframework" | ||||||||||
readme = "README.md" | ||||||||||
authors = [{name = "Tom Christie", email = "[email protected]"}] | ||||||||||
license = {text = "BSD"} | ||||||||||
browniebroke marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
description = "Web APIs for Django, made easy." | ||||||||||
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", | ||||||||||
browniebroke marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
"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", | ||||||||||
] | ||||||||||
requires-python = ">=3.9" | ||||||||||
dependencies = ["django>=4.2"] | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unrelated to my other comments, but a little whitespace makes this a little easier to read:
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't really mind the way it is now (actually I prefer it). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd recommend https://github.com/tox-dev/pyproject-fmt to standardize this kind of stuff. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. +1 to this comment since the project is already using pre-commit There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes it was on the back of my mind, but didn't want to scope creep too much here 😊 let's review it what this lands There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you don't think this should just be added since this is the PR that introduces the file and the pre-commit check will just keep the formatting consistent going forward? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hum... Yes, I think you're right. It's a new file is added here so let's keep it all together 👍🏻 |
||||||||||
dynamic = ["version"] | ||||||||||
|
||||||||||
[tool.setuptools.dynamic] | ||||||||||
version = {attr = "rest_framework.__version__"} | ||||||||||
|
||||||||||
[project.urls] | ||||||||||
Homepage = "https://www.django-rest-framework.org" | ||||||||||
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/" | ||||||||||
|
||||||||||
[tool.setuptools] | ||||||||||
|
||||||||||
[tool.setuptools.packages.find] | ||||||||||
include = ["rest_framework*"] | ||||||||||
|
||||||||||
[tool.pytest.ini_options] | ||||||||||
addopts = "--tb=short --strict-markers -ra" | ||||||||||
testpaths = ["tests"] | ||||||||||
filterwarnings = ["ignore:CoreAPI compatibility is deprecated*:rest_framework.RemovedInDRF317Warning"] | ||||||||||
|
||||||||||
[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.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", | ||||||||||
] | ||||||||||
|
||||||||||
[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" | ||||||||||
deronnax marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I realise this was discussed before but I would vote for removing this file entirely. Django has dropped it since (at least) version 4.2, so if Django can do it, I'd say we can too. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I hadn't seen the discussion, but I would vote the same. It's really not providing much other than some "backwards compatibility" for ancient packagers, and they might not be compatible with newer build backends (though I would expect that to be somewhat unlikely). I assume most people are installing via wheels and if it breaks for someone using a non standard approach they can finally update their setup as they have had years to do so. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,119 +1,3 @@ | ||
import os | ||
import re | ||
deronnax marked this conversation as resolved.
Show resolved
Hide resolved
|
||
import shutil | ||
import sys | ||
from setuptools import setup | ||
|
||
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() | ||
|
||
deronnax marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
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='[email protected]', # 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. | ||
setup() |
Uh oh!
There was an error while loading. Please reload this page.