Merge pull request #1006 from r0fls/routing-fix

check if method is added in strict slash logic
This commit is contained in:
Raphael Deem 2017-11-04 00:09:52 -07:00 committed by GitHub
commit bf6ed217c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 2 deletions

View File

@ -130,8 +130,15 @@ class Router:
return return
# Add versions with and without trailing / # Add versions with and without trailing /
slashed_methods = self.routes_all.get(uri + '/', frozenset({}))
if isinstance(methods, Iterable):
_slash_is_missing = all(method in slashed_methods for
method in methods)
else:
_slash_is_missing = methods in slashed_methods
slash_is_missing = ( slash_is_missing = (
not uri[-1] == '/' and not self.routes_all.get(uri + '/', False) not uri[-1] == '/' and not _slash_is_missing
) )
without_slash_is_missing = ( without_slash_is_missing = (
uri[-1] == '/' and not uri[-1] == '/' and not

View File

@ -44,6 +44,24 @@ def test_shorthand_routes_get():
request, response = app.test_client.post('/get') request, response = app.test_client.post('/get')
assert response.status == 405 assert response.status == 405
def test_shorthand_routes_multiple():
app = Sanic('test_shorthand_routes_multiple')
@app.get('/get')
def get_handler(request):
return text('OK')
@app.options('/get')
def options_handler(request):
return text('')
request, response = app.test_client.get('/get/')
assert response.status == 200
assert response.text == 'OK'
request, response = app.test_client.options('/get/')
assert response.status == 200
def test_route_strict_slash(): def test_route_strict_slash():
app = Sanic('test_route_strict_slash') app = Sanic('test_route_strict_slash')
@ -754,6 +772,7 @@ def test_remove_route_without_clean_cache():
assert response.status == 200 assert response.status == 200
app.remove_route('/test', clean_cache=True) app.remove_route('/test', clean_cache=True)
app.remove_route('/test/', clean_cache=True)
request, response = app.test_client.get('/test') request, response = app.test_client.get('/test')
assert response.status == 404 assert response.status == 404