?_shape=arrayfirst, closes #287

pull/377/head
Simon Willison 2018-05-26 17:32:15 -07:00
rodzic b463f60158
commit 276913b748
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 17E2DEA2588B7F52
3 zmienionych plików z 19 dodań i 1 usunięć

Wyświetl plik

@ -185,7 +185,9 @@ class BaseView(RenderMixin):
# Deal with the _shape option
shape = request.args.get("_shape", "arrays")
if shape in ("objects", "object", "array"):
if shape == "arrayfirst":
data = [row[0] for row in data["rows"]]
elif shape in ("objects", "object", "array"):
columns = data.get("columns")
rows = data.get("rows")
if rows and columns:

Wyświetl plik

@ -62,6 +62,7 @@ options:
* ``?_shape=arrays`` - ``"rows"`` is the default option, shown above
* ``?_shape=objects`` - ``"rows"`` is a list of JSON key/value objects
* ``?_shape=array`` - the entire response is an array of objects
* ``?_shape=arrayfirst`` - the entire response is a flat JSON array containing just the first value from each row
* ``?_shape=object`` - the entire response is a JSON object keyed using the primary keys of the rows
``objects`` looks like this::
@ -102,6 +103,10 @@ options:
}
]
``arrayfirst`` looks like this::
[1, 2, 3]
``object`` looks like this::
{

Wyświetl plik

@ -433,6 +433,17 @@ def test_table_shape_arrays(app_client):
] == response.json['rows']
def test_table_shape_arrayfirst(app_client):
response = app_client.get(
'/test_tables.json?' + urllib.parse.urlencode({
'sql': 'select content from simple_primary_key order by id',
'_shape': 'arrayfirst'
}),
gather_request=False
)
assert ['hello', 'world', ''] == response.json
def test_table_shape_objects(app_client):
response = app_client.get(
'/test_tables/simple_primary_key.json?_shape=objects',