2016-10-02 03:48:50 +01:00
|
|
|
"""
|
|
|
|
Sanic
|
|
|
|
"""
|
2016-10-25 09:49:43 +01:00
|
|
|
import codecs
|
|
|
|
import os
|
|
|
|
import re
|
2018-12-18 16:42:32 +00:00
|
|
|
import sys
|
2020-12-24 19:56:35 +00:00
|
|
|
|
2021-03-21 10:00:32 +00:00
|
|
|
from setuptools import find_packages, setup
|
2018-12-18 16:42:32 +00:00
|
|
|
from setuptools.command.test import test as TestCommand
|
|
|
|
|
|
|
|
|
|
|
|
class PyTest(TestCommand):
|
2018-12-21 17:44:01 +00:00
|
|
|
"""
|
|
|
|
Provide a Test runner to be used from setup.py to run unit tests
|
|
|
|
"""
|
|
|
|
|
|
|
|
user_options = [("pytest-args=", "a", "Arguments to pass to pytest")]
|
2018-12-18 16:42:32 +00:00
|
|
|
|
|
|
|
def initialize_options(self):
|
|
|
|
TestCommand.initialize_options(self)
|
2018-12-21 17:44:01 +00:00
|
|
|
self.pytest_args = ""
|
2018-12-18 16:42:32 +00:00
|
|
|
|
|
|
|
def run_tests(self):
|
|
|
|
import shlex
|
2020-12-24 19:56:35 +00:00
|
|
|
|
2018-12-18 16:42:32 +00:00
|
|
|
import pytest
|
2018-12-21 17:44:01 +00:00
|
|
|
|
2018-12-18 16:42:32 +00:00
|
|
|
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
|
|
|
|
2018-12-21 17:44:01 +00: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)
|
|
|
|
|
2023-02-05 13:09:04 +00:00
|
|
|
|
2022-12-16 05:48:41 +00:00
|
|
|
def str_to_bool(val: str) -> bool:
|
|
|
|
val = val.lower()
|
|
|
|
if val in {
|
|
|
|
"y",
|
|
|
|
"yes",
|
|
|
|
"yep",
|
|
|
|
"yup",
|
|
|
|
"t",
|
|
|
|
"true",
|
|
|
|
"on",
|
|
|
|
"enable",
|
|
|
|
"enabled",
|
|
|
|
"1",
|
|
|
|
}:
|
|
|
|
return True
|
|
|
|
elif val in {"n", "no", "f", "false", "off", "disable", "disabled", "0"}:
|
|
|
|
return False
|
|
|
|
else:
|
|
|
|
raise ValueError(f"Invalid truth value {val}")
|
2017-05-02 10:04:58 +01:00
|
|
|
|
2023-02-05 13:09:04 +00:00
|
|
|
|
2019-07-13 08:22:41 +01:00
|
|
|
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:
|
2018-12-21 17:44:01 +00:00
|
|
|
raise RuntimeError("Unable to determine version.")
|
2016-10-25 09:49:43 +01:00
|
|
|
|
2018-12-21 17:44:01 +00:00
|
|
|
with open_local(["README.rst"]) as rm:
|
2017-05-02 10:04:58 +01:00
|
|
|
long_description = rm.read()
|
|
|
|
|
2017-03-28 10:50:09 +01:00
|
|
|
setup_kwargs = {
|
2018-12-21 17:44:01 +00:00
|
|
|
"name": "sanic",
|
|
|
|
"version": version,
|
2021-03-21 10:00:32 +00:00
|
|
|
"url": "http://github.com/sanic-org/sanic/",
|
2018-12-21 17:44:01 +00:00
|
|
|
"license": "MIT",
|
2019-04-23 22:44:42 +01:00
|
|
|
"author": "Sanic Community",
|
|
|
|
"author_email": "admhpkns@gmail.com",
|
2018-12-21 17:44:01 +00:00
|
|
|
"description": (
|
2021-02-15 12:18:42 +00:00
|
|
|
"A web server and web framework that's written to go fast. "
|
|
|
|
"Build fast. Run fast."
|
2018-12-21 17:44:01 +00:00
|
|
|
),
|
|
|
|
"long_description": long_description,
|
2022-08-18 06:58:07 +01:00
|
|
|
"packages": find_packages(exclude=("tests", "tests.*")),
|
2023-02-05 13:09:04 +00:00
|
|
|
"package_data": {"sanic": ["py.typed", "pages/styles/*"]},
|
2018-12-21 17:44:01 +00:00
|
|
|
"platforms": "any",
|
2023-07-09 20:00:14 +01:00
|
|
|
"python_requires": ">=3.8",
|
2018-12-21 17:44:01 +00:00
|
|
|
"classifiers": [
|
|
|
|
"Development Status :: 4 - Beta",
|
|
|
|
"Environment :: Web Environment",
|
|
|
|
"License :: OSI Approved :: MIT License",
|
2020-02-05 19:17:55 +00:00
|
|
|
"Programming Language :: Python :: 3.8",
|
2020-10-25 13:21:48 +00:00
|
|
|
"Programming Language :: Python :: 3.9",
|
2021-10-28 19:41:57 +01:00
|
|
|
"Programming Language :: Python :: 3.10",
|
2022-12-17 21:46:22 +00:00
|
|
|
"Programming Language :: Python :: 3.11",
|
2017-03-12 05:46:31 +00:00
|
|
|
],
|
2020-06-05 15:14:18 +01:00
|
|
|
"entry_points": {"console_scripts": ["sanic = sanic.__main__:main"]},
|
2017-03-12 03:09:01 +00:00
|
|
|
}
|
2017-02-27 16:14:47 +00:00
|
|
|
|
2020-12-24 19:56:35 +00:00
|
|
|
env_dependency = (
|
2023-10-25 02:59:41 +01:00
|
|
|
'; sys_platform != "win32" and implementation_name == "cpython"'
|
2020-12-24 19:56:35 +00:00
|
|
|
)
|
2018-12-21 17:44:01 +00:00
|
|
|
ujson = "ujson>=1.35" + env_dependency
|
2022-11-13 13:32:04 +00:00
|
|
|
uvloop = "uvloop>=0.15.0" + env_dependency
|
2021-07-08 07:12:56 +01:00
|
|
|
types_ujson = "types-ujson" + env_dependency
|
2017-03-28 10:50:09 +01:00
|
|
|
requirements = [
|
2023-07-25 13:57:29 +01:00
|
|
|
"sanic-routing>=23.6.0",
|
2018-12-21 17:44:01 +00:00
|
|
|
"httptools>=0.0.10",
|
2017-03-28 10:50:09 +01:00
|
|
|
uvloop,
|
|
|
|
ujson,
|
2020-11-06 06:32:04 +00:00
|
|
|
"aiofiles>=0.6.0",
|
2021-09-29 11:09:23 +01:00
|
|
|
"websockets>=10.0",
|
2022-03-23 22:38:45 +00:00
|
|
|
"multidict>=5.0,<7.0",
|
2023-02-05 13:09:04 +00:00
|
|
|
"html5tagger>=1.2.1",
|
2023-03-06 19:24:12 +00:00
|
|
|
"tracerite>=1.0.0",
|
2023-07-12 21:47:58 +01:00
|
|
|
"typing-extensions>=4.4.0",
|
2017-03-28 10:50:09 +01:00
|
|
|
]
|
2018-12-21 17:44:01 +00:00
|
|
|
|
2018-12-18 16:42:32 +00:00
|
|
|
tests_require = [
|
2023-07-25 13:57:29 +01:00
|
|
|
"sanic-testing>=23.6.0",
|
2022-10-25 11:04:11 +01:00
|
|
|
"pytest==7.1.*",
|
2022-09-18 15:17:23 +01:00
|
|
|
"coverage",
|
2018-12-21 17:44:01 +00:00
|
|
|
"beautifulsoup4",
|
|
|
|
"pytest-sanic",
|
2019-04-19 15:31:23 +01:00
|
|
|
"pytest-benchmark",
|
2021-07-08 07:12:56 +01:00
|
|
|
"chardet==3.*",
|
2023-10-25 04:12:24 +01:00
|
|
|
"ruff",
|
2021-07-08 07:12:56 +01:00
|
|
|
"bandit",
|
2023-07-12 21:47:58 +01:00
|
|
|
"mypy",
|
2021-07-08 07:12:56 +01:00
|
|
|
"docutils",
|
|
|
|
"pygments",
|
2021-08-19 19:09:40 +01:00
|
|
|
"uvicorn<0.15.0",
|
2022-02-24 15:45:23 +00:00
|
|
|
"slotscheck>=0.8.0,<1",
|
2021-07-08 07:12:56 +01:00
|
|
|
types_ujson,
|
2018-12-18 16:42:32 +00:00
|
|
|
]
|
|
|
|
|
2019-07-13 08:22:41 +01:00
|
|
|
docs_require = [
|
|
|
|
"sphinx>=2.1.2",
|
2021-07-08 07:12:56 +01:00
|
|
|
"sphinx_rtd_theme>=0.4.3",
|
2019-07-13 08:22:41 +01:00
|
|
|
"docutils",
|
|
|
|
"pygments",
|
2021-09-30 20:36:34 +01:00
|
|
|
"m2r2",
|
2022-06-28 08:53:03 +01:00
|
|
|
"enum-tools[sphinx]",
|
2021-12-06 07:17:01 +00:00
|
|
|
"mistune<2.0.0",
|
2023-08-23 18:47:23 +01:00
|
|
|
"autodocsumm>=0.2.11",
|
2019-07-13 08:22:41 +01:00
|
|
|
]
|
|
|
|
|
|
|
|
dev_require = tests_require + [
|
2021-10-28 14:50:05 +01:00
|
|
|
"cryptography",
|
2019-07-13 08:22:41 +01:00
|
|
|
"tox",
|
|
|
|
"towncrier",
|
|
|
|
]
|
|
|
|
|
2021-07-08 07:12:56 +01:00
|
|
|
all_require = list(set(dev_require + docs_require))
|
2019-07-13 08:22:41 +01:00
|
|
|
|
2022-12-16 05:48:41 +00:00
|
|
|
if str_to_bool(os.environ.get("SANIC_NO_UJSON", "no")):
|
2017-03-28 10:50:09 +01:00
|
|
|
print("Installing without uJSON")
|
|
|
|
requirements.remove(ujson)
|
2021-07-08 07:12:56 +01:00
|
|
|
tests_require.remove(types_ujson)
|
2017-03-28 10:50:09 +01:00
|
|
|
|
2017-12-29 18:04:22 +00:00
|
|
|
# 'nt' means windows OS
|
2022-12-16 05:48:41 +00:00
|
|
|
if str_to_bool(os.environ.get("SANIC_NO_UVLOOP", "no")):
|
2017-03-28 10:50:09 +01:00
|
|
|
print("Installing without uvLoop")
|
|
|
|
requirements.remove(uvloop)
|
|
|
|
|
2018-12-21 17:44:01 +00:00
|
|
|
extras_require = {
|
|
|
|
"test": tests_require,
|
2019-07-13 08:22:41 +01:00
|
|
|
"dev": dev_require,
|
|
|
|
"docs": docs_require,
|
|
|
|
"all": all_require,
|
2021-12-25 20:20:06 +00:00
|
|
|
"ext": ["sanic-ext"],
|
2022-06-27 09:19:26 +01:00
|
|
|
"http3": ["aioquic"],
|
2018-12-18 16:42:32 +00:00
|
|
|
}
|
2018-12-21 17:44:01 +00:00
|
|
|
|
|
|
|
setup_kwargs["install_requires"] = requirements
|
|
|
|
setup_kwargs["tests_require"] = tests_require
|
|
|
|
setup_kwargs["extras_require"] = extras_require
|
|
|
|
setup_kwargs["cmdclass"] = {"test": PyTest}
|
2018-02-06 14:57:16 +00:00
|
|
|
setup(**setup_kwargs)
|