Fix for params metadata error, closes #2455

This commit is contained in:
Simon Willison 2025-01-09 09:54:06 -08:00
commit 34390bbed8

View file

@ -234,6 +234,13 @@ ResolvedRow = collections.namedtuple(
) )
def _to_string(value):
if isinstance(value, str):
return value
else:
return json.dumps(value, default=str)
class Datasette: class Datasette:
# Message constants: # Message constants:
INFO = 1 INFO = 1
@ -451,23 +458,23 @@ class Datasette:
if key == "databases": if key == "databases":
continue continue
value = self._metadata_local[key] value = self._metadata_local[key]
if not isinstance(value, str): await self.set_instance_metadata(key, _to_string(value))
value = json.dumps(value)
await self.set_instance_metadata(key, value)
# step 2: database-level metadata # step 2: database-level metadata
for dbname, db in self._metadata_local.get("databases", {}).items(): for dbname, db in self._metadata_local.get("databases", {}).items():
for key, value in db.items(): for key, value in db.items():
if key in ("tables", "queries"): if key in ("tables", "queries"):
continue continue
await self.set_database_metadata(dbname, key, value) await self.set_database_metadata(dbname, key, _to_string(value))
# step 3: table-level metadata # step 3: table-level metadata
for tablename, table in db.get("tables", {}).items(): for tablename, table in db.get("tables", {}).items():
for key, value in table.items(): for key, value in table.items():
if key == "columns": if key == "columns":
continue continue
await self.set_resource_metadata(dbname, tablename, key, value) await self.set_resource_metadata(
dbname, tablename, key, _to_string(value)
)
# step 4: column-level metadata (only descriptions in metadata.json) # step 4: column-level metadata (only descriptions in metadata.json)
for columnname, column_description in table.get("columns", {}).items(): for columnname, column_description in table.get("columns", {}).items():