sanic/setup.py

152 lines
3.6 KiB
Python
Raw Normal View History

2016-10-02 03:48:50 +01:00
"""
Sanic
"""
2016-10-25 09:49:43 +01:00
import codecs
import os
import re
import sys
2020-12-24 19:56:35 +00:00
from distutils.util import strtobool
2016-10-02 03:48:50 +01:00
from setuptools import setup
from setuptools.command.test import test as TestCommand
class PyTest(TestCommand):
"""
Provide a Test runner to be used from setup.py to run unit tests
"""
user_options = [("pytest-args=", "a", "Arguments to pass to pytest")]
def initialize_options(self):
TestCommand.initialize_options(self)
self.pytest_args = ""
def run_tests(self):
import shlex
2020-12-24 19:56:35 +00:00
import pytest
errno = pytest.main(shlex.split(self.pytest_args))
sys.exit(errno)
2016-10-25 09:49:43 +01:00
2017-05-02 10:04:58 +01:00
def open_local(paths, mode="r", encoding="utf8"):
path = os.path.join(os.path.abspath(os.path.dirname(__file__)), *paths)
2017-05-02 10:04:58 +01:00
return codecs.open(path, mode, encoding)
with open_local(["sanic", "__version__.py"], encoding="latin1") as fp:
2016-10-25 09:49:43 +01:00
try:
2020-12-24 19:56:35 +00:00
version = re.findall(
r"^__version__ = \"([^']+)\"\r?$", fp.read(), re.M
)[0]
2016-10-25 09:49:43 +01:00
except IndexError:
raise RuntimeError("Unable to determine version.")
2016-10-25 09:49:43 +01:00
with open_local(["README.rst"]) as rm:
2017-05-02 10:04:58 +01:00
long_description = rm.read()
setup_kwargs = {
"name": "sanic",
"version": version,
"url": "http://github.com/huge-success/sanic/",
"license": "MIT",
"author": "Sanic Community",
"author_email": "admhpkns@gmail.com",
"description": (
"A web server and web framework that's written to go fast. Build fast. Run fast."
),
"long_description": long_description,
"packages": ["sanic"],
2020-11-19 09:18:25 +00:00
"package_data": {"sanic": ["py.typed"]},
"platforms": "any",
"python_requires": ">=3.6",
"classifiers": [
"Development Status :: 4 - Beta",
"Environment :: Web Environment",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
2020-10-25 13:21:48 +00:00
"Programming Language :: Python :: 3.9",
2017-03-12 05:46:31 +00:00
],
"entry_points": {"console_scripts": ["sanic = sanic.__main__:main"]},
2017-03-12 03:09:01 +00:00
}
2020-12-24 19:56:35 +00:00
env_dependency = (
'; sys_platform != "win32" ' 'and implementation_name == "cpython"'
)
ujson = "ujson>=1.35" + env_dependency
2021-02-15 12:30:57 +00:00
uvloop = "uvloop>=0.5.3,<0.15.0" + env_dependency
requirements = [
"httptools>=0.0.10",
uvloop,
ujson,
"aiofiles>=0.6.0",
"websockets>=8.1,<9.0",
2020-11-16 20:08:27 +00:00
"multidict>=5.0,<6.0",
2020-09-27 00:58:36 +01:00
"httpx==0.15.4",
]
tests_require = [
"pytest==5.2.1",
2020-11-16 20:08:27 +00:00
"multidict>=5.0,<6.0",
2020-12-24 19:56:35 +00:00
"gunicorn==20.0.4",
"pytest-cov",
2020-12-24 19:56:35 +00:00
"httpcore==0.11.*",
"beautifulsoup4",
uvloop,
ujson,
"pytest-sanic",
"pytest-sugar",
2019-04-19 15:31:23 +01:00
"pytest-benchmark",
"pytest-dependency",
]
docs_require = [
"sphinx>=2.1.2",
"sphinx_rtd_theme",
"recommonmark>=0.5.0",
"docutils",
"pygments",
]
dev_require = tests_require + [
"aiofiles",
"tox",
"black",
"flake8",
"bandit",
"towncrier",
]
all_require = dev_require + docs_require
if strtobool(os.environ.get("SANIC_NO_UJSON", "no")):
print("Installing without uJSON")
requirements.remove(ujson)
tests_require.remove(ujson)
2017-12-29 18:04:22 +00:00
# 'nt' means windows OS
if strtobool(os.environ.get("SANIC_NO_UVLOOP", "no")):
print("Installing without uvLoop")
requirements.remove(uvloop)
tests_require.remove(uvloop)
extras_require = {
"test": tests_require,
"dev": dev_require,
"docs": docs_require,
"all": all_require,
}
setup_kwargs["install_requires"] = requirements
setup_kwargs["tests_require"] = tests_require
setup_kwargs["extras_require"] = extras_require
setup_kwargs["cmdclass"] = {"test": PyTest}
setup(**setup_kwargs)