From 979ae4f9164bdae6db100fa7835b2f432160e7fd Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sun, 23 Jun 2019 15:23:53 -0700 Subject: [PATCH] Replaced sanic.request.RequestParameters --- datasette/utils/__init__.py | 13 +++++++++++++ datasette/views/table.py | 5 ++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/datasette/utils/__init__.py b/datasette/utils/__init__.py index 5ed8dd12..bdebfc30 100644 --- a/datasette/utils/__init__.py +++ b/datasette/utils/__init__.py @@ -741,3 +741,16 @@ def format_bytes(bytes): return "{} {}".format(int(current), unit) else: return "{:.1f} {}".format(current, unit) + + +class RequestParameters(dict): + def get(self, name, default=None): + "Return first value in the list, if available" + try: + return super().get(name)[0] + except KeyError: + return default + + def getlist(self, name, default=None): + "Return full list" + return super().get(name, default) diff --git a/datasette/views/table.py b/datasette/views/table.py index 14b8743a..b5765ca4 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -4,12 +4,12 @@ import json import jinja2 from sanic.exceptions import NotFound -from sanic.request import RequestParameters from datasette.plugins import pm from datasette.utils import ( CustomRow, QueryInterrupted, + RequestParameters, append_querystring, compound_keys_after_sql, escape_sqlite, @@ -219,8 +219,7 @@ class TableView(RowTableShared): if is_view: order_by = "" - # We roll our own query_string decoder because by default Sanic - # drops anything with an empty value e.g. ?name__exact= + # Ensure we don't drop anything with an empty value e.g. ?name__exact= args = RequestParameters( urllib.parse.parse_qs(request.query_string, keep_blank_values=True) )