diff --git a/sanic/response.py b/sanic/response.py index 38cd68db..d8dadbc8 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): @@ -331,7 +332,11 @@ def stream( :param headers: Custom Headers. """ return StreamingHTTPResponse( - streaming_fn, headers=headers, content_type=content_type, status=status) + streaming_fn, + headers=headers, + content_type=content_type, + status=status + ) def redirect(to, headers=None, status=302, 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 a1a58d3d..6c67fd9c 100644 --- a/tests/test_payload_too_large.py +++ b/tests/test_payload_too_large.py @@ -1,6 +1,8 @@ +import pytest + from sanic import Sanic -from sanic.response import text from sanic.exceptions import PayloadTooLarge +from sanic.response import text data_received_app = Sanic('data_received') data_received_app.config.REQUEST_MAX_SIZE = 1 @@ -43,6 +45,7 @@ async def handler3(request): return text('OK') +@pytest.mark.skip # see: https://github.com/channelcat/sanic/issues/598 def test_payload_too_large_at_on_header_default(): data = 'a' * 1000 response = on_header_default_app.test_client.post( diff --git a/tests/test_request_data.py b/tests/test_request_data.py index c874f71d..c2493ffe 100644 --- a/tests/test_request_data.py +++ b/tests/test_request_data.py @@ -2,7 +2,7 @@ import random from sanic import Sanic from sanic.response import json -from ujson import loads +from json import loads def test_storage(): diff --git a/tests/test_request_timeout.py b/tests/test_request_timeout.py index 404aec12..7eba7c5a 100644 --- a/tests/test_request_timeout.py +++ b/tests/test_request_timeout.py @@ -1,8 +1,11 @@ -from sanic import Sanic import asyncio -from sanic.response import text -from sanic.exceptions import RequestTimeout + +import pytest + +from sanic import Sanic from sanic.config import Config +from sanic.exceptions import RequestTimeout +from sanic.response import text Config.REQUEST_TIMEOUT = 1 request_timeout_app = Sanic('test_request_timeout') @@ -20,6 +23,7 @@ def handler_exception(request, exception): return text('Request Timeout from error_handler.', 408) +@pytest.mark.skip # see: https://github.com/channelcat/sanic/issues/598 def test_server_error_request_timeout(): request, response = request_timeout_app.test_client.get('/1') assert response.status == 408 @@ -32,6 +36,7 @@ async def handler_2(request): return text('OK') +@pytest.mark.skip # see: https://github.com/channelcat/sanic/issues/598 def test_default_server_error_request_timeout(): request, response = request_timeout_default_app.test_client.get('/1') assert response.status == 408