From fb706383304fd3f1a9c04c358dd76d904cd9b1c6 Mon Sep 17 00:00:00 2001 From: Klemek Date: Mon, 20 Apr 2026 13:51:19 +0200 Subject: [PATCH] refactor(handlers): handle all http methods --- src/handlers.py | 18 ++++++++++++++++++ tests/test_handlers.py | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/handlers.py b/src/handlers.py index d8f61da..582b21c 100644 --- a/src/handlers.py +++ b/src/handlers.py @@ -313,12 +313,30 @@ class RequestHandler(http.server.SimpleHTTPRequestHandler, BaseHandler): self.registry.set_host(path, self.target_host) return None + def do_POST(self) -> None: + self.do_PUT() # be gentle on them + + def do_PATCH(self) -> None: + self.do_PUT() # be gentle on them + def do_DELETE(self) -> None: self._pre_log_request() if (path := self.__check_update_request()) is None: return None return self._update_remove(path) + def do_CONNECT(self) -> None: + self._pre_log_request() + self.send_error(http.HTTPStatus.METHOD_NOT_ALLOWED) + + def do_OPTIONS(self) -> None: + self._pre_log_request() + self.send_error(http.HTTPStatus.METHOD_NOT_ALLOWED) + + def do_TRACE(self) -> None: + self._pre_log_request() + self.send_error(http.HTTPStatus.METHOD_NOT_ALLOWED) + def _update_extract(self, path: str) -> None: if self.in_size == 0: return self.send_error(http.HTTPStatus.LENGTH_REQUIRED, "No body found") diff --git a/tests/test_handlers.py b/tests/test_handlers.py index 5a2e01d..0373226 100644 --- a/tests/test_handlers.py +++ b/tests/test_handlers.py @@ -243,6 +243,26 @@ class TestRequestHandler(BaseHandlerTestCase): ): handler.do_PUT() + def test_do_post_is_do_put(self) -> None: + handler = self._get_handler("/path") + with ( + self.expects_error( + handler, http.HTTPStatus.BAD_REQUEST, "No X-Token header in request" + ), + self.seal_mocks(), + ): + handler.do_POST() + + def test_do_patch_is_do_put(self) -> None: + handler = self._get_handler("/path") + with ( + self.expects_error( + handler, http.HTTPStatus.BAD_REQUEST, "No X-Token header in request" + ), + self.seal_mocks(), + ): + handler.do_PATCH() + def test_do_put_invalid_token(self) -> None: handler = self._get_handler("/path", {"X-Token": "secret"}) with (