diff --git a/synapse/http/servlet.py b/synapse/http/servlet.py
index 1c8bd8666f..9346386238 100644
--- a/synapse/http/servlet.py
+++ b/synapse/http/servlet.py
@@ -26,19 +26,28 @@ logger = logging.getLogger(__name__)
def parse_integer(request, name, default=None, required=False):
"""Parse an integer parameter from the request string
- :param request: the twisted HTTP request.
- :param name (str): the name of the query parameter.
- :param default: value to use if the parameter is absent, defaults to None.
- :param required (bool): whether to raise a 400 SynapseError if the
- parameter is absent, defaults to False.
- :return: An int value or the default.
- :raises
- SynapseError if the parameter is absent and required, or if the
+ Args:
+ request: the twisted HTTP request.
+ name (str): the name of the query parameter.
+ default (int|None): value to use if the parameter is absent, defaults
+ to None.
+ required (bool): whether to raise a 400 SynapseError if the
+ parameter is absent, defaults to False.
+
+ Returns:
+ int|None: An int value or the default.
+
+ Raises:
+ SynapseError: if the parameter is absent and required, or if the
parameter is present and not an integer.
"""
- if name in request.args:
+ return parse_integer_from_args(request.args, name, default, required)
+
+
+def parse_integer_from_args(args, name, default=None, required=False):
+ if name in args:
try:
- return int(request.args[name][0])
+ return int(args[name][0])
except:
message = "Query parameter %r must be an integer" % (name,)
raise SynapseError(400, message)
@@ -53,14 +62,19 @@ def parse_integer(request, name, default=None, required=False):
def parse_boolean(request, name, default=None, required=False):
"""Parse a boolean parameter from the request query string
- :param request: the twisted HTTP request.
- :param name (str): the name of the query parameter.
- :param default: value to use if the parameter is absent, defaults to None.
- :param required (bool): whether to raise a 400 SynapseError if the
- parameter is absent, defaults to False.
- :return: A bool value or the default.
- :raises
- SynapseError if the parameter is absent and required, or if the
+ Args:
+ request: the twisted HTTP request.
+ name (str): the name of the query parameter.
+ default (bool|None): value to use if the parameter is absent, defaults
+ to None.
+ required (bool): whether to raise a 400 SynapseError if the
+ parameter is absent, defaults to False.
+
+ Returns:
+ bool|None: A bool value or the default.
+
+ Raises:
+ SynapseError: if the parameter is absent and required, or if the
parameter is present and not one of "true" or "false".
"""
@@ -88,22 +102,33 @@ def parse_string(request, name, default=None, required=False,
allowed_values=None, param_type="string"):
"""Parse a string parameter from the request query string.
- :param request: the twisted HTTP request.
- :param name (str): the name of the query parameter.
- :param default: value to use if the parameter is absent, defaults to None.
- :param required (bool): whether to raise a 400 SynapseError if the
- parameter is absent, defaults to False.
- :param allowed_values (list): List of allowed values for the string,
- or None if any value is allowed, defaults to None
- :return: A string value or the default.
- :raises
+ Args:
+ request: the twisted HTTP request.
+ name (str): the name of the query parameter.
+ default (str|None): value to use if the parameter is absent, defaults
+ to None.
+ required (bool): whether to raise a 400 SynapseError if the
+ parameter is absent, defaults to False.
+ allowed_values (list[str]): List of allowed values for the string,
+ or None if any value is allowed, defaults to None
+
+ Returns:
+ str|None: A string value or the default.
+
+ Raises:
SynapseError if the parameter is absent and required, or if the
parameter is present, must be one of a list of allowed values and
is not one of those allowed values.
"""
+ return parse_string_from_args(
+ request.args, name, default, required, allowed_values, param_type,
+ )
- if name in request.args:
- value = request.args[name][0]
+
+def parse_string_from_args(args, name, default=None, required=False,
+ allowed_values=None, param_type="string"):
+ if name in args:
+ value = args[name][0]
if allowed_values is not None and value not in allowed_values:
message = "Query parameter %r must be one of [%s]" % (
name, ", ".join(repr(v) for v in allowed_values)
@@ -122,9 +147,13 @@ def parse_string(request, name, default=None, required=False,
def parse_json_value_from_request(request):
"""Parse a JSON value from the body of a twisted HTTP request.
- :param request: the twisted HTTP request.
- :returns: The JSON value.
- :raises
+ Args:
+ request: the twisted HTTP request.
+
+ Returns:
+ The JSON value.
+
+ Raises:
SynapseError if the request body couldn't be decoded as JSON.
"""
try:
@@ -143,8 +172,10 @@ def parse_json_value_from_request(request):
def parse_json_object_from_request(request):
"""Parse a JSON object from the body of a twisted HTTP request.
- :param request: the twisted HTTP request.
- :raises
+ Args:
+ request: the twisted HTTP request.
+
+ Raises:
SynapseError if the request body couldn't be decoded as JSON or
if it wasn't a JSON object.
"""
|