Skip to content

Commit

Permalink
Fix empty ALLOW Response header for cls based View (#929)
Browse files Browse the repository at this point in the history
We must check existing lower http method names for assembing
ALLOW header and passing into web.HTTPMethodNotAllowed.
  • Loading branch information
singulared authored and asvetlov committed Jul 7, 2016
1 parent b68420b commit f90f988
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 1 deletion.
3 changes: 2 additions & 1 deletion aiohttp/web_urldispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -655,7 +655,8 @@ def __await__(self):
return (yield from self.__iter__())

def _raise_allowed_methods(self):
allowed_methods = {m for m in hdrs.METH_ALL if hasattr(self, m)}
allowed_methods = {
m for m in hdrs.METH_ALL if hasattr(self, m.lower())}
raise HTTPMethodNotAllowed(self.request.method, allowed_methods)


Expand Down
4 changes: 4 additions & 0 deletions tests/test_classbasedview.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@ class MyView(View):
@asyncio.coroutine
def get(self):
return web.Response(text='OK')
options = get

request = mock.Mock()
request.method = 'UNKNOWN'
with pytest.raises(web.HTTPMethodNotAllowed) as ctx:
yield from MyView(request)
assert ctx.value.headers['allow'] == 'GET,OPTIONS'
assert ctx.value.status == 405


Expand All @@ -49,9 +51,11 @@ class MyView(View):
@asyncio.coroutine
def get(self):
return web.Response(text='OK')
options = delete = get

request = mock.Mock()
request.method = 'POST'
with pytest.raises(web.HTTPMethodNotAllowed) as ctx:
yield from MyView(request)
assert ctx.value.headers['allow'] == 'DELETE,GET,OPTIONS'
assert ctx.value.status == 405

0 comments on commit f90f988

Please sign in to comment.