\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732798913, "label": "Navigation menu plus plugin hook"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1064#issuecomment-719106174", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1064", "id": 719106174, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTEwNjE3NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-30T00:55:12Z", "updated_at": "2020-10-30T00:55:12Z", "author_association": "OWNER", "body": "So what should go in this menu?\r\n\r\nIf the user is logged in as root, I'll link to the various debug pages.\r\n\r\nIf they're not logged in at all I don't think the menu should appear.\r\n\r\nIf they are logged in as anyone, it should display to give them access to the \"log out\" button.\r\n\r\nPlugins can add links to it. If those plugins add links, the menu will display.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732798913, "label": "Navigation menu plus plugin hook"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1064#issuecomment-719105641", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1064", "id": 719105641, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTEwNTY0MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-30T00:53:00Z", "updated_at": "2020-10-30T00:53:00Z", "author_association": "OWNER", "body": "Tips for making this accessible: https://css-tricks.com/accessible-svgs/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732798913, "label": "Navigation menu plus plugin hook"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1064#issuecomment-719104883", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1064", "id": 719104883, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTEwNDg4Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-30T00:50:01Z", "updated_at": "2020-10-30T00:52:29Z", "author_association": "OWNER", "body": "Here's what the prototype looks like so far:\r\n\r\n![menu](https://user-images.githubusercontent.com/9599/97647443-7eda4f00-1a0f-11eb-8d78-b703b7a13616.gif)\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": 732798913, "label": "Navigation menu plus plugin hook"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1064#issuecomment-719105197", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1064", "id": 719105197, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTEwNTE5Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-30T00:51:16Z", "updated_at": "2020-10-30T00:51:16Z", "author_association": "OWNER", "body": "I used a `` for this: https://github.com/simonw/datasette/blob/0d7ac764861d84be24d661cf4104ce61ea11a82a/datasette/templates/base.html#L16-L36\r\n\r\nI added a bit of JavaScript so that clicking outside the menu would close it: https://github.com/simonw/datasette/blob/0d7ac764861d84be24d661cf4104ce61ea11a82a/datasette/templates/base.html#L59-L74", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732798913, "label": "Navigation menu plus plugin hook"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1034#issuecomment-719094027", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1034", "id": 719094027, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTA5NDAyNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-30T00:11:17Z", "updated_at": "2020-10-30T00:11:17Z", "author_association": "OWNER", "body": "Demos:\r\n\r\nhttps://latest.datasette.io/fixtures/binary_data.csv?_size=max\r\n\r\n```csv\r\nrowid,data\r\n1,http://latest.datasette.io/fixtures/binary_data/1.blob?_blob_column=data\r\n2,http://latest.datasette.io/fixtures/binary_data/2.blob?_blob_column=data\r\n3,\r\n```\r\n\r\nhttps://latest.datasette.io/fixtures.csv?sql=select+rowid%2C+data+from+binary_data+order+by+rowid+limit+1001&_size=max\r\n\r\n```csv\r\nrowid,data\r\n1,http://latest.datasette.io/fixtures.blob?sql=select+rowid%2C+data+from+binary_data+order+by+rowid+limit+1001&_size=max&_blob_column=data&_blob_hash=f3088978da8f9aea479ffc7f631370b968d2e855eeb172bea7f6c7a04262bb6d\r\n2,http://latest.datasette.io/fixtures.blob?sql=select+rowid%2C+data+from+binary_data+order+by+rowid+limit+1001&_size=max&_blob_column=data&_blob_hash=b835b0483cedb86130b9a2c280880bf5fadc5318ddf8c18d0df5204d40df1724\r\n3,\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 725184645, "label": "Better way of representing binary data in .csv output"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1063#issuecomment-719066706", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1063", "id": 719066706, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTA2NjcwNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T22:46:28Z", "updated_at": "2020-10-29T22:46:28Z", "author_association": "OWNER", "body": "I'm not going to do the base64 thing unless someone asks for it.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732685643, "label": ".csv should link to .blob downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1051#issuecomment-719053669", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1051", "id": 719053669, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTA1MzY2OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T22:12:16Z", "updated_at": "2020-10-29T22:12:16Z", "author_association": "OWNER", "body": "https://latest.datasette.io/fixtures?sql=select+rowid%2C+data+from+binary_data+order+by+rowid+limit+101 now looks like this:\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": 729096595, "label": "Better display of binary data on arbitrary query results page"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1034#issuecomment-719050754", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1034", "id": 719050754, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTA1MDc1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T22:04:52Z", "updated_at": "2020-10-29T22:04:52Z", "author_association": "OWNER", "body": "I'm going to link to. the new `.blob` representation using the new `?_blob_hash=xxx` argument to ensure that the content served is the expected binary blob.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 725184645, "label": "Better way of representing binary data in .csv output"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1063#issuecomment-719050390", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1063", "id": 719050390, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTA1MDM5MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T22:04:00Z", "updated_at": "2020-10-29T22:04:00Z", "author_association": "OWNER", "body": "This will close #1034.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732685643, "label": ".csv should link to .blob downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1061#issuecomment-719042601", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1061", "id": 719042601, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTA0MjYwMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T21:45:35Z", "updated_at": "2020-10-29T21:50:42Z", "author_association": "OWNER", "body": "Moving the CSV work to a separate issue.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732634375, "label": ".blob output renderer"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1063#issuecomment-719043108", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1063", "id": 719043108, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTA0MzEwOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T21:46:48Z", "updated_at": "2020-10-29T21:46:48Z", "author_association": "OWNER", "body": "Remove this `xfail` and `import pytest`: https://github.com/simonw/datasette/blob/503a5b7b4080a26ef9ceb1ecd1a4a6f4ef4ffc59/tests/test_csv.py#L83-L96", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732685643, "label": ".csv should link to .blob downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1061#issuecomment-719035336", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1061", "id": 719035336, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTAzNTMzNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T21:29:29Z", "updated_at": "2020-10-29T21:29:29Z", "author_association": "OWNER", "body": "Those display_rows have already been processed by the `render_cell` plugin hook: https://github.com/simonw/datasette/blob/d6f9ff71378c4eab34dad181c23cfc143a4aef2d/datasette/views/database.py#L320-L346", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732634375, "label": ".blob output renderer"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1061#issuecomment-719033013", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1061", "id": 719033013, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTAzMzAxMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T21:27:14Z", "updated_at": "2020-10-29T21:27:14Z", "author_association": "OWNER", "body": "Next challenge: link to `.blob` downloads from https://latest.datasette.io/fixtures?sql=select+rowid%2C+data+from+binary_data\r\n\r\nThis will be a bit tricky. Here's how that template works at the moment: https://github.com/simonw/datasette/blob/d6f9ff71378c4eab34dad181c23cfc143a4aef2d/datasette/templates/query.html#L69-L77", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732634375, "label": ".blob output renderer"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1062#issuecomment-719031901", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1062", "id": 719031901, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTAzMTkwMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T21:25:54Z", "updated_at": "2020-10-29T21:25:54Z", "author_association": "OWNER", "body": "Relevant code: https://github.com/simonw/datasette/blob/d6f9ff71378c4eab34dad181c23cfc143a4aef2d/datasette/views/base.py#L258-L345", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 732674148, "label": "Refactor .csv to be an output renderer - and teach register_output_renderer to stream all rows"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1050#issuecomment-719021514", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1050", "id": 719021514, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTAyMTUxNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T21:05:08Z", "updated_at": "2020-10-29T21:05:08Z", "author_association": "OWNER", "body": "Idea: what if Datasette had a custom SQLite function that could be used to generate URLs to the row-level BLOB download for a value? Then custom SQL query authors could use that function to link to the relevant content.\r\n\r\nThis could be expanded to exposing other `datasette.urls` functionality as well.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729057388, "label": "Switch to .blob render extension for BLOB downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1050#issuecomment-719001701", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1050", "id": 719001701, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTAwMTcwMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T20:26:44Z", "updated_at": "2020-10-29T20:26:44Z", "author_association": "OWNER", "body": "I'll do the rest of the work on this in the pull request #1061.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729057388, "label": "Switch to .blob render extension for BLOB downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1050#issuecomment-718989895", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1050", "id": 718989895, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODk4OTg5NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T20:04:15Z", "updated_at": "2020-10-29T20:04:15Z", "author_association": "OWNER", "body": "I'll use `hashlib.sha256` for these hashes.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729057388, "label": "Switch to .blob render extension for BLOB downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1050#issuecomment-718987852", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1050", "id": 718987852, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODk4Nzg1Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T20:00:32Z", "updated_at": "2020-10-29T20:00:32Z", "author_association": "OWNER", "body": "The reason I like the `?_blob_hash=` solution is that it feels really misleading to provide a link to \"download this binary\" which could conceivably download some other data.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729057388, "label": "Switch to .blob render extension for BLOB downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1050#issuecomment-718980944", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1050", "id": 718980944, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODk4MDk0NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T19:46:19Z", "updated_at": "2020-10-29T19:46:19Z", "author_association": "OWNER", "body": "Had an idea in https://github.com/simonw/datasette/issues/1051#issuecomment-718980659\r\n\r\n> OK, alternative idea. The `.blob` output renderer from #1050 gets to see multiple rows at once.\r\n> \r\n> For an arbitrary SQL query, how about if I link to this?\r\n> \r\n> `/db.blob?sql=...&_blob_column=data&_blob_hash=bc4c24181ed3ce666`\r\n> \r\n> Then the output renderer loops through all of the `data` results that are available to it and, if one of them hashes to that value, serves up that data?\r\n> \r\n> If no matches are found it can show an error message telling you that the link has expired (presumably because the underlying database has changed since the link was generated).\r\n> \r\n> I think this might be the best solution to the problem.\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": 729057388, "label": "Switch to .blob render extension for BLOB downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1051#issuecomment-718980659", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1051", "id": 718980659, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODk4MDY1OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T19:45:42Z", "updated_at": "2020-10-29T19:45:42Z", "author_association": "OWNER", "body": "OK, alternative idea. The `.blob` output renderer from #1050 gets to see multiple rows at once. \r\n\r\nFor an arbitrary SQL query, how about if I link to this?\r\n\r\n`/db.blob?sql=...&_blob_column=data&_blob_hash=bc4c24181ed3ce666`\r\n\r\nThen the output renderer loops through all of the `data` results that are available to it and, if one of them hashes to that value, serves up that data?\r\n\r\nIf no matches are found it can show an error message telling you that the link has expired (presumably because the underlying database has changed since the link was generated).\r\n\r\nI think this might be the best solution to the problem.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729096595, "label": "Better display of binary data on arbitrary query results page"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1053#issuecomment-718976679", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1053", "id": 718976679, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODk3NjY3OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T19:37:57Z", "updated_at": "2020-10-29T19:37:57Z", "author_association": "OWNER", "body": "https://docs.datasette.io/en/latest/writing_plugins.html#designing-urls-for-your-plugin", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729604838, "label": "Document recommendations for plugin authors to design URLs"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1050#issuecomment-718346019", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1050", "id": 718346019, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODM0NjAxOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T04:05:07Z", "updated_at": "2020-10-29T04:05:07Z", "author_association": "OWNER", "body": "Yes, confirmed - this is a bug where if the `BLOB` column contains a `null` you get a nasty exception if you try to download it.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729057388, "label": "Switch to .blob render extension for BLOB downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1050#issuecomment-718342036", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1050", "id": 718342036, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODM0MjAzNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T03:49:57Z", "updated_at": "2020-10-29T03:49:57Z", "author_association": "OWNER", "body": "@thadk from that error it looks like the problem may have been that you had a BLOB column containing a `null` value? If so that's definitely a bug, I'll fix that.", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729057388, "label": "Switch to .blob render extension for BLOB downloads"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1049#issuecomment-718340847", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1049", "id": 718340847, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODM0MDg0Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T03:45:47Z", "updated_at": "2020-10-29T03:48:26Z", "author_association": "OWNER", "body": "[thebe](https://thebelab.readthedocs.io/en/latest/examples/minimal_example.html) is the first time I've seen a library that requires you to set up some global JavaScript configuration before loading the script itself.\r\n\r\nI'm hesitant to add an extra template block just to cover that one case since it's such a rare pattern. But it's important that `thebelab` can be used with Datasette.\r\n\r\nWould this pattern work for you instead?\r\n\r\n```html+jinja\r\n{% block extra_head %}\r\n\r\n\r\n{% endblock %}\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": 729017519, "label": "Add template block prior to extra URL loaders"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1049#issuecomment-718341542", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1049", "id": 718341542, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODM0MTU0Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-29T03:48:12Z", "updated_at": "2020-10-29T03:48:12Z", "author_association": "OWNER", "body": "You could use Datasette's new `{{ urls.static_plugins(...) }}` template option - see https://docs.datasette.io/en/latest/internals.html#internals-datasette-urls - to generate a link to code that was bundled with the plugin:\r\n\r\n```html+jinja\r\n{% block extra_head %}\r\n\r\n\r\n{% endblock %}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 729017519, "label": "Add template block prior to extra URL loaders"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/sqlite-utils/issues/191#issuecomment-718170295", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/191", "id": 718170295, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODE3MDI5NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-28T19:50:16Z", "updated_at": "2020-10-28T19:50:16Z", "author_association": "OWNER", "body": "I think I made a mistake when I designed the initial decorator. I should have had it work like this:\r\n\r\n```python\r\n@db.register_function()\r\ndef reverse_string(s):\r\n return \"\".join(reversed(list(s)))\r\n```\r\nAs this leaves open the option to add new parameters in the future.\r\n\r\nTo avoid breaking backwards compatibility I'll use the hack that detects the argument this time, but in the future I'll try to remember to always design decorators to be called like `@decorator()`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 731740458, "label": "Idea: @db.register_function(deterministic=True)"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/sqlite-utils/issues/191#issuecomment-718168730", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/191", "id": 718168730, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODE2ODczMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-28T19:47:20Z", "updated_at": "2020-10-28T19:47:20Z", "author_association": "OWNER", "body": "https://stackoverflow.com/a/3931903 looks useful:\r\n```python\r\ndef trace(*args):\r\n def _trace(func):\r\n def wrapper(*args, **kwargs):\r\n print enter_string\r\n func(*args, **kwargs)\r\n print exit_string\r\n return wrapper\r\n if len(args) == 1 and callable(args[0]):\r\n # No arguments, this is the decorator\r\n # Set default values for the arguments\r\n enter_string = 'entering'\r\n exit_string = 'exiting'\r\n return _trace(args[0])\r\n else:\r\n # This is just returning the decorator\r\n enter_string, exit_string = args\r\n return _trace\r\n```\r\nCan improve that code with `functools.wraps`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 731740458, "label": "Idea: @db.register_function(deterministic=True)"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1059#issuecomment-718078447", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1059", "id": 718078447, "node_id": "MDEyOklzc3VlQ29tbWVudDcxODA3ODQ0Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-28T17:07:59Z", "updated_at": "2020-10-28T17:08:14Z", "author_association": "OWNER", "body": "> #### 0.6.0 (2020-10-27)\r\n> \r\n> - aiofiles is now tested on ppc64le.\r\n> - Added name and mode properties to async file objects. [#82](https://github.com/Tinche/aiofiles/pull/82)\r\n> - Fixed a DeprecationWarning internally. [#75](https://github.com/Tinche/aiofiles/pull/75)\r\n> - Python 3.9 support and tests.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 731445447, "label": "Update aiofiles requirement from <0.6,>=0.4 to >=0.4,<0.7"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1057#issuecomment-717531272", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1057", "id": 717531272, "node_id": "MDEyOklzc3VlQ29tbWVudDcxNzUzMTI3Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-27T20:51:09Z", "updated_at": "2020-10-27T20:51:09Z", "author_association": "OWNER", "body": "That works!\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": 730797787, "label": "--cors should enable /fixtures.db CORS access"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1058#issuecomment-717527606", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1058", "id": 717527606, "node_id": "MDEyOklzc3VlQ29tbWVudDcxNzUyNzYwNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-27T20:44:06Z", "updated_at": "2020-10-27T20:44:06Z", "author_association": "OWNER", "body": "Example: https://github.com/simonw/datasette/blob/5a1519796037105bc20bcf2f91a76e022926c204/datasette/views/database.py#L26-L32", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 730802994, "label": "Database download should implement cascading permissions"}, "performed_via_github_app": null}