diff --git a/README.rst b/README.rst index 3f565f71..878ba24c 100644 --- a/README.rst +++ b/README.rst @@ -59,6 +59,13 @@ Installation - ``python -m pip install sanic`` +To install sanic without uvloop or json using bash, you can provide either or both of these environmental variables +using any truthy string like `'y', 'yes', 't', 'true', 'on', '1'` and setting the NO_X to true will stop that features +installation. + +- ``SANIC_NO_UVLOOP=true SANIC_NO_UJSON=true python -m pip install sanic`` + + Documentation ------------- diff --git a/sanic/config.py b/sanic/config.py index 99d39a9c..406c44e6 100644 --- a/sanic/config.py +++ b/sanic/config.py @@ -1,4 +1,5 @@ import os + import types SANIC_PREFIX = 'SANIC_' diff --git a/sanic/response.py b/sanic/response.py index 3da9ac5e..4eecaf79 100644 --- a/sanic/response.py +++ b/sanic/response.py @@ -1,5 +1,6 @@ from mimetypes import guess_type from os import path + try: from ujson import dumps as json_dumps except: @@ -167,12 +168,12 @@ class StreamingHTTPResponse(BaseHTTPResponse): return (b'HTTP/%b %d %b\r\n' b'%b' b'%b\r\n') % ( - version.encode(), - self.status, - status, - timeout_header, - headers - ) + version.encode(), + self.status, + status, + timeout_header, + headers + ) class HTTPResponse(BaseHTTPResponse): @@ -216,14 +217,14 @@ class HTTPResponse(BaseHTTPResponse): b'%b' b'%b\r\n' b'%b') % ( - version.encode(), - self.status, - status, - b'keep-alive' if keep_alive else b'close', - timeout_header, - headers, - self.body - ) + version.encode(), + self.status, + status, + b'keep-alive' if keep_alive else b'close', + timeout_header, + headers, + self.body + ) @property def cookies(self): diff --git a/setup.py b/setup.py index 594c88b9..deb52c27 100644 --- a/setup.py +++ b/setup.py @@ -4,8 +4,10 @@ Sanic import codecs import os import re -from setuptools import setup +from distutils.errors import DistutilsPlatformError +from distutils.util import strtobool +from setuptools import setup with codecs.open(os.path.join(os.path.abspath(os.path.dirname( __file__)), 'sanic', '__init__.py'), 'r', 'latin1') as fp: @@ -15,7 +17,7 @@ with codecs.open(os.path.join(os.path.abspath(os.path.dirname( except IndexError: raise RuntimeError('Unable to determine version.') -setup_kwargs = { +setup_kwargs = { 'name': 'sanic', 'version': version, 'url': 'http://github.com/channelcat/sanic/', @@ -35,23 +37,32 @@ setup_kwargs = { ], } +ujson = 'ujson>=1.35' +uvloop = 'uvloop>=0.5.3' + +requirements = [ + 'httptools>=0.0.9', + uvloop, + ujson, + 'aiofiles>=0.3.0', + 'websockets>=3.2', +] +if strtobool(os.environ.get("SANIC_NO_UJSON", "no")): + print("Installing without uJSON") + requirements.remove(ujson) + +if strtobool(os.environ.get("SANIC_NO_UVLOOP", "no")): + print("Installing without uvLoop") + requirements.remove(uvloop) + try: - normal_requirements = [ - 'httptools>=0.0.9', - 'uvloop>=0.5.3', - 'ujson>=1.35', - 'aiofiles>=0.3.0', - 'websockets>=3.2', - ] - setup_kwargs['install_requires'] = normal_requirements + setup_kwargs['install_requires'] = requirements setup(**setup_kwargs) except DistutilsPlatformError as exception: - windows_requirements = [ - 'httptools>=0.0.9', - 'aiofiles>=0.3.0', - 'websockets>=3.2', - ] - setup_kwargs['install_requires'] = windows_requirements + requirements.remove(ujson) + requirements.remove(uvloop) + print("Installing without uJSON or uvLoop") + setup_kwargs['install_requires'] = requirements setup(**setup_kwargs) # Installation was successful diff --git a/tests/test_payload_too_large.py b/tests/test_payload_too_large.py index 70ec56ce..ecac605c 100644 --- a/tests/test_payload_too_large.py +++ b/tests/test_payload_too_large.py @@ -1,6 +1,6 @@ from sanic import Sanic -from sanic.response import text from sanic.exceptions import PayloadTooLarge +from sanic.response import text def test_payload_too_large_from_error_handler():