diff options
author | Mark Haines <mjark@negativecurvature.net> | 2015-01-23 14:32:41 +0000 |
---|---|---|
committer | Mark Haines <mjark@negativecurvature.net> | 2015-01-23 14:32:41 +0000 |
commit | bda5d7d14f2b1d0948af54dc9fe9d5283df349d6 (patch) | |
tree | 3fa405f4094eff9318efed54568dac0533b876e2 /synapse/http/servlet.py | |
parent | Merge pull request #32 from matrix-org/remove_parse_id_from_hs (diff) | |
parent | Add RestServlet base class in synapse/http/servlet.py (diff) | |
download | synapse-bda5d7d14f2b1d0948af54dc9fe9d5283df349d6.tar.xz |
Merge pull request #33 from matrix-org/extract_rest_servlet_from_client_v1
Extract the client v1 base RestServlet to a separate class
Diffstat (limited to 'synapse/http/servlet.py')
-rw-r--r-- | synapse/http/servlet.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/synapse/http/servlet.py b/synapse/http/servlet.py new file mode 100644 index 0000000000..d5ccf2742f --- /dev/null +++ b/synapse/http/servlet.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Copyright 2014, 2015 OpenMarket Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" This module contains base REST classes for constructing REST servlets. """ + +import logging + + +logger = logging.getLogger(__name__) + + +class RestServlet(object): + + """ A Synapse REST Servlet. + + An implementing class can either provide its own custom 'register' method, + or use the automatic pattern handling provided by the base class. + + To use this latter, the implementing class instead provides a `PATTERN` + class attribute containing a pre-compiled regular expression. The automatic + register method will then use this method to register any of the following + instance methods associated with the corresponding HTTP method: + + on_GET + on_PUT + on_POST + on_DELETE + on_OPTIONS + + Automatically handles turning CodeMessageExceptions thrown by these methods + into the appropriate HTTP response. + """ + + def register(self, http_server): + """ Register this servlet with the given HTTP server. """ + if hasattr(self, "PATTERN"): + pattern = self.PATTERN + + for method in ("GET", "PUT", "POST", "OPTIONS", "DELETE"): + if hasattr(self, "on_%s" % (method)): + method_handler = getattr(self, "on_%s" % (method)) + http_server.register_path(method, pattern, method_handler) + else: + raise NotImplementedError("RestServlet must register something.") |