From 8404b21556d133c89eda4bd1bf5335ed9a0785d6 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Tue, 29 Nov 2022 21:15:13 -0800 Subject: [PATCH] 405 method not allowed for GET to POST endpoints, closes #1916 --- datasette/views/base.py | 4 +++- tests/test_api_write.py | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/datasette/views/base.py b/datasette/views/base.py index 74ef5f6d..6cd93531 100644 --- a/datasette/views/base.py +++ b/datasette/views/base.py @@ -69,7 +69,6 @@ class BaseView: return "ff0000" async def method_not_allowed(self, request): - print(request.headers) if ( request.path.endswith(".json") or request.headers.get("content-type") == "application/json" @@ -82,6 +81,9 @@ class BaseView: async def options(self, request, *args, **kwargs): return await self.method_not_allowed(request) + async def get(self, request, *args, **kwargs): + return await self.method_not_allowed(request) + async def post(self, request, *args, **kwargs): return await self.method_not_allowed(request) diff --git a/tests/test_api_write.py b/tests/test_api_write.py index 70fc0989..330f8c5e 100644 --- a/tests/test_api_write.py +++ b/tests/test_api_write.py @@ -922,3 +922,26 @@ async def test_create_table(ds_write, input, expected_status, expected_response) assert response.status_code == expected_status data = response.json() assert data == expected_response + + +@pytest.mark.asyncio +@pytest.mark.parametrize( + "path", + ( + "/data/-/create", + "/data/docs/-/drop", + "/data/docs/-/insert", + ), +) +async def test_method_not_allowed(ds_write, path): + response = await ds_write.client.get( + path, + headers={ + "Content-Type": "application/json", + }, + ) + assert response.status_code == 405 + assert response.json() == { + "ok": False, + "error": "Method not allowed", + }