From bd1fdaabd8f07872cff0e309fdad63f015bb27da Mon Sep 17 00:00:00 2001 From: Jon Parise Date: Wed, 2 May 2012 13:41:10 -0700 Subject: [PATCH] Add support for the HTTP PATCH method. PATCH is a proposed standard described by RFC 5789: http://tools.ietf.org/html/rfc5789 --- tornado/httpserver.py | 2 +- tornado/simple_httpclient.py | 4 ++-- tornado/web.py | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tornado/httpserver.py b/tornado/httpserver.py index 2f70f233..e6fe996a 100644 --- a/tornado/httpserver.py +++ b/tornado/httpserver.py @@ -262,7 +262,7 @@ class HTTPConnection(object): def _on_request_body(self, data): self._request.body = data content_type = self._request.headers.get("Content-Type", "") - if self._request.method in ("POST", "PUT"): + if self._request.method in ("POST", "PATCH", "PUT"): if content_type.startswith("application/x-www-form-urlencoded"): arguments = parse_qs_bytes(native_str(self._request.body)) for name, values in arguments.iteritems(): diff --git a/tornado/simple_httpclient.py b/tornado/simple_httpclient.py index 2fca2578..155012fc 100644 --- a/tornado/simple_httpclient.py +++ b/tornado/simple_httpclient.py @@ -123,7 +123,7 @@ class SimpleAsyncHTTPClient(AsyncHTTPClient): class _HTTPConnection(object): - _SUPPORTED_METHODS = set(["GET", "HEAD", "POST", "PUT", "DELETE"]) + _SUPPORTED_METHODS = set(["GET", "HEAD", "POST", "PATCH", "PUT", "DELETE"]) def __init__(self, io_loop, client, request, release_callback, final_callback, max_buffer_size): @@ -278,7 +278,7 @@ class _HTTPConnection(object): if self.request.user_agent: self.request.headers["User-Agent"] = self.request.user_agent if not self.request.allow_nonstandard_methods: - if self.request.method in ("POST", "PUT"): + if self.request.method in ("POST", "PATCH", "PUT"): assert self.request.body is not None else: assert self.request.body is None diff --git a/tornado/web.py b/tornado/web.py index a516372d..43a2c6cd 100644 --- a/tornado/web.py +++ b/tornado/web.py @@ -98,7 +98,8 @@ class RequestHandler(object): should override the class variable SUPPORTED_METHODS in your RequestHandler class. """ - SUPPORTED_METHODS = ("GET", "HEAD", "POST", "DELETE", "PUT", "OPTIONS") + SUPPORTED_METHODS = ("GET", "HEAD", "POST", "DELETE", "PATCH", "PUT", + "OPTIONS") _template_loaders = {} # {path: template.BaseLoader} _template_loader_lock = threading.Lock() @@ -165,6 +166,9 @@ class RequestHandler(object): def delete(self, *args, **kwargs): raise HTTPError(405) + def patch(self, *args, **kwargs): + raise HTTPError(405) + def put(self, *args, **kwargs): raise HTTPError(405) -- GitLab