workaround fix for an issue in aiohttp.Client
This commit is contained in:
parent
d55e453bd5
commit
c39ddd00d3
|
@ -156,6 +156,8 @@ class MethodNotSupported(SanicException):
|
||||||
super().__init__(message)
|
super().__init__(message)
|
||||||
self.headers = dict()
|
self.headers = dict()
|
||||||
self.headers["Allow"] = ", ".join(allowed_methods)
|
self.headers["Allow"] = ", ".join(allowed_methods)
|
||||||
|
if method in ['HEAD', 'PATCH', 'PUT', 'DELETE']:
|
||||||
|
self.headers['Content-Length'] = 0
|
||||||
|
|
||||||
|
|
||||||
@add_status_code(500)
|
@add_status_code(500)
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import traceback
|
import traceback
|
||||||
from json import JSONDecodeError
|
from json import JSONDecodeError
|
||||||
from sanic.log import logger
|
from sanic.log import logger
|
||||||
|
from sanic.exceptions import MethodNotSupported
|
||||||
|
from sanic.response import text
|
||||||
|
|
||||||
|
|
||||||
HOST = '127.0.0.1'
|
HOST = '127.0.0.1'
|
||||||
|
@ -54,6 +56,13 @@ class SanicTestClient:
|
||||||
results[0] = request
|
results[0] = request
|
||||||
self.app.request_middleware.appendleft(_collect_request)
|
self.app.request_middleware.appendleft(_collect_request)
|
||||||
|
|
||||||
|
@self.app.exception(MethodNotSupported)
|
||||||
|
async def error_handler(request, exception):
|
||||||
|
if request.method in ['HEAD', 'PATCH', 'PUT', 'DELETE']:
|
||||||
|
return text('', exception.status_code, headers=exception.headers)
|
||||||
|
else:
|
||||||
|
return self.app.error_handler.default(request, exception)
|
||||||
|
|
||||||
@self.app.listener('after_server_start')
|
@self.app.listener('after_server_start')
|
||||||
async def _collect_response(sanic, loop):
|
async def _collect_response(sanic, loop):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -45,6 +45,10 @@ def test_method_not_allowed():
|
||||||
request, response = app.test_client.head('/')
|
request, response = app.test_client.head('/')
|
||||||
assert response.headers['Allow'] == 'GET'
|
assert response.headers['Allow'] == 'GET'
|
||||||
|
|
||||||
|
request, response = app.test_client.post('/')
|
||||||
|
assert response.headers['Allow'] == 'GET'
|
||||||
|
|
||||||
|
|
||||||
@app.post('/')
|
@app.post('/')
|
||||||
async def test(request):
|
async def test(request):
|
||||||
return response.json({'hello': 'world'})
|
return response.json({'hello': 'world'})
|
||||||
|
@ -52,7 +56,12 @@ def test_method_not_allowed():
|
||||||
request, response = app.test_client.head('/')
|
request, response = app.test_client.head('/')
|
||||||
assert response.status == 405
|
assert response.status == 405
|
||||||
assert set(response.headers['Allow'].split(', ')) == set(['GET', 'POST'])
|
assert set(response.headers['Allow'].split(', ')) == set(['GET', 'POST'])
|
||||||
assert response.headers['Content-Length'] == '40'
|
assert response.headers['Content-Length'] == '0'
|
||||||
|
|
||||||
|
request, response = app.test_client.patch('/')
|
||||||
|
assert response.status == 405
|
||||||
|
assert set(response.headers['Allow'].split(', ')) == set(['GET', 'POST'])
|
||||||
|
assert response.headers['Content-Length'] == '0'
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|
Loading…
Reference in New Issue
Block a user