From 62b445de397ddf1fb8a402ea114ae965bb90fbd7 Mon Sep 17 00:00:00 2001 From: Meet Mangukiya Date: Sun, 8 Mar 2020 21:37:39 +0530 Subject: [PATCH] web_routedef: Allow RouteTableDef to register options method handlers Fixes https://github.com/aio-libs/aiohttp/issues/4663 --- 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..46fdb8eacf --- /dev/null +++ b/CHANGES/4663.bugfix @@ -0,0 +1 @@ +Allows to register Options method handlers for resources. diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index d5d53170e9..22e08d68f0 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -181,6 +181,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()