{"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-635055346", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 635055346, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNTA1NTM0Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-28T02:24:14Z", "updated_at": "2020-05-28T02:24:14Z", "author_association": "OWNER", "body": "Updated documentation is here: https://datasette.readthedocs.io/en/latest/plugins.html#register-output-renderer-datasette", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634879258", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634879258, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg3OTI1OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T19:09:22Z", "updated_at": "2020-05-28T01:33:45Z", "author_association": "OWNER", "body": "OK, the new design: your callback function can take any of the following arguments:\r\n\r\n- `datasette` - a Datasette instance\r\n- `columns` - the list of columns\r\n- `rows` - the list of rows (each one a SQLite `Row` object)\r\n- `sql` - the SQL query being executed\r\n- `query_name` - the name of the canned query, if this is one\r\n- `database` - the database name\r\n- `table` - the table or view name\r\n- `request` - the request object (to be documented in #706)\r\n- `view_name` - the name of the view\r\n\r\nWe will also continue to support the existing `args` and `data` arguments, but these will be undocumented and will be deprecated in Datasette 1.0. UPDATE: Decided against this, see https://github.com/simonw/datasette/issues/581#issuecomment-634946197", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634978388", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634978388, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDk3ODM4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T22:32:03Z", "updated_at": "2020-05-27T22:32:03Z", "author_association": "OWNER", "body": "Request object is now documented: https://datasette.readthedocs.io/en/latest/internals.html#request-object", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634964457", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634964457, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDk2NDQ1Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T21:57:35Z", "updated_at": "2020-05-27T21:57:35Z", "author_association": "OWNER", "body": "(I wonder if this would be enough to allow really smart plugins to implement ETag/conditional get)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634964294", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634964294, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDk2NDI5NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T21:57:10Z", "updated_at": "2020-05-27T21:57:10Z", "author_association": "OWNER", "body": "Right now a rendering callback returns the following:\r\n```\r\nbody - string or bytes, optional\r\n The response body, default empty\r\ncontent_type - string, optional\r\n The Content-Type header, default text/plain\r\nstatus_code - integer, optional\r\n The HTTP status code, default 200 \r\n```\r\nI'm going to add an optional `headers` dictionary key, too.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634946319", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634946319, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDk0NjMxOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T21:18:50Z", "updated_at": "2020-05-27T21:18:50Z", "author_association": "OWNER", "body": "(I used GitHub code search to find code using this plugin hook: https://github.com/search?q=register_output_renderer&type=Code )", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634946197", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634946197, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDk0NjE5Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T21:18:30Z", "updated_at": "2020-05-27T21:18:30Z", "author_association": "OWNER", "body": "I'm going to break backwards compatibility directly here, without waiting for Datasette 1.0.\r\n\r\nThe reason is that https://github.com/russss/datasette-geo hasn't been updated in 13 months so is already broken against current Datasette, and the other two plugins using this hook are owned by me so I can upgrade them myself.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634944832", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634944832, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDk0NDgzMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T21:15:50Z", "updated_at": "2020-05-27T21:16:28Z", "author_association": "OWNER", "body": "It bothers me that `query_name` here means the configured name of the canned query, but `view_name` means the name of the Datasette view class, NOT the name of an associated SQL view. That's in `table`.\r\n\r\nCan I come up with clearer names for these?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634943336", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634943336, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDk0MzMzNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T21:13:04Z", "updated_at": "2020-05-27T21:13:04Z", "author_association": "OWNER", "body": "Since I'm passing `request` I won't pass `scope` - if people want that they can access `request.scope`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-592621235", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 592621235, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MjYyMTIzNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-28T17:24:06Z", "updated_at": "2020-05-27T21:12:21Z", "author_association": "OWNER", "body": "Rather than pass a request object (hence promoting that object into part of the documented, stable API) I think I'll pass the ASGI scope - that's already a stable, documented standard.\r\n\r\nUPDATE: changed my mind since `request` is used by other plugins too, see #706.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634921101", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634921101, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDkyMTEwMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T20:27:36Z", "updated_at": "2020-05-27T20:27:36Z", "author_association": "OWNER", "body": "Actually passing the `request` object would be OK if I document it see https://github.com/simonw/datasette/issues/706", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634893744", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634893744, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg5Mzc0NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T19:32:08Z", "updated_at": "2020-05-27T19:32:08Z", "author_association": "OWNER", "body": "Need to figure out how best to unit test this plugin hook.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634888582", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634888582, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg4ODU4Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T19:23:23Z", "updated_at": "2020-05-27T19:23:23Z", "author_association": "OWNER", "body": "Here's the function I just wrote for this:\r\n```python\r\ndef call_with_supported_arguments(fn, **kwargs):\r\n parameters = inspect.signature(fn).parameters.keys()\r\n call_with = []\r\n for parameter in parameters:\r\n if parameter not in kwargs:\r\n raise TypeError(\"{} requires parameters {}\".format(fn, tuple(parameters)))\r\n call_with.append(kwargs[parameter])\r\n return fn(*call_with)\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634882770", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634882770, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg4Mjc3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T19:16:19Z", "updated_at": "2020-05-27T19:16:19Z", "author_association": "OWNER", "body": "```\r\nIn [1]: import inspect \r\n\r\nIn [2]: def foo(view, sql, inspect): \r\n ...: pass \r\n ...: \r\n\r\nIn [3]: inspect.signature(foo) \r\nOut[3]: \r\n\r\nIn [4]: inspect.signature(foo).parameters \r\nOut[4]: \r\nmappingproxy({'view': ,\r\n 'sql': ,\r\n 'inspect': })\r\n\r\nIn [5]: inspect.signature(foo).parameters.keys() \r\nOut[5]: odict_keys(['view', 'sql', 'inspect'])\r\n\r\nIn [6]: set(inspect.signature(foo).parameters.keys()) \r\nOut[6]: {'inspect', 'sql', 'view'}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634882112", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634882112, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg4MjExMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T19:14:55Z", "updated_at": "2020-05-27T19:14:55Z", "author_association": "OWNER", "body": "https://docs.python.org/3/library/inspect.html#introspecting-callables-with-the-signature-object\r\n\r\n> New in version 3.3.\r\n> \r\n> The Signature object represents the call signature of a callable object and its return annotation. To retrieve a Signature object, use the [`signature()`](https://docs.python.org/3/library/inspect.html#inspect.signature \"inspect.signature\") function.\r\n> \r\n> `inspect.``signature`(*callable*, ***, *follow_wrapped=True*)\r\n> \r\n> Return a [`Signature`](https://docs.python.org/3/library/inspect.html#inspect.Signature \"inspect.Signature\") object for the given `callable`:\r\n> \r\n> ```\r\n> >>> from inspect import signature\r\n> >>> def foo(a, *, b:int, **kwargs):\r\n> ... pass\r\n> \r\n> >>> sig = signature(foo)\r\n> \r\n> >>> str(sig)\r\n> '(a, *, b:int, **kwargs)'\r\n> \r\n> >>> str(sig.parameters['b'])\r\n> 'b:int'\r\n> \r\n> >>> sig.parameters['b'].annotation\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": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634881287", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634881287, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg4MTI4Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T19:13:09Z", "updated_at": "2020-05-27T19:13:09Z", "author_association": "OWNER", "body": "I think I need a utility function for \"call this function with this dictionary of arguments, but only pass the arguments which are inspected by the function\".", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634879734", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634879734, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg3OTczNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T19:10:17Z", "updated_at": "2020-05-27T19:12:36Z", "author_association": "OWNER", "body": "The `should_suggest` callback will take the same arguments: https://github.com/simonw/datasette/issues/770#issuecomment-634880090", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634865620", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634865620, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg2NTYyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T18:44:06Z", "updated_at": "2020-05-27T18:44:06Z", "author_association": "OWNER", "body": "The existing render callback takes the following arguments:\r\n\r\n> `args` - dictionary\r\n> The GET parameters of the request\r\n> \r\n> `data` - dictionary\r\n> The data to be rendered\r\n> \r\n> `view_name` - string\r\n> The name of the view where the renderer is being called. (`index`, `database`, `table`, and `row` are the most important ones.)\r\n\r\nThe `data` argument is a bit of a problem, because it tightly couples plugins to a currently undocumented datastructure within Datasette. Here's how `datasette-atom` picks that apart for example: https://github.com/simonw/datasette-atom/blob/095941c23c81b70c4787cdeef873c556b573b5fa/datasette_atom/__init__.py#L15-L66 - it does things like access `data[\"query\"][\"sql\"]` to figure out the SQL query that was used.\r\n\r\nI'm going to change the design of part of this ticket. I won't break the old `data` value just yet, but I'll mark it to be deprecated by Datasette 1.0.\r\n\r\nI think the only plugins using it right now are my `datasette-atom` and `datasette-ics` and @russss's [datasette-geo](https://github.com/russss/datasette-geo/blob/0d24c9fd782eeae8d136ee791143ee8cbf49ebdf/datasette_plugin_geo/__init__.py#L94-L101) so hopefully changing this won't cause any wider damage.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634857975", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634857975, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg1Nzk3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T18:30:29Z", "updated_at": "2020-05-27T18:30:29Z", "author_association": "OWNER", "body": "I'll use #770 for the `should_suggest` mechanism - this issue is for the extra arguments passed to the rendering callback.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634856748", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634856748, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg1Njc0OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T18:28:32Z", "updated_at": "2020-05-27T18:28:32Z", "author_association": "OWNER", "body": "Here's the code that passes a list of renderers to the template:\r\n\r\nhttps://github.com/simonw/datasette/blob/2d099ad9c657d2cab59de91cdb8bfed2da236ef6/datasette/views/base.py#L411-L423\r\n\r\nA renderer is currently defined as a two-key dictionary:\r\n```python\r\n@hookimpl\r\ndef register_output_renderer(datasette):\r\n return {\r\n 'extension': 'test',\r\n 'callback': render_test\r\n }\r\n```\r\nI can add a third key, `\"should_suggest\"` which is a function that returns `True` or `False` for a given query. If that key is missing it is assumed to return `True`.\r\n\r\nOne catch: what arguments should be passed to the `should_suggest(...)` function?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634853296", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634853296, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg1MzI5Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T18:22:46Z", "updated_at": "2020-05-27T18:22:46Z", "author_association": "OWNER", "body": "While I'm doing this, another feature I would like is the ability for renderers to opt-in / opt-out of being displayed as options on the page.\r\n\r\nhttps://www.niche-museums.com/browse/museums for example shows a `atom` link because the `datasette-atom` plugin is installed... but clicking it will give you a 400 error because the correct columns are not present:\r\n\r\n\"browse__museums__102_rows\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-634852196", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 634852196, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDg1MjE5Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-27T18:20:46Z", "updated_at": "2020-05-27T18:20:46Z", "author_association": "OWNER", "body": "Here's the code that calls the renderers - this needs to be expanded to check for those extra optional arguments:\r\n\r\nhttps://github.com/simonw/datasette/blob/2d099ad9c657d2cab59de91cdb8bfed2da236ef6/datasette/views/base.py#L387-L398", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-569005894", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 569005894, "node_id": "MDEyOklzc3VlQ29tbWVudDU2OTAwNTg5NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-12-26T08:03:59Z", "updated_at": "2019-12-26T08:03:59Z", "author_association": "OWNER", "body": "To solve https://github.com/simonw/datasette-atom/issues/6 the name of the current canned query should be made available somehow.\r\n\r\nThat way the plugin configuration could specify that the title for browse/feed should be X.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/581#issuecomment-538672413", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/581", "id": 538672413, "node_id": "MDEyOklzc3VlQ29tbWVudDUzODY3MjQxMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-10-05T17:45:04Z", "updated_at": "2019-10-05T17:45:04Z", "author_association": "OWNER", "body": "The `request` object should be made available too.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 502993509, "label": "Redesign register_output_renderer callback"}, "performed_via_github_app": null}