summaryrefslogtreecommitdiffstats
path: root/third_party/python/aiohttp/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/aiohttp/setup.py')
-rw-r--r--third_party/python/aiohttp/setup.py159
1 files changed, 159 insertions, 0 deletions
diff --git a/third_party/python/aiohttp/setup.py b/third_party/python/aiohttp/setup.py
new file mode 100644
index 0000000000..54462ba71c
--- /dev/null
+++ b/third_party/python/aiohttp/setup.py
@@ -0,0 +1,159 @@
+import pathlib
+import re
+import sys
+from distutils.command.build_ext import build_ext
+from distutils.errors import CCompilerError, DistutilsExecError, DistutilsPlatformError
+
+from setuptools import Extension, setup
+
+if sys.version_info < (3, 6):
+ raise RuntimeError("aiohttp 3.7+ requires Python 3.6+")
+
+here = pathlib.Path(__file__).parent
+
+
+if (here / ".git").exists() and not (here / "vendor/http-parser/README.md").exists():
+ print("Install submodules when building from git clone", file=sys.stderr)
+ print("Hint:", file=sys.stderr)
+ print(" git submodule update --init", file=sys.stderr)
+ sys.exit(2)
+
+
+# NOTE: makefile cythonizes all Cython modules
+
+extensions = [
+ Extension("aiohttp._websocket", ["aiohttp/_websocket.c"]),
+ Extension(
+ "aiohttp._http_parser",
+ [
+ "aiohttp/_http_parser.c",
+ "vendor/http-parser/http_parser.c",
+ "aiohttp/_find_header.c",
+ ],
+ define_macros=[("HTTP_PARSER_STRICT", 0)],
+ ),
+ Extension("aiohttp._frozenlist", ["aiohttp/_frozenlist.c"]),
+ Extension("aiohttp._helpers", ["aiohttp/_helpers.c"]),
+ Extension("aiohttp._http_writer", ["aiohttp/_http_writer.c"]),
+]
+
+
+class BuildFailed(Exception):
+ pass
+
+
+class ve_build_ext(build_ext):
+ # This class allows C extension building to fail.
+
+ def run(self):
+ try:
+ build_ext.run(self)
+ except (DistutilsPlatformError, FileNotFoundError):
+ raise BuildFailed()
+
+ def build_extension(self, ext):
+ try:
+ build_ext.build_extension(self, ext)
+ except (CCompilerError, DistutilsExecError, DistutilsPlatformError, ValueError):
+ raise BuildFailed()
+
+
+txt = (here / "aiohttp" / "__init__.py").read_text("utf-8")
+try:
+ version = re.findall(r'^__version__ = "([^"]+)"\r?$', txt, re.M)[0]
+except IndexError:
+ raise RuntimeError("Unable to determine version.")
+
+install_requires = [
+ "attrs>=17.3.0",
+ "chardet>=2.0,<5.0",
+ "multidict>=4.5,<7.0",
+ "async_timeout>=3.0,<4.0",
+ "yarl>=1.0,<2.0",
+ 'idna-ssl>=1.0; python_version<"3.7"',
+ "typing_extensions>=3.6.5",
+]
+
+
+def read(f):
+ return (here / f).read_text("utf-8").strip()
+
+
+NEEDS_PYTEST = {"pytest", "test"}.intersection(sys.argv)
+pytest_runner = ["pytest-runner"] if NEEDS_PYTEST else []
+
+tests_require = [
+ "pytest",
+ "gunicorn",
+ "pytest-timeout",
+ "async-generator",
+ "pytest-xdist",
+]
+
+
+args = dict(
+ name="aiohttp",
+ version=version,
+ description="Async http client/server framework (asyncio)",
+ long_description="\n\n".join((read("README.rst"), read("CHANGES.rst"))),
+ classifiers=[
+ "License :: OSI Approved :: Apache Software License",
+ "Intended Audience :: Developers",
+ "Programming Language :: Python",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.6",
+ "Programming Language :: Python :: 3.7",
+ "Programming Language :: Python :: 3.8",
+ "Programming Language :: Python :: 3.9",
+ "Development Status :: 5 - Production/Stable",
+ "Operating System :: POSIX",
+ "Operating System :: MacOS :: MacOS X",
+ "Operating System :: Microsoft :: Windows",
+ "Topic :: Internet :: WWW/HTTP",
+ "Framework :: AsyncIO",
+ ],
+ author="Nikolay Kim",
+ author_email="fafhrd91@gmail.com",
+ maintainer=", ".join(
+ (
+ "Nikolay Kim <fafhrd91@gmail.com>",
+ "Andrew Svetlov <andrew.svetlov@gmail.com>",
+ )
+ ),
+ maintainer_email="aio-libs@googlegroups.com",
+ url="https://github.com/aio-libs/aiohttp",
+ project_urls={
+ "Chat: Gitter": "https://gitter.im/aio-libs/Lobby",
+ "CI: Azure Pipelines": "https://dev.azure.com/aio-libs/aiohttp/_build",
+ "Coverage: codecov": "https://codecov.io/github/aio-libs/aiohttp",
+ "Docs: RTD": "https://docs.aiohttp.org",
+ "GitHub: issues": "https://github.com/aio-libs/aiohttp/issues",
+ "GitHub: repo": "https://github.com/aio-libs/aiohttp",
+ },
+ license="Apache 2",
+ packages=["aiohttp"],
+ python_requires=">=3.6",
+ install_requires=install_requires,
+ extras_require={
+ "speedups": [
+ "aiodns",
+ "brotlipy",
+ "cchardet",
+ ],
+ },
+ tests_require=tests_require,
+ setup_requires=pytest_runner,
+ include_package_data=True,
+ ext_modules=extensions,
+ cmdclass=dict(build_ext=ve_build_ext),
+)
+
+try:
+ setup(**args)
+except BuildFailed:
+ print("************************************************************")
+ print("Cannot compile C accelerator module, use pure python version")
+ print("************************************************************")
+ del args["ext_modules"]
+ del args["cmdclass"]
+ setup(**args)