render_cell(value, column, table, database, datasette)

The render_cell plugin hook previously was only passed value.

It is now passed (value, column, table, database, datasette).
This commit is contained in:
Simon Willison 2018-08-28 03:03:01 -07:00
commit 2e836f72d9
No known key found for this signature in database
GPG key ID: 17E2DEA2588B7F52
10 changed files with 127 additions and 25 deletions

View file

@ -36,5 +36,5 @@ def publish_subcommand(publish):
@hookspec(firstresult=True)
def render_cell(value):
def render_cell(value, column, table, database, datasette):
"Customize rendering of HTML table cell values"

View file

@ -54,6 +54,10 @@ class Results:
self.truncated = truncated
self.description = description
@property
def columns(self):
return [d[0] for d in self.description]
def __iter__(self):
return iter(self.rows)

View file

@ -501,10 +501,16 @@ class BaseView(RenderMixin):
display_rows = []
for row in results.rows:
display_row = []
for value in row:
for column, value in zip(results.columns, row):
display_value = value
# Let the plugins have a go
plugin_value = pm.hook.render_cell(value=value)
plugin_value = pm.hook.render_cell(
value=value,
column=column,
table=None,
database=name,
datasette=self.ds,
)
if plugin_value is not None:
display_value = plugin_value
else:

View file

@ -167,7 +167,13 @@ class RowTableShared(BaseView):
continue
# First let the plugins have a go
plugin_display_value = pm.hook.render_cell(value=value)
plugin_display_value = pm.hook.render_cell(
value=value,
column=column,
table=table,
database=database,
datasette=self.ds,
)
if plugin_display_value is not None:
display_value = plugin_display_value
elif isinstance(value, dict):