mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
Tables and custom SQL query results can now be exported as CSV. The easiest way to do this is to use the .csv extension, e.g. /test_tables/facet_cities.csv By default this is served as Content-Type: text/plain so you can see it in your browser. If you want to download the file (using text/csv and with an appropriate Content-Disposition: attachment header) you can do so like this: /test_tables/facet_cities.csv?_dl=1 We link to the CSV and downloadable CSV URLs from the table and query pages. The links use ?_size=max and so by default will return 1,000 rows. Also fixes #303 - table names ending in .json or .csv are now detected and URLs are generated that look like this instead: /test_tables/table%2Fwith%2Fslashes.csv?_format=csv The ?_format= option is available for everything else too, but we link to the .csv / .json versions in most cases because they are aesthetically pleasing.
30 lines
866 B
Python
30 lines
866 B
Python
import json
|
|
from sanic import response
|
|
from .base import RenderMixin
|
|
|
|
|
|
class JsonDataView(RenderMixin):
|
|
def __init__(self, datasette, filename, data_callback):
|
|
self.ds = datasette
|
|
self.jinja_env = datasette.jinja_env
|
|
self.filename = filename
|
|
self.data_callback = data_callback
|
|
|
|
async def get(self, request, as_format):
|
|
data = self.data_callback()
|
|
if as_format:
|
|
headers = {}
|
|
if self.ds.cors:
|
|
headers["Access-Control-Allow-Origin"] = "*"
|
|
return response.HTTPResponse(
|
|
json.dumps(data),
|
|
content_type="application/json",
|
|
headers=headers
|
|
)
|
|
|
|
else:
|
|
return self.render(
|
|
["show_json.html"],
|
|
filename=self.filename,
|
|
data=data
|
|
)
|