{"html_url": "https://github.com/simonw/datasette/issues/1817#issuecomment-1256652548", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1817", "id": 1256652548, "node_id": "IC_kwDOBm6k_c5K5v8E", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-09-23T20:41:32Z", "updated_at": "2022-09-23T20:41:32Z", "author_association": "OWNER", "body": "Which plugin hooks should take `sql` and `params`?\r\n\r\n- [extra_template_vars(template, database, table, columns, view_name, request, datasette)](https://docs.datasette.io/en/0.62/plugin_hooks.html#extra-template-vars-template-database-table-columns-view-name-request-datasette)\r\n- [extra_css_urls(template, database, table, columns, view_name, request, datasette)](https://docs.datasette.io/en/0.62/plugin_hooks.html#extra-css-urls-template-database-table-columns-view-name-request-datasette)\r\n- [extra_js_urls(template, database, table, columns, view_name, request, datasette)](https://docs.datasette.io/en/0.62/plugin_hooks.html#extra-js-urls-template-database-table-columns-view-name-request-datasette)\r\n- [extra_body_script(template, database, table, columns, view_name, request, datasette)](https://docs.datasette.io/en/0.62/plugin_hooks.html#extra-body-script-template-database-table-columns-view-name-request-datasette)\r\n\r\nAnd maybe these:\r\n\r\n- [render_cell(row, value, column, table, database, datasette)](https://docs.datasette.io/en/0.62/plugin_hooks.html#render-cell-row-value-column-table-database-datasette)\r\n- [table_actions(datasette, actor, database, table, request)](https://docs.datasette.io/en/0.62/plugin_hooks.html#table-actions-datasette-actor-database-table-request)\r\n\r\nI'll start by implementing the first set, then I'll think further about those \"maybes\".", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1384273985, "label": "Expose `sql` and `params` arguments to various plugin hooks"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1817#issuecomment-1256650449", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1817", "id": 1256650449, "node_id": "IC_kwDOBm6k_c5K5vbR", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-09-23T20:38:53Z", "updated_at": "2022-09-23T20:38:53Z", "author_association": "OWNER", "body": "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.\r\n\r\nWhile 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`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1384273985, "label": "Expose `sql` and `params` arguments to various plugin hooks"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1817#issuecomment-1256659788", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1817", "id": 1256659788, "node_id": "IC_kwDOBm6k_c5K5xtM", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-09-23T20:49:22Z", "updated_at": "2022-09-23T20:49:22Z", "author_association": "OWNER", "body": "Implementation challenge: all four of those hooks are called inside the `datasette.render_template()` method, which has this signature:\r\n\r\nhttps://github.com/simonw/datasette/blob/cb1e093fd361b758120aefc1a444df02462389a3/datasette/app.py#L945-L947\r\n\r\nSo 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.\r\n\r\nMight be an opportunity to clean up this hack:\r\n\r\nhttps://github.com/simonw/datasette/blob/cb1e093fd361b758120aefc1a444df02462389a3/datasette/app.py#L959-L964\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1384273985, "label": "Expose `sql` and `params` arguments to various plugin hooks"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1817#issuecomment-1256662785", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1817", "id": 1256662785, "node_id": "IC_kwDOBm6k_c5K5ycB", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-09-23T20:53:21Z", "updated_at": "2022-09-23T20:53:21Z", "author_association": "OWNER", "body": "Maybe the signature for that method should be:\r\n\r\n```python\r\nasync def render_template( \r\n self, templates, context=None, plugin_context=None, request=None, view_name=None \r\n ): \r\n```\r\nWhere `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`.\r\n\r\nThose 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.\r\n\r\nSo yet another change that's blocked on fixing that long-running weird piece of technical debt:\r\n- https://github.com/simonw/datasette/issues/1518\r\n\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1384273985, "label": "Expose `sql` and `params` arguments to various plugin hooks"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1817#issuecomment-1256781274", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1817", "id": 1256781274, "node_id": "IC_kwDOBm6k_c5K6PXa", "user": {"value": 50527, "label": "jefftriplett"}, "created_at": "2022-09-23T22:59:46Z", "updated_at": "2022-09-23T22:59:46Z", "author_association": "CONTRIBUTOR", "body": "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?\r\n\r\nThinking out loud:\r\n\r\n```\r\nasync def render_template( \r\n self, templates, *, context=None, plugin_context=None, request=None, view_name=None \r\n ): \r\n```\r\n\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1384273985, "label": "Expose `sql` and `params` arguments to various plugin hooks"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/490#issuecomment-1256428818", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/490", "id": 1256428818, "node_id": "IC_kwDOCGYnMM5K45US", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-09-23T16:37:58Z", "updated_at": "2022-09-23T16:38:35Z", "author_association": "OWNER", "body": "It should be possible to achieve this with the `--text` option: https://sqlite-utils.datasette.io/en/stable/cli.html?highlight=text#convert-with-text\r\n\r\nGiven an example like this in `multiline.log`:\r\n```\r\n2022-03-01T12:04:52: Here is a log message\r\n that spans multiple lines\r\n2022-03-01T12:04:52: This is a single line\r\n2022-03-01T12:04:52: Here is another message\r\n that spans multiple lines\r\n```\r\nYou should be able to run something like this:\r\n```\r\nsqlite-utils insert /tmp/log.db log multiline.log --text --convert \"\r\nimport re\r\n\r\nr = re.compile(r'^(?P\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}):(?P.*)', re.MULTILINE)\r\n\r\ndef convert(text):\r\n return [m.groupdict() for m in r.finditer(text)]\r\n\"\r\n```\r\nAfter running this I get:\r\n```\r\nsqlite-utils rows /tmp/log.db log\r\n[{\"datetime\": \"2022-03-01T12:04:52\", \"log\": \" Here is a log message\"},\r\n {\"datetime\": \"2022-03-01T12:04:52\", \"log\": \" This is a single line\"},\r\n {\"datetime\": \"2022-03-01T12:04:52\", \"log\": \" Here is another message\"}]\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1382457780, "label": "Ability to insert multi-line files"}, "performed_via_github_app": null}