mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
keep_blank_values=True when parsing query_string, closes #1551
Refs #1518
This commit is contained in:
parent
492f9835aa
commit
a6ff123de5
3 changed files with 20 additions and 9 deletions
|
|
@ -97,7 +97,7 @@ class Request:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
return MultiParams(parse_qs(qs=self.query_string))
|
return MultiParams(parse_qs(qs=self.query_string, keep_blank_values=True))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def actor(self):
|
def actor(self):
|
||||||
|
|
|
||||||
|
|
@ -393,21 +393,16 @@ class TableView(RowTableShared):
|
||||||
nocount = True
|
nocount = True
|
||||||
nofacet = True
|
nofacet = True
|
||||||
|
|
||||||
# Ensure we don't drop anything with an empty value e.g. ?name__exact=
|
|
||||||
args = MultiParams(
|
|
||||||
urllib.parse.parse_qs(request.query_string, keep_blank_values=True)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Special args start with _ and do not contain a __
|
# Special args start with _ and do not contain a __
|
||||||
# That's so if there is a column that starts with _
|
# That's so if there is a column that starts with _
|
||||||
# it can still be queried using ?_col__exact=blah
|
# it can still be queried using ?_col__exact=blah
|
||||||
special_args = {}
|
special_args = {}
|
||||||
other_args = []
|
other_args = []
|
||||||
for key in args:
|
for key in request.args:
|
||||||
if key.startswith("_") and "__" not in key:
|
if key.startswith("_") and "__" not in key:
|
||||||
special_args[key] = args[key]
|
special_args[key] = request.args[key]
|
||||||
else:
|
else:
|
||||||
for v in args.getlist(key):
|
for v in request.args.getlist(key):
|
||||||
other_args.append((key, v))
|
other_args.append((key, v))
|
||||||
|
|
||||||
# Handle ?_filter_column and redirect, if present
|
# Handle ?_filter_column and redirect, if present
|
||||||
|
|
|
||||||
|
|
@ -121,3 +121,19 @@ def test_request_properties(path, query_string, expected_full_path):
|
||||||
assert request.path == path
|
assert request.path == path
|
||||||
assert request.query_string == query_string
|
assert request.query_string == query_string
|
||||||
assert request.full_path == expected_full_path
|
assert request.full_path == expected_full_path
|
||||||
|
|
||||||
|
|
||||||
|
def test_request_blank_values():
|
||||||
|
query_string = "a=b&foo=bar&foo=bar2&baz="
|
||||||
|
path_with_query_string = "/?" + query_string
|
||||||
|
scope = {
|
||||||
|
"http_version": "1.1",
|
||||||
|
"method": "POST",
|
||||||
|
"path": "/",
|
||||||
|
"raw_path": path_with_query_string.encode("latin-1"),
|
||||||
|
"query_string": query_string.encode("latin-1"),
|
||||||
|
"scheme": "http",
|
||||||
|
"type": "http",
|
||||||
|
}
|
||||||
|
request = Request(scope, None)
|
||||||
|
assert request.args._data == {"a": ["b"], "foo": ["bar", "bar2"], "baz": [""]}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue