132 lines
4.3 KiB
Python
132 lines
4.3 KiB
Python
|
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, 5, 3):
|
||
|
raise RuntimeError("hyper_internal_service 3.x requires Python 3.5.3+")
|
||
|
|
||
|
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('hyper_internal_service._websocket', ['hyper_internal_service/_websocket.c']),
|
||
|
Extension('hyper_internal_service._http_parser',
|
||
|
['hyper_internal_service/_http_parser.c',
|
||
|
'vendor/http-parser/http_parser.c',
|
||
|
'hyper_internal_service/_find_header.c'],
|
||
|
define_macros=[('HTTP_PARSER_STRICT', 0)],
|
||
|
),
|
||
|
Extension('hyper_internal_service._frozenlist',
|
||
|
['hyper_internal_service/_frozenlist.c']),
|
||
|
Extension('hyper_internal_service._helpers',
|
||
|
['hyper_internal_service/_helpers.c']),
|
||
|
Extension('hyper_internal_service._http_writer',
|
||
|
['hyper_internal_service/_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 / 'hyper_internal_service' / '__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,<4.0',
|
||
|
'multidict>=4.5,<5.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; python_version<"3.7"',
|
||
|
]
|
||
|
|
||
|
|
||
|
def read(f):
|
||
|
return (here / f).read_text('utf-8').strip()
|
||
|
|
||
|
args = dict(
|
||
|
name='hyper_internal_service',
|
||
|
version=version,
|
||
|
description='Async http client/server framework (asyncio)',
|
||
|
long_description='\n\n'.join(read('README.md')),
|
||
|
classifiers=[
|
||
|
'Intended Audience :: Developers',
|
||
|
'Programming Language :: Python',
|
||
|
'Programming Language :: Python :: 3',
|
||
|
'Programming Language :: Python :: 3.5',
|
||
|
'Programming Language :: Python :: 3.6',
|
||
|
'Programming Language :: Python :: 3.7',
|
||
|
'Development Status :: 5 - Production/Stable',
|
||
|
'Operating System :: POSIX',
|
||
|
'Operating System :: MacOS :: MacOS X',
|
||
|
'Operating System :: Microsoft :: Windows',
|
||
|
'Topic :: Internet :: WWW/HTTP',
|
||
|
],
|
||
|
author='Intellivoid Technologies',
|
||
|
author_email='netkas@intellivoid.net',
|
||
|
maintainer='Zi Xing Narrakas <netkas@intellivoid.net>',
|
||
|
maintainer_email='netkas@intellivoid.net',
|
||
|
url='https://github.com/intellivoid/Hyper-Internal-Service',
|
||
|
project_urls={
|
||
|
'GitHub: issues': 'https://github.com/intellivoid/Hyper-Internal-Service/issues',
|
||
|
'GitHub: repo': 'https://github.com/intellivoid/Hyper-Internal-Service',
|
||
|
},
|
||
|
license='Apache 2',
|
||
|
packages=['hyper_internal_service'],
|
||
|
python_requires='>=3.5.3',
|
||
|
install_requires=install_requires,
|
||
|
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)
|