|
|
|
@ -29,7 +29,7 @@ def parse_integer(request, name, default=None, required=False): |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
request: the twisted HTTP request. |
|
|
|
|
name (str): the name of the query parameter. |
|
|
|
|
name (bytes/unicode): 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 |
|
|
|
@ -46,6 +46,10 @@ def parse_integer(request, name, default=None, required=False): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_integer_from_args(args, name, default=None, required=False): |
|
|
|
|
|
|
|
|
|
if not isinstance(name, bytes): |
|
|
|
|
name = name.encode('ascii') |
|
|
|
|
|
|
|
|
|
if name in args: |
|
|
|
|
try: |
|
|
|
|
return int(args[name][0]) |
|
|
|
@ -65,7 +69,7 @@ def parse_boolean(request, name, default=None, required=False): |
|
|
|
|
|
|
|
|
|
Args: |
|
|
|
|
request: the twisted HTTP request. |
|
|
|
|
name (str): the name of the query parameter. |
|
|
|
|
name (bytes/unicode): 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 |
|
|
|
@ -83,11 +87,15 @@ def parse_boolean(request, name, default=None, required=False): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_boolean_from_args(args, name, default=None, required=False): |
|
|
|
|
|
|
|
|
|
if not isinstance(name, bytes): |
|
|
|
|
name = name.encode('ascii') |
|
|
|
|
|
|
|
|
|
if name in args: |
|
|
|
|
try: |
|
|
|
|
return { |
|
|
|
|
"true": True, |
|
|
|
|
"false": False, |
|
|
|
|
b"true": True, |
|
|
|
|
b"false": False, |
|
|
|
|
}[args[name][0]] |
|
|
|
|
except Exception: |
|
|
|
|
message = ( |
|
|
|
@ -104,21 +112,29 @@ def parse_boolean_from_args(args, name, default=None, required=False): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_string(request, name, default=None, required=False, |
|
|
|
|
allowed_values=None, param_type="string"): |
|
|
|
|
"""Parse a string parameter from the request query string. |
|
|
|
|
allowed_values=None, param_type="string", encoding='ascii'): |
|
|
|
|
""" |
|
|
|
|
Parse a string parameter from the request query string. |
|
|
|
|
|
|
|
|
|
If encoding is not None, the content of the query param will be |
|
|
|
|
decoded to Unicode using the encoding, otherwise it will be encoded |
|
|
|
|
|
|
|
|
|
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. |
|
|
|
|
name (bytes/unicode): the name of the query parameter. |
|
|
|
|
default (bytes/unicode|None): value to use if the parameter is absent, |
|
|
|
|
defaults to None. Must be bytes if encoding is 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 |
|
|
|
|
allowed_values (list[bytes/unicode]): List of allowed values for the |
|
|
|
|
string, or None if any value is allowed, defaults to None. Must be |
|
|
|
|
the same type as name, if given. |
|
|
|
|
encoding: The encoding to decode the name to, and decode the string |
|
|
|
|
content with. |
|
|
|
|
|
|
|
|
|
Returns: |
|
|
|
|
str|None: A string value or the default. |
|
|
|
|
bytes/unicode|None: A string value or the default. Unicode if encoding |
|
|
|
|
was given, bytes otherwise. |
|
|
|
|
|
|
|
|
|
Raises: |
|
|
|
|
SynapseError if the parameter is absent and required, or if the |
|
|
|
@ -126,14 +142,22 @@ def parse_string(request, name, default=None, required=False, |
|
|
|
|
is not one of those allowed values. |
|
|
|
|
""" |
|
|
|
|
return parse_string_from_args( |
|
|
|
|
request.args, name, default, required, allowed_values, param_type, |
|
|
|
|
request.args, name, default, required, allowed_values, param_type, encoding |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_string_from_args(args, name, default=None, required=False, |
|
|
|
|
allowed_values=None, param_type="string"): |
|
|
|
|
allowed_values=None, param_type="string", encoding='ascii'): |
|
|
|
|
|
|
|
|
|
if not isinstance(name, bytes): |
|
|
|
|
name = name.encode('ascii') |
|
|
|
|
|
|
|
|
|
if name in args: |
|
|
|
|
value = args[name][0] |
|
|
|
|
|
|
|
|
|
if encoding: |
|
|
|
|
value = value.decode(encoding) |
|
|
|
|
|
|
|
|
|
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) |
|
|
|
@ -146,6 +170,10 @@ def parse_string_from_args(args, name, default=None, required=False, |
|
|
|
|
message = "Missing %s query parameter %r" % (param_type, name) |
|
|
|
|
raise SynapseError(400, message, errcode=Codes.MISSING_PARAM) |
|
|
|
|
else: |
|
|
|
|
|
|
|
|
|
if encoding and isinstance(default, bytes): |
|
|
|
|
return default.decode(encoding) |
|
|
|
|
|
|
|
|
|
return default |
|
|
|
|
|
|
|
|
|
|
|
|
|
|