mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
register_output_renderer can now return Response, closes #953
This commit is contained in:
parent
86aefc39c5
commit
799ecae948
5 changed files with 42 additions and 16 deletions
|
|
@ -1,4 +1,5 @@
|
|||
from datasette import hookimpl
|
||||
from datasette.utils.asgi import Response
|
||||
import json
|
||||
|
||||
|
||||
|
|
@ -56,6 +57,12 @@ def render_test_no_parameters():
|
|||
return {"body": "Hello"}
|
||||
|
||||
|
||||
async def render_response(request):
|
||||
if request.args.get("_broken"):
|
||||
return "this should break"
|
||||
return Response.json({"this_is": "json"})
|
||||
|
||||
|
||||
@hookimpl
|
||||
def register_output_renderer(datasette):
|
||||
return [
|
||||
|
|
@ -65,4 +72,5 @@ def register_output_renderer(datasette):
|
|||
"can_render": can_render,
|
||||
},
|
||||
{"extension": "testnone", "callback": render_test_no_parameters},
|
||||
{"extension": "testresponse", "render": render_response},
|
||||
]
|
||||
|
|
|
|||
|
|
@ -559,6 +559,7 @@ def test_table_csv_json_export_interface(app_client):
|
|||
"simple_primary_key.json?id__gt=2",
|
||||
"simple_primary_key.testall?id__gt=2",
|
||||
"simple_primary_key.testnone?id__gt=2",
|
||||
"simple_primary_key.testresponse?id__gt=2",
|
||||
"simple_primary_key.csv?id__gt=2&_size=max",
|
||||
"#export",
|
||||
]
|
||||
|
|
@ -597,6 +598,7 @@ def test_csv_json_export_links_include_labels_if_foreign_keys(app_client):
|
|||
"facetable.json?_labels=on",
|
||||
"facetable.testall?_labels=on",
|
||||
"facetable.testnone?_labels=on",
|
||||
"facetable.testresponse?_labels=on",
|
||||
"facetable.csv?_labels=on&_size=max",
|
||||
"#export",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -479,6 +479,18 @@ def test_hook_register_output_renderer_custom_headers(app_client):
|
|||
assert "2" == response.headers["x-gosh"]
|
||||
|
||||
|
||||
def test_hook_register_output_renderer_returning_response(app_client):
|
||||
response = app_client.get("/fixtures/facetable.testresponse")
|
||||
assert 200 == response.status
|
||||
assert response.json == {"this_is": "json"}
|
||||
|
||||
|
||||
def test_hook_register_output_renderer_returning_broken_value(app_client):
|
||||
response = app_client.get("/fixtures/facetable.testresponse?_broken=1")
|
||||
assert 500 == response.status
|
||||
assert "this should break should be dict or Response" in response.text
|
||||
|
||||
|
||||
def test_hook_register_output_renderer_can_render(app_client):
|
||||
response = app_client.get("/fixtures/facetable?_no_can_render=1")
|
||||
assert response.status == 200
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue