diff --git a/sanic/sanic.py b/sanic/sanic.py index 018ed720..514d90a2 100644 --- a/sanic/sanic.py +++ b/sanic/sanic.py @@ -67,6 +67,25 @@ class Sanic: return response + # Shorthand method decorators + def get(self, uri, host=None): + return self.route(uri, methods=["GET"], host=host) + + def post(self, uri, host=None): + return self.route(uri, methods=["POST"], host=host) + + def put(self, uri, host=None): + return self.route(uri, methods=["PUT"], host=host) + + def head(self, uri, host=None): + return self.route(uri, methods=["HEAD"], host=host) + + def options(self, uri, host=None): + return self.route(uri, methods=["OPTIONS"], host=host) + + def patch(self, uri, host=None): + return self.route(uri, methods=["PATCH"], host=host) + def add_route(self, handler, uri, methods=None, host=None): """ A helper method to register class instance or diff --git a/tests/test_routes.py b/tests/test_routes.py index be1fb29e..525f87cb 100644 --- a/tests/test_routes.py +++ b/tests/test_routes.py @@ -10,6 +10,84 @@ from sanic.utils import sanic_endpoint_test # UTF-8 # ------------------------------------------------------------ # +def test_shorthand_routes_get(): + app = Sanic('test_shorhand_routes_get') + + @app.get('/get') + def handler(request): + return text('OK') + + request, response = sanic_endpoint_test(app, uri='/get', method='get') + assert response.text == 'OK' + + request, response = sanic_endpoint_test(app, uri='/get', method='post') + assert response.status == 405 + +def test_shorthand_routes_post(): + app = Sanic('test_shorhand_routes_post') + + @app.post('/post') + def handler(request): + return text('OK') + + request, response = sanic_endpoint_test(app, uri='/post', method='post') + assert response.text == 'OK' + + request, response = sanic_endpoint_test(app, uri='/post', method='get') + assert response.status == 405 + +def test_shorthand_routes_put(): + app = Sanic('test_shorhand_routes_put') + + @app.put('/put') + def handler(request): + return text('OK') + + request, response = sanic_endpoint_test(app, uri='/put', method='put') + assert response.text == 'OK' + + request, response = sanic_endpoint_test(app, uri='/put', method='get') + assert response.status == 405 + +def test_shorthand_routes_patch(): + app = Sanic('test_shorhand_routes_patch') + + @app.patch('/patch') + def handler(request): + return text('OK') + + request, response = sanic_endpoint_test(app, uri='/patch', method='patch') + assert response.text == 'OK' + + request, response = sanic_endpoint_test(app, uri='/patch', method='get') + assert response.status == 405 + +def test_shorthand_routes_head(): + app = Sanic('test_shorhand_routes_head') + + @app.head('/head') + def handler(request): + return text('OK') + + request, response = sanic_endpoint_test(app, uri='/head', method='head') + assert response.status == 200 + + request, response = sanic_endpoint_test(app, uri='/head', method='get') + assert response.status == 405 + +def test_shorthand_routes_options(): + app = Sanic('test_shorhand_routes_options') + + @app.options('/options') + def handler(request): + return text('OK') + + request, response = sanic_endpoint_test(app, uri='/options', method='options') + assert response.status == 200 + + request, response = sanic_endpoint_test(app, uri='/options', method='get') + assert response.status == 405 + def test_static_routes(): app = Sanic('test_dynamic_route')