Skip to content
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

Move most static metadata to pyproject.toml. #9745

Merged
merged 6 commits into from May 6, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
81 changes: 79 additions & 2 deletions pyproject.toml
@@ -1,7 +1,84 @@
[build-system]
requires = ["setuptools", "wheel"]
requires = ["setuptools"]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setuptools automatically installs wheel if needed. Further info is in the first note in this section: https://setuptools.pypa.io/en/latest/userguide/quickstart.html#basic-use

build-backend = "setuptools.build_meta"

[project]
name = "discord.py"
description = "A Python wrapper for the Discord API"
readme = { file = "README.rst", content-type = "text/x-rst" }
license = { file = "LICENSE" }
requires-python = ">=3.8"
authors = [{ name = "Rapptz" }]
classifiers = [
"Development Status :: 5 - Production/Stable",
"License :: OSI Approved :: MIT License",
"Intended Audience :: Developers",
"Natural Language :: English",
"Operating System :: OS Independent",
"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",
"Topic :: Software Development :: Libraries",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Utilities",
"Typing :: Typed",
]
dynamic = ["version", "dependencies"]

[project.urls]
Documentation = "https://discordpy.readthedocs.io/en/latest/"
"Issue tracker" = "https://github.com/Rapptz/discord.py/issues"

[tool.setuptools.dynamic]
dependencies = { file = "requirements.txt" }

[project.optional-dependencies]
voice = ["PyNaCl>=1.3.0,<1.6"]
docs = [
"sphinx==4.4.0",
"sphinxcontrib_trio==1.1.2",
# TODO: bump these when migrating to a newer Sphinx version
"sphinxcontrib-websupport==1.2.4",
"sphinxcontrib-applehelp==1.0.4",
"sphinxcontrib-devhelp==1.0.2",
"sphinxcontrib-htmlhelp==2.0.1",
"sphinxcontrib-jsmath==1.0.1",
"sphinxcontrib-qthelp==1.0.3",
"sphinxcontrib-serializinghtml==1.1.5",
"typing-extensions>=4.3,<5",
"sphinx-inline-tabs==2023.4.21",
]
speed = [
"orjson>=3.5.4",
"aiodns>=1.1",
"Brotli",
"cchardet==2.1.7; python_version < '3.10'",
]
test = [
"coverage[toml]",
"pytest",
"pytest-asyncio",
"pytest-cov",
"pytest-mock",
"typing-extensions>=4.3,<5",
"tzdata; sys_platform == 'win32'",
]

[tool.setuptools]
packages = [
"discord",
"discord.types",
"discord.ui",
"discord.webhook",
"discord.app_commands",
"discord.ext.commands",
"discord.ext.tasks",
]
include-package-data = true

[tool.black]
line-length = 125
skip-string-normalization = true
Expand All @@ -16,7 +93,7 @@ omit = [
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"@overload"
"@overload",
]

[tool.isort]
Expand Down
138 changes: 28 additions & 110 deletions setup.py
@@ -1,113 +1,31 @@
from setuptools import setup
import re

requirements = []
with open('requirements.txt') as f:
requirements = f.read().splitlines()

version = ''
with open('discord/__init__.py') as f:
version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE).group(1)

if not version:
raise RuntimeError('version is not set')

if version.endswith(('a', 'b', 'rc')):
# append version identifier based on commit count
try:
import subprocess

p = subprocess.Popen(['git', 'rev-list', '--count', 'HEAD'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
if out:
version += out.decode('utf-8').strip()
p = subprocess.Popen(['git', 'rev-parse', '--short', 'HEAD'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
if out:
version += '+g' + out.decode('utf-8').strip()
except Exception:
pass

readme = ''
with open('README.rst') as f:
readme = f.read()

extras_require = {
'voice': ['PyNaCl>=1.3.0,<1.6'],
'docs': [
'sphinx==4.4.0',
'sphinxcontrib_trio==1.1.2',
# TODO: bump these when migrating to a newer Sphinx version
'sphinxcontrib-websupport==1.2.4',
'sphinxcontrib-applehelp==1.0.4',
'sphinxcontrib-devhelp==1.0.2',
'sphinxcontrib-htmlhelp==2.0.1',
'sphinxcontrib-jsmath==1.0.1',
'sphinxcontrib-qthelp==1.0.3',
'sphinxcontrib-serializinghtml==1.1.5',
'typing-extensions>=4.3,<5',
'sphinx-inline-tabs==2023.4.21',
],
'speed': [
'orjson>=3.5.4',
'aiodns>=1.1',
'Brotli',
'cchardet==2.1.7; python_version < "3.10"',
],
'test': [
'coverage[toml]',
'pytest',
'pytest-asyncio',
'pytest-cov',
'pytest-mock',
'typing-extensions>=4.3,<5',
'tzdata; sys_platform == "win32"',
],
}

packages = [
'discord',
'discord.types',
'discord.ui',
'discord.webhook',
'discord.app_commands',
'discord.ext.commands',
'discord.ext.tasks',
]

setup(
name='discord.py',
author='Rapptz',
url='https://github.com/Rapptz/discord.py',
project_urls={
'Documentation': 'https://discordpy.readthedocs.io/en/latest/',
'Issue tracker': 'https://github.com/Rapptz/discord.py/issues',
},
version=version,
packages=packages,
license='MIT',
description='A Python wrapper for the Discord API',
long_description=readme,
long_description_content_type='text/x-rst',
include_package_data=True,
install_requires=requirements,
extras_require=extras_require,
python_requires='>=3.8.0',
classifiers=[
'Development Status :: 5 - Production/Stable',
'License :: OSI Approved :: MIT License',
'Intended Audience :: Developers',
'Natural Language :: English',
'Operating System :: OS Independent',
'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',
'Topic :: Software Development :: Libraries',
'Topic :: Software Development :: Libraries :: Python Modules',
'Topic :: Utilities',
'Typing :: Typed',
],
)
def derive_version() -> str:
version = ''
with open('discord/__init__.py') as f:
version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE).group(1)

if not version:
raise RuntimeError('version is not set')

if version.endswith(('a', 'b', 'rc')):
# append version identifier based on commit count
try:
import subprocess

p = subprocess.Popen(['git', 'rev-list', '--count', 'HEAD'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
if out:
version += out.decode('utf-8').strip()
p = subprocess.Popen(['git', 'rev-parse', '--short', 'HEAD'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
if out:
version += '+g' + out.decode('utf-8').strip()
except Exception:
pass

return version


setup(version=derive_version())