mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
URL to allow direct database download
It's just the database URL with .db on the end, e.g. /flights.db Closes #19
This commit is contained in:
parent
f1b0521810
commit
3cce63b598
1 changed files with 17 additions and 1 deletions
18
app.py
18
app.py
|
|
@ -94,6 +94,9 @@ class BaseView(HTTPMethodView):
|
||||||
name, hash, should_redirect = resolve_db_name(db_name, **kwargs)
|
name, hash, should_redirect = resolve_db_name(db_name, **kwargs)
|
||||||
if should_redirect:
|
if should_redirect:
|
||||||
return self.redirect(request, should_redirect)
|
return self.redirect(request, should_redirect)
|
||||||
|
return await self.view_get(request, name, hash, **kwargs)
|
||||||
|
|
||||||
|
async def view_get(self, request, name, hash, **kwargs):
|
||||||
try:
|
try:
|
||||||
as_json = kwargs.pop('as_json')
|
as_json = kwargs.pop('as_json')
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
@ -181,6 +184,16 @@ class DatabaseView(BaseView):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class DatabaseDownload(BaseView):
|
||||||
|
async def view_get(self, request, name, hash, **kwargs):
|
||||||
|
filepath = ensure_build_metadata()[name]['file']
|
||||||
|
return await response.file_stream(
|
||||||
|
filepath, headers={
|
||||||
|
'Content-Disposition': 'attachment; filename="{}"'.format(filepath)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TableView(BaseView):
|
class TableView(BaseView):
|
||||||
template = 'table.html'
|
template = 'table.html'
|
||||||
|
|
||||||
|
|
@ -249,7 +262,8 @@ class RowView(BaseView):
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
app.add_route(DatabaseView.as_view(), '/<db_name:[^/]+?><as_json:(.jsono?)?$>')
|
app.add_route(DatabaseView.as_view(), '/<db_name:[^/\.]+?><as_json:(.jsono?)?$>')
|
||||||
|
app.add_route(DatabaseDownload.as_view(), '/<db_name:[^/]+?><as_db:(\.db)$>')
|
||||||
app.add_route(TableView.as_view(), '/<db_name:[^/]+>/<table:[^/]+?><as_json:(.jsono?)?$>')
|
app.add_route(TableView.as_view(), '/<db_name:[^/]+>/<table:[^/]+?><as_json:(.jsono?)?$>')
|
||||||
app.add_route(RowView.as_view(), '/<db_name:[^/]+>/<table:[^/]+?>/<pk_path:[^/]+?><as_json:(.jsono?)?$>')
|
app.add_route(RowView.as_view(), '/<db_name:[^/]+>/<table:[^/]+?>/<pk_path:[^/]+?><as_json:(.jsono?)?$>')
|
||||||
|
|
||||||
|
|
@ -282,6 +296,8 @@ def resolve_db_name(db_name, **kwargs):
|
||||||
should_redirect += '/' + kwargs['table']
|
should_redirect += '/' + kwargs['table']
|
||||||
if 'as_json' in kwargs:
|
if 'as_json' in kwargs:
|
||||||
should_redirect += kwargs['as_json']
|
should_redirect += kwargs['as_json']
|
||||||
|
if 'as_db' in kwargs:
|
||||||
|
should_redirect += kwargs['as_db']
|
||||||
return name, expected, should_redirect
|
return name, expected, should_redirect
|
||||||
return name, expected, None
|
return name, expected, None
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue