Read format from route captures, closes #1667

Refs #1660
This commit is contained in:
Simon Willison 2022-03-19 13:32:29 -07:00
commit 798f075ef9
3 changed files with 1 additions and 56 deletions

View file

@ -731,26 +731,6 @@ def module_from_path(path, name):
return mod
async def resolve_table_and_format(
table_and_format, table_exists, allowed_formats=None
):
if allowed_formats is None:
allowed_formats = []
if "." in table_and_format:
# Check if a table exists with this exact name
it_exists = await table_exists(table_and_format)
if it_exists:
return table_and_format, None
# Check if table ends with a known format
formats = list(allowed_formats) + ["csv", "jsono"]
for _format in formats:
if table_and_format.endswith(f".{_format}"):
table = table_and_format[: -(len(_format) + 1)]
return table, _format
return table_and_format, None
def path_with_format(
*, request=None, path=None, format=None, extra_qs=None, replace_format=None
):

View file

@ -19,12 +19,10 @@ from datasette.utils import (
LimitedWriter,
call_with_supported_arguments,
tilde_decode,
tilde_encode,
path_from_row_pks,
path_with_added_args,
path_with_removed_args,
path_with_format,
resolve_table_and_format,
sqlite3,
HASH_LENGTH,
)
@ -372,18 +370,10 @@ class DataView(BaseView):
return AsgiStream(stream_fn, headers=headers, content_type=content_type)
def get_format(self, request):
# Format is the bit from the path following the ., if one exists
last_path_component = request.path.split("/")[-1]
if "." in last_path_component:
return last_path_component.split(".")[-1]
else:
return None
async def get(self, request):
db_name = request.url_vars["database"]
database = tilde_decode(db_name)
_format = self.get_format(request)
_format = request.url_vars["format"]
data_kwargs = {}
if _format == "csv":