From fa52a26c4acb97d5bb432d6f381b22f43209b717 Mon Sep 17 00:00:00 2001 From: Meet Mangukiya Date: Thu, 26 Mar 2020 18:04:40 +0530 Subject: [PATCH] Support registering OPTIONS HTTP method handlers via RouteTableDef PR #4615 by @meetmangukiya Fixes #4663 Co-authored-by: Sviatoslav Sydorenko --- CHANGES/4663.bugfix | 1 + CONTRIBUTORS.txt | 1 + aiohttp/web_routedef.py | 3 +++ tests/test_route_def.py | 16 ++++++++++++++++ 4 files changed, 21 insertions(+) create mode 100644 CHANGES/4663.bugfix diff --git a/CHANGES/4663.bugfix b/CHANGES/4663.bugfix new file mode 100644 index 0000000000..c2d8fb5a6b --- /dev/null +++ b/CHANGES/4663.bugfix @@ -0,0 +1 @@ +Support registering OPTIONS HTTP method handlers via RouteTableDef. diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 1ebe25b7b7..bb9a39243e 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -184,6 +184,7 @@ Mathieu Dugré Matt VanEseltine Matthieu Hauglustaine Matthieu Rigal +Meet Mangukiya Michael Ihnatenko Mikhail Burshteyn Mikhail Kashkin diff --git a/aiohttp/web_routedef.py b/aiohttp/web_routedef.py index 7fbc848d70..8bda253290 100644 --- a/aiohttp/web_routedef.py +++ b/aiohttp/web_routedef.py @@ -191,6 +191,9 @@ def patch(self, path: str, **kwargs: Any) -> _Deco: def delete(self, path: str, **kwargs: Any) -> _Deco: return self.route(hdrs.METH_DELETE, path, **kwargs) + def options(self, path: str, **kwargs: Any) -> _Deco: + return self.route(hdrs.METH_OPTIONS, path, **kwargs) + def view(self, path: str, **kwargs: Any) -> _Deco: return self.route(hdrs.METH_ANY, path, **kwargs) diff --git a/tests/test_route_def.py b/tests/test_route_def.py index 1a14a6bf5e..6d1f6f9d38 100644 --- a/tests/test_route_def.py +++ b/tests/test_route_def.py @@ -232,6 +232,22 @@ async def handler(request): assert str(route.url_for()) == '/path' +def test_options_deco(router) -> None: + routes = web.RouteTableDef() + + @routes.options('/path') + async def handler(request): + pass + + router.add_routes(routes) + + assert len(router.routes()) == 1 + + route = list(router.routes())[0] + assert route.method == 'OPTIONS' + assert str(route.url_for()) == '/path' + + def test_route_deco(router) -> None: routes = web.RouteTableDef()