mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-30 21:44:04 +03:00
b25028ac8f
* Add support for Python 3.13 * Fix extracting tox env with -dev Python versions * Fix view description inspection in Python 3.13 Python 3.13 introduced docstrings for None: https://github.com/python/cpython/pull/117813 In Python 3.12, this is an empty string: ``` ➜ python3.12 Python 3.12.6 (main, Sep 10 2024, 19:06:17) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> d = None >>> d.__doc__ >>> ``` In Python 3.13, it's no longer empty: ``` ➜ python3.13 Python 3.13.0rc2+ (heads/3.13:660baa1, Sep 10 2024, 18:57:50) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> d = None >>> d.__doc__ 'The type of the None singleton.' >>> ``` Adding a check in the inspector that get the view description out the view function docstring to catch this edge case.
121 lines
4.1 KiB
Python
Executable File
121 lines
4.1 KiB
Python
Executable File
import os
|
|
import re
|
|
import shutil
|
|
import sys
|
|
from io import open
|
|
|
|
from setuptools import find_packages, setup
|
|
|
|
CURRENT_PYTHON = sys.version_info[:2]
|
|
REQUIRED_PYTHON = (3, 8)
|
|
|
|
# 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, 'r', 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", 'backports.zoneinfo;python_version<"3.9"'],
|
|
python_requires=">=3.8",
|
|
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',
|
|
'Intended Audience :: Developers',
|
|
'License :: OSI Approved :: BSD License',
|
|
'Operating System :: OS Independent',
|
|
'Programming Language :: Python',
|
|
'Programming Language :: Python :: 3',
|
|
'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',
|
|
'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.
|