home / github

Menu
  • Search all tables
  • GraphQL API

issue_comments

Table actions
  • GraphQL API for issue_comments

7 rows where issue = 1384273985 sorted by updated_at descending

✖
✖

✎ View and edit SQL

This data as json, CSV (advanced)

Suggested facets: reactions, created_at (date), updated_at (date)

user 2

  • simonw 6
  • jefftriplett 1

author_association 2

  • OWNER 6
  • CONTRIBUTOR 1

issue 1

  • Expose `sql` and `params` arguments to various plugin hooks · 7 ✖
id html_url issue_url node_id user created_at updated_at ▲ author_association body reactions issue performed_via_github_app
1258818028 https://github.com/simonw/datasette/issues/1817#issuecomment-1258818028 https://api.github.com/repos/simonw/datasette/issues/1817 IC_kwDOBm6k_c5LCAns simonw 9599 2022-09-27T00:27:53Z 2022-09-27T00:27:53Z OWNER

Made a start on this: ```diff diff --git a/datasette/hookspecs.py b/datasette/hookspecs.py index 34e19664..fe0971e5 100644 --- a/datasette/hookspecs.py +++ b/datasette/hookspecs.py @@ -31,25 +31,29 @@ def prepare_jinja2_environment(env, datasette):

@hookspec -def extra_css_urls(template, database, table, columns, view_name, request, datasette): +def extra_css_urls( + template, database, table, columns, sql, params, view_name, request, datasette +): """Extra CSS URLs added by this plugin"""

@hookspec -def extra_js_urls(template, database, table, columns, view_name, request, datasette): +def extra_js_urls( + template, database, table, columns, sql, params, view_name, request, datasette +): """Extra JavaScript URLs added by this plugin"""

@hookspec def extra_body_script( - template, database, table, columns, view_name, request, datasette + template, database, table, columns, sql, params, view_name, request, datasette ): """Extra JavaScript code to be included in <script> at bottom of body"""

@hookspec def extra_template_vars( - template, database, table, columns, view_name, request, datasette + template, database, table, columns, sql, params, view_name, request, datasette ): """Extra template variables to be made available to the template - can return dict or callable or awaitable""" diff diff --git a/datasette/app.py b/datasette/app.py index 03d1dacc..2f3a46fe 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -1036,7 +1036,9 @@ class Datasette:

     return await template.render_async(template_context)
  • async def _asset_urls(self, key, template, context, request, view_name):
  • async def _asset_urls(
  • self, key, template, context, request, view_name, sql, params
  • ): # Flatten list-of-lists from plugins: seen_urls = set() collected = [] @@ -1045,6 +1047,8 @@ class Datasette: database=context.get("database"), table=context.get("table"), columns=context.get("columns"),
  • sql=sql,
  • params=params, view_name=view_name, request=request, datasette=self, ```
{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Expose `sql` and `params` arguments to various plugin hooks 1384273985  
1258756231 https://github.com/simonw/datasette/issues/1817#issuecomment-1258756231 https://api.github.com/repos/simonw/datasette/issues/1817 IC_kwDOBm6k_c5LBxiH simonw 9599 2022-09-26T23:19:34Z 2022-09-26T23:19:34Z OWNER

This is a good idea - it's something I should do before Datasette 1.0.

I was a tiny bit worried about compatibility (Datasette is 3.7+) but it looks like they have been in Python since 3.0!

{
    "total_count": 1,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 1,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Expose `sql` and `params` arguments to various plugin hooks 1384273985  
1256781274 https://github.com/simonw/datasette/issues/1817#issuecomment-1256781274 https://api.github.com/repos/simonw/datasette/issues/1817 IC_kwDOBm6k_c5K6PXa jefftriplett 50527 2022-09-23T22:59:46Z 2022-09-23T22:59:46Z CONTRIBUTOR

While you are adding features, would you be future-proofing your APIs if you switched over some arguments over to keyword-only arguments or would that be too disruptive?

Thinking out loud:

async def render_template( self, templates, *, context=None, plugin_context=None, request=None, view_name=None ):

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Expose `sql` and `params` arguments to various plugin hooks 1384273985  
1256662785 https://github.com/simonw/datasette/issues/1817#issuecomment-1256662785 https://api.github.com/repos/simonw/datasette/issues/1817 IC_kwDOBm6k_c5K5ycB simonw 9599 2022-09-23T20:53:21Z 2022-09-23T20:53:21Z OWNER

Maybe the signature for that method should be:

python async def render_template( self, templates, context=None, plugin_context=None, request=None, view_name=None ): Where plugin_context is a special dictionary of values that can be passed through to plugin hooks that accept them - so database, table, columns, sql and params.

Those would then be passed when specific views call render_template() - which they currently do via calling BaseView.render(...), but actually the views that are used for tables and queries don't even call that directly due to the weird designed used with DataView subclasses that implement a .data() method.

So yet another change that's blocked on fixing that long-running weird piece of technical debt: - https://github.com/simonw/datasette/issues/1518

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Expose `sql` and `params` arguments to various plugin hooks 1384273985  
1256659788 https://github.com/simonw/datasette/issues/1817#issuecomment-1256659788 https://api.github.com/repos/simonw/datasette/issues/1817 IC_kwDOBm6k_c5K5xtM simonw 9599 2022-09-23T20:49:22Z 2022-09-23T20:49:22Z OWNER

Implementation challenge: all four of those hooks are called inside the datasette.render_template() method, which has this signature:

https://github.com/simonw/datasette/blob/cb1e093fd361b758120aefc1a444df02462389a3/datasette/app.py#L945-L947

So I would have to pull the sql and params variables out of the context since they are not being passed to that method. OR I could teach that method to take those as optional arguments.

Might be an opportunity to clean up this hack:

https://github.com/simonw/datasette/blob/cb1e093fd361b758120aefc1a444df02462389a3/datasette/app.py#L959-L964

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Expose `sql` and `params` arguments to various plugin hooks 1384273985  
1256652548 https://github.com/simonw/datasette/issues/1817#issuecomment-1256652548 https://api.github.com/repos/simonw/datasette/issues/1817 IC_kwDOBm6k_c5K5v8E simonw 9599 2022-09-23T20:41:32Z 2022-09-23T20:41:32Z OWNER

Which plugin hooks should take sql and params?

  • extra_template_vars(template, database, table, columns, view_name, request, datasette)
  • extra_css_urls(template, database, table, columns, view_name, request, datasette)
  • extra_js_urls(template, database, table, columns, view_name, request, datasette)
  • extra_body_script(template, database, table, columns, view_name, request, datasette)

And maybe these:

  • render_cell(row, value, column, table, database, datasette)
  • table_actions(datasette, actor, database, table, request)

I'll start by implementing the first set, then I'll think further about those "maybes".

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Expose `sql` and `params` arguments to various plugin hooks 1384273985  
1256650449 https://github.com/simonw/datasette/issues/1817#issuecomment-1256650449 https://api.github.com/repos/simonw/datasette/issues/1817 IC_kwDOBm6k_c5K5vbR simonw 9599 2022-09-23T20:38:53Z 2022-09-23T20:38:53Z OWNER

I've wanted something like this in the past too. I think the thing to do here might be to add sql and params arguments to a bunch of the plugin hooks, such that they can see the main query that is being used on the page that they are helping to render.

While I'm working on this: https://docs.datasette.io/en/0.62/plugin_hooks.html#register-output-renderer-datasette output renderer functions take sql but do not currently take params - they should also take params.

{
    "total_count": 0,
    "+1": 0,
    "-1": 0,
    "laugh": 0,
    "hooray": 0,
    "confused": 0,
    "heart": 0,
    "rocket": 0,
    "eyes": 0
}
Expose `sql` and `params` arguments to various plugin hooks 1384273985  

Advanced export

JSON shape: default, array, newline-delimited, object

CSV options:

CREATE TABLE [issue_comments] (
   [html_url] TEXT,
   [issue_url] TEXT,
   [id] INTEGER PRIMARY KEY,
   [node_id] TEXT,
   [user] INTEGER REFERENCES [users]([id]),
   [created_at] TEXT,
   [updated_at] TEXT,
   [author_association] TEXT,
   [body] TEXT,
   [reactions] TEXT,
   [issue] INTEGER REFERENCES [issues]([id])
, [performed_via_github_app] TEXT);
CREATE INDEX [idx_issue_comments_issue]
                ON [issue_comments] ([issue]);
CREATE INDEX [idx_issue_comments_user]
                ON [issue_comments] ([user]);
Powered by Datasette · Queries took 32.197ms · About: github-to-sqlite
  • Sort ascending
  • Sort descending
  • Facet by this
  • Hide this column
  • Show all columns
  • Show not-blank rows