Docstrings for BaseFederationServlet
... to save me reverse-engineering this stuff again.
This commit is contained in:
parent
8a86d7ea96
commit
15c1ae45e5
|
@ -190,6 +190,41 @@ def _parse_auth_header(header_bytes):
|
||||||
|
|
||||||
|
|
||||||
class BaseFederationServlet(object):
|
class BaseFederationServlet(object):
|
||||||
|
"""Abstract base class for federation servlet classes.
|
||||||
|
|
||||||
|
The servlet object should have a PATH attribute which takes the form of a regexp to
|
||||||
|
match against the request path (excluding the /federation/v1 prefix).
|
||||||
|
|
||||||
|
The servlet should also implement one or more of on_GET, on_POST, on_PUT, to match
|
||||||
|
the appropriate HTTP method. These methods have the signature:
|
||||||
|
|
||||||
|
on_<METHOD>(self, origin, content, query, **kwargs)
|
||||||
|
|
||||||
|
With arguments:
|
||||||
|
|
||||||
|
origin (unicode|None): The authenticated server_name of the calling server,
|
||||||
|
unless REQUIRE_AUTH is set to False and authentication failed.
|
||||||
|
|
||||||
|
content (unicode|None): decoded json body of the request. None if the
|
||||||
|
request was a GET.
|
||||||
|
|
||||||
|
query (dict[bytes, list[bytes]]): Query params from the request. url-decoded
|
||||||
|
(ie, '+' and '%xx' are decoded) but note that it is *not* utf8-decoded
|
||||||
|
yet.
|
||||||
|
|
||||||
|
**kwargs (dict[unicode, unicode]): the dict mapping keys to path
|
||||||
|
components as specified in the path match regexp.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Deferred[(int, object)|None]: either (response code, response object) to
|
||||||
|
return a JSON response, or None if the request has already been handled.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
SynapseError: to return an error code
|
||||||
|
|
||||||
|
Exception: other exceptions will be caught, logged, and a 500 will be
|
||||||
|
returned.
|
||||||
|
"""
|
||||||
REQUIRE_AUTH = True
|
REQUIRE_AUTH = True
|
||||||
|
|
||||||
def __init__(self, handler, authenticator, ratelimiter, server_name):
|
def __init__(self, handler, authenticator, ratelimiter, server_name):
|
||||||
|
@ -204,6 +239,18 @@ class BaseFederationServlet(object):
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
def new_func(request, *args, **kwargs):
|
def new_func(request, *args, **kwargs):
|
||||||
|
""" A callback which can be passed to HttpServer.RegisterPaths
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request (twisted.web.http.Request):
|
||||||
|
*args: unused?
|
||||||
|
**kwargs (dict[unicode, unicode]): the dict mapping keys to path
|
||||||
|
components as specified in the path match regexp.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Deferred[(int, object)|None]: (response code, response object) as returned
|
||||||
|
by the callback method. None if the request has already been handled.
|
||||||
|
"""
|
||||||
content = None
|
content = None
|
||||||
if request.method in ["PUT", "POST"]:
|
if request.method in ["PUT", "POST"]:
|
||||||
# TODO: Handle other method types? other content types?
|
# TODO: Handle other method types? other content types?
|
||||||
|
|
Loading…
Reference in New Issue