{"html_url": "https://github.com/simonw/datasette/issues/1142#issuecomment-743732440", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1142", "id": 743732440, "node_id": "MDEyOklzc3VlQ29tbWVudDc0MzczMjQ0MA==", "user": {"value": 6622733, "label": "nitinpaultifr"}, "created_at": "2020-12-12T09:56:40Z", "updated_at": "2020-12-12T09:56:40Z", "author_association": "NONE", "body": "'Include all rows' seem like a fairly obvious alternative", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 763361458, "label": "\"Stream all rows\" is not at all obvious"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1112#issuecomment-735279355", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1112", "id": 735279355, "node_id": "MDEyOklzc3VlQ29tbWVudDczNTI3OTM1NQ==", "user": {"value": 50527, "label": "jefftriplett"}, "created_at": "2020-11-28T19:21:09Z", "updated_at": "2020-11-28T19:21:09Z", "author_association": "CONTRIBUTOR", "body": "(Even more annoying is that I see my editor leaked an extra delete space at the end of the line. I'm happy to rebuild this to be less annoying, but you probably don't want the changelog update either way)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 752749485, "label": "Fix --metadata doc usage"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1518#issuecomment-981172801", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1518", "id": 981172801, "node_id": "IC_kwDOBm6k_c46e4JB", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-11-28T23:23:51Z", "updated_at": "2021-11-28T23:23:51Z", "author_association": "OWNER", "body": "(I could experiment with merging the two tables by adding a temporary undocumented `?_sql=` parameter to the in-progress table view that sets an alternative query instead of `select cols from table` - added bonus, this will force me to use introspection against the returned columns rather than mixing in the known columns for the specified table)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1058072543, "label": "Complete refactor of TableView and table.html template"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1779#issuecomment-1214414320", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1779", "id": 1214414320, "node_id": "IC_kwDOBm6k_c5IYn3w", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-08-14T16:54:32Z", "updated_at": "2022-08-14T16:54:32Z", "author_association": "OWNER", "body": "(I deleted my `issue-1779` project using the UI at https://console.cloud.google.com/run?project=datasette-222320)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1334628400, "label": "google cloudrun updated their limits on maxscale based on memory and cpu count"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/349#issuecomment-987349633", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/349", "id": 987349633, "node_id": "IC_kwDOCGYnMM462cKB", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-12-06T23:19:28Z", "updated_at": "2021-12-06T23:19:28Z", "author_association": "OWNER", "body": "(I ended up not needing this here since `.lookup()` already creates a unique index on `_item_id` for you. Still could be a useful feature though.)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1071531082, "label": "A way of creating indexes on newly created tables"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1729#issuecomment-1112717745", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1729", "id": 1112717745, "node_id": "IC_kwDOBm6k_c5CUrmx", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-04-28T22:38:39Z", "updated_at": "2022-04-28T22:39:05Z", "author_association": "OWNER", "body": "(I remain keen on the idea of shipping a plugin that restores the old default API shape to people who have written pre-Datasette-1.0 code against it, but I'll tackle that much later. I really like how jQuery has a culture of doing this.)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1219385669, "label": "Implement ?_extra and new API design for TableView"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/782#issuecomment-782747164", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/782", "id": 782747164, "node_id": "MDEyOklzc3VlQ29tbWVudDc4Mjc0NzE2NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-02-20T20:47:16Z", "updated_at": "2021-02-20T20:47:16Z", "author_association": "OWNER", "body": "(I started a thread on Twitter about this: https://twitter.com/simonw/status/1363220355318358016)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 627794879, "label": "Redesign default .json format"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/782#issuecomment-691526489", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/782", "id": 691526489, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTUyNjQ4OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-12T18:17:16Z", "updated_at": "2020-09-12T18:17:16Z", "author_association": "OWNER", "body": "(I think I may have been over-thinking the details of this is for a couple of years now.)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 627794879, "label": "Redesign default .json format"}, "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-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/1439#issuecomment-1045027067", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1439", "id": 1045027067, "node_id": "IC_kwDOBm6k_c4-Sdj7", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-02-18T19:03:26Z", "updated_at": "2022-02-18T19:03:26Z", "author_association": "OWNER", "body": "(If I make this change it may break some existing Datasette installations when they upgrade - I could try and build a plugin for them which triggers on 404s and checks to see if the old format would return a 200 response, then returns that.)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 973139047, "label": "Rethink how .ext formats (v.s. ?_format=) works before 1.0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1384#issuecomment-869075395", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1384", "id": 869075395, "node_id": "MDEyOklzc3VlQ29tbWVudDg2OTA3NTM5NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-06-26T23:54:21Z", "updated_at": "2021-06-26T23:59:21Z", "author_association": "OWNER", "body": "(It may well be that implementing #1168 involves a switch to async metadata)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 930807135, "label": "Plugin hook for dynamic metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1513#issuecomment-970770304", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1513", "id": 970770304, "node_id": "IC_kwDOBm6k_c453MeA", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-11-16T22:55:19Z", "updated_at": "2021-11-16T22:55:19Z", "author_association": "OWNER", "body": "(One thing I really like about this pattern is that it should work exactly the same when used to facet the results of arbitrary SQL queries as it does when faceting results from the table page.)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1055469073, "label": "Research: CTEs and union all to calculate facets AND query at the same time"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1356#issuecomment-853895159", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1356", "id": 853895159, "node_id": "MDEyOklzc3VlQ29tbWVudDg1Mzg5NTE1OQ==", "user": {"value": 25778, "label": "eyeseast"}, "created_at": "2021-06-03T14:03:59Z", "updated_at": "2021-06-03T14:03:59Z", "author_association": "CONTRIBUTOR", "body": "(Putting thoughts here to keep the conversation in one place.)\r\n\r\nI think using datasette for this use-case is the right approach. I usually have both datasette and sqlite-utils installed in the same project, and that's where I'm trying out queries, so it probably makes the most sense to have datasette also manage the output (and maybe the input, too).\r\n\r\nIt seems like both `--get` and `--query` could work better as subcommands, rather than options, if you're looking at building out a full CLI experience in datasette. It would give a cleaner separation in what you're trying to do and let each have its own dedicated options. So something like this:\r\n\r\n```sh\r\n# run an arbitrary query\r\ndatasette query covid.db \"select * from ny_times_us_counties limit 1\" --format yaml\r\n\r\n# run a canned query\r\ndatasette get covid.db some-canned-query --format yaml\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": 910092577, "label": "Research: syntactic sugar for using --get with SQL queries, maybe \"datasette query\""}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1344#issuecomment-849788412", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1344", "id": 849788412, "node_id": "MDEyOklzc3VlQ29tbWVudDg0OTc4ODQxMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-05-27T16:53:28Z", "updated_at": "2021-05-27T16:53:28Z", "author_association": "OWNER", "body": "(Should also update https://docs.datasette.io/en/stable/contributing.html#release-process with notes on how this works)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 903986178, "label": "Test Datasette Docker images built for different architectures"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/364#issuecomment-1008151884", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/364", "id": 1008151884, "node_id": "IC_kwDOCGYnMM48Fy1M", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-01-08T20:59:21Z", "updated_at": "2022-01-08T20:59:21Z", "author_association": "OWNER", "body": "(That Heroku example doesn't record the timestamp, which limits its usefulness)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1095570074, "label": "`--batch-size 1` doesn't seem to commit for every item"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/356#issuecomment-997508728", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/356", "id": 997508728, "node_id": "IC_kwDOCGYnMM47dMZ4", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-12-20T01:14:43Z", "updated_at": "2021-12-20T01:14:43Z", "author_association": "OWNER", "body": "(This makes me want `--extract` from #352 even more.)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1077431957, "label": "`sqlite-utils insert --convert` option"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-347735724", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 347735724, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzczNTcyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-29T02:47:14Z", "updated_at": "2017-11-29T02:47:14Z", "author_association": "OWNER", "body": "(This only addresses point 2 in your issue description - points 1 and point 3 are still to come)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1249#issuecomment-804406675", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1249", "id": 804406675, "node_id": "MDEyOklzc3VlQ29tbWVudDgwNDQwNjY3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-22T21:26:27Z", "updated_at": "2021-03-22T21:26:27Z", "author_association": "OWNER", "body": "(Without the `apt-get update ...` SpatiaLite line it's 125MB)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 824064069, "label": "Updated Dockerfile with SpatiaLite version 5.0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/320#issuecomment-407269243", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/320", "id": 407269243, "node_id": "MDEyOklzc3VlQ29tbWVudDQwNzI2OTI0Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-07-24T03:30:32Z", "updated_at": "2018-07-24T03:30:32Z", "author_association": "OWNER", "body": "* No primary key => no \"object\" option: https://latest.datasette.io/fixtures-dcc1dbf/no_primary_key\r\n* Has a primary key => show \"object\" option: https://latest.datasette.io/fixtures-dcc1dbf/complex_foreign_keys\r\n* Has a next page => has \"stream all rows\" option: https://latest.datasette.io/fixtures-dcc1dbf/no_primary_key\r\n* Has foreign key references = show default-checked \"expand labels\" option: https://latest.datasette.io/fixtures-dcc1dbf/complex_foreign_keys\r\n* Does not have a next page => do not show \"stream all rows\" option: https://latest.datasette.io/fixtures-dcc1dbf/complex_foreign_keys\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 334169932, "label": "Need unit tests covering the different states for the advanced export box"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/issues/19#issuecomment-602782437", "issue_url": "https://api.github.com/repos/dogsheep/github-to-sqlite/issues/19", "id": 602782437, "node_id": "MDEyOklzc3VlQ29tbWVudDYwMjc4MjQzNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-03-23T18:36:12Z", "updated_at": "2020-03-23T18:51:23Z", "author_association": "MEMBER", "body": "* `commits`: `message`\r\n* `issue_comments`: `body`\r\n* `issues`: `title`, `body`\r\n* `labels`: `name`, `description`\r\n* `licenses`: `name`\r\n* `milestones`: `title`, `description`\r\n* `releases`: `name`, `body`\r\n* `repos`: `name`, `description`\r\n* `users`: `login`, `name` (maybe `company`, `bio`)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 585850715, "label": "Enable full-text search for more stuff (like commits, issues and issue_comments)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/518#issuecomment-504782618", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/518", "id": 504782618, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNDc4MjYxOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-23T20:05:44Z", "updated_at": "2019-06-23T20:05:59Z", "author_association": "OWNER", "body": "**Replacement for @app.listener(\"before_server_start\")** - this is what the [ASGI lifespan protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) is for.\r\n\r\nI know Uvicorn supports this because it keeps saying `ASGI 'lifespan' protocol appears unsupported` on the console.\r\n\r\nI think the solution here will be to introduce another ASGI wrapper class similar to `AsgiTracer`. I'll model this on the example in the ASGI lifespan spec.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 459587155, "label": "Port Datasette from Sanic to ASGI + Uvicorn"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/576#issuecomment-636332183", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/576", "id": 636332183, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNjMzMjE4Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-30T13:37:51Z", "updated_at": "2020-05-30T13:38:35Z", "author_association": "OWNER", "body": "**\\_\\_init\\_\\_**(self, files, immutables=None, cache_headers=True, cors=False, inspect_data=None, metadata=None, sqlite_extensions=None, template_dir=None, plugins_dir=None, static_mounts=None, memory=False, config=None, version_note=None, config_dir=None)\r\n\r\n`Initialize self. See help(type(self)) for accurate signature.`\r\n\r\n**absolute_url**(self, request, path)\r\n\r\n**add_database**(self, name, db)\r\n\r\n**app**(self)\r\n\r\n`Returns an ASGI app function that serves the whole of [Datasette](http://localhost:8066/datasette.app.html#Datasette)`\r\n\r\n**app_css_hash**(self)\r\n\r\n**config**(self, key)\r\n\r\n**config_dict**(self)\r\n\r\n**connected_databases**(self)\r\n\r\n**execute**(self, db_name, sql, params=None, truncate=False, custom_time_limit=None, page_size=None, log_sql_errors=True)\r\n\r\n**expand_foreign_keys**(self, database, table, column, values)\r\n\r\n`Returns dict mapping (column, value) -> label`\r\n\r\n**get_canned_queries**(self, database_name)\r\n\r\n**get_canned_query**(self, database_name, query_name)\r\n\r\n**metadata**(self, key=None, database=None, table=None, fallback=True)\r\n\r\n`Looks up metadata, cascading backwards from specified level.\\\r\nReturns None if metadata value is not found.`\r\n\r\n**plugin_config**(self, plugin_name, database=None, table=None, fallback=True)\r\n\r\n`Return config for plugin, falling back from specified database/table`\r\n\r\n**plugins**(self, show_all=False)\r\n\r\n**prepare_connection**(self, conn, database)\r\n\r\n**register_custom_units**(self)\r\n\r\n`Register any custom units defined in the metadata.json with Pint`\r\n\r\n**register_renderers**(self)\r\n\r\n`Register output renderers which output data in custom formats.`\r\n\r\n**remove_database**(self, name)\r\n\r\n**render_template**(self, templates, context=None, request=None, view_name=None)\r\n\r\n**table_metadata**(self, database, table)\r\n\r\n`Fetch table-specific metadata.`\r\n\r\n**threads**(self)\r\n\r\n**update_with_inherited_metadata**(self, metadata)\r\n\r\n**versions**(self)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 497170355, "label": "Documented internals API for use in plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1091#issuecomment-758280611", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1091", "id": 758280611, "node_id": "MDEyOklzc3VlQ29tbWVudDc1ODI4MDYxMQ==", "user": {"value": 6739646, "label": "tballison"}, "created_at": "2021-01-11T23:06:10Z", "updated_at": "2021-01-11T23:06:10Z", "author_association": "NONE", "body": "+1\r\n\r\nYep! Fixes it. If I navigate to https://corpora.tika.apache.org/datasette, I get a 404 (database not found: datasette), but if I navigate to https://corpora.tika.apache.org/datasette/file_profiles/, everything WORKS!\r\n\r\nThank you!", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 1, \"eyes\": 0}", "issue": {"value": 742011049, "label": ".json and .csv exports fail to apply base_url"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/526#issuecomment-810943882", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/526", "id": 810943882, "node_id": "MDEyOklzc3VlQ29tbWVudDgxMDk0Mzg4Mg==", "user": {"value": 701, "label": "jokull"}, "created_at": "2021-03-31T10:03:55Z", "updated_at": "2021-03-31T10:03:55Z", "author_association": "NONE", "body": "+1 on using nested queries to achieve this! Would be great as streaming CSV is an amazing feature.\r\n\r\nSome UX/DX details:\r\n\r\nI was expecting it to work to simply add `&_stream=on` to custom SQL queries because the docs say \r\n\r\n> Any Datasette table, view or **custom SQL query** can be exported as CSV.\r\n\r\nAfter a bit of testing back and forth I realized streaming only works for full tables. \r\n\r\nWould love this feature because I'm using `pandas.read_csv` to paint graphs from custom queries and the graphs are cut off because of the 1000 row limit. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 459882902, "label": "Stream all results for arbitrary SQL and canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/pull/31#issuecomment-1656696679", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/31", "id": 1656696679, "node_id": "IC_kwDOD079W85ivy9n", "user": {"value": 319473, "label": "coldclimate"}, "created_at": "2023-07-29T10:10:29Z", "updated_at": "2023-07-29T10:10:29Z", "author_association": "NONE", "body": "+1 to getting this merged down.\r\n\r\nFor future googlers, I installed by...\r\n```\r\ngit clone git@github.com:RhetTbull/dogsheep-photos.git\r\ncd dogsheep-photos\r\ngit checkout update_for_bigsur\r\npython setup.py install\r\n```", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 771511344, "label": "Update for Big Sur"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/147#issuecomment-683528149", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/147", "id": 683528149, "node_id": "MDEyOklzc3VlQ29tbWVudDY4MzUyODE0OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-08-31T03:17:26Z", "updated_at": "2020-08-31T03:17:26Z", "author_association": "OWNER", "body": "+1 to making this something that users can customize. An optional argument to the `Database` constructor would be a neat way to do this.\r\n\r\nI think there's a terrifying way that we could find this value... we could perform a binary search for it! Open up a memory connection and try running different bulk inserts against it and catch the exceptions - then adjust and try again.\r\n\r\nMy hunch is that we could perform just 2 or 3 probes (maybe against carefully selected values) to find the highest value that works. If this process took less than a few ms to run I'd be happy to do it automatically when the class is instantiated (and let users disable that automatic proving by setting a value using the constructor argument).", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 688670158, "label": "SQLITE_MAX_VARS maybe hard-coded too low"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/2035#issuecomment-1460808028", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2035", "id": 1460808028, "node_id": "IC_kwDOBm6k_c5XEilc", "user": {"value": 1176293, "label": "ar-jan"}, "created_at": "2023-03-08T20:14:47Z", "updated_at": "2023-03-08T20:14:47Z", "author_association": "NONE", "body": "+1, I have been wishing for this feature (also for use with template-sql). It was requested before here #1304.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1615692818, "label": "Potential feature: special support for `?a=1&a=2` on the query page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1711#issuecomment-1095672127", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1711", "id": 1095672127, "node_id": "IC_kwDOBm6k_c5BTqE_", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-04-11T23:00:58Z", "updated_at": "2022-04-11T23:00:58Z", "author_association": "OWNER", "body": "- #1510", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1200650491, "label": "Template context powered entirely by the JSON API format"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1709#issuecomment-1095671940", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1709", "id": 1095671940, "node_id": "IC_kwDOBm6k_c5BTqCE", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-04-11T23:00:39Z", "updated_at": "2022-04-11T23:01:41Z", "author_association": "OWNER", "body": "- #262\r\n- #782 \r\n- #1509", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1200649502, "label": "Redesigned JSON API with ?_extra= parameters"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/476#issuecomment-1229320114", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/476", "id": 1229320114, "node_id": "IC_kwDOCGYnMM5JRe-y", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-08-27T23:26:48Z", "updated_at": "2022-08-27T23:26:48Z", "author_association": "OWNER", "body": "- #458 - the `register_function(name=...)` argument\r\n- New tutorial: [Cleaning data with sqlite-utils and Datasette](https://datasette.io/tutorials/clean-data) provides a tutorial introduction (and accompanying ten minute video) about using this tool.\r\n- New Discord community, https://discord.gg/Ass7bCAMDw\r\n- #469 `sqlite-utils rows --order` option\r\n- #471 `sqlite-utils query --functions` option\r\n- #472 Improved code compilation pattern\r\n- #473 Support entrypoints for `--load-extension`\r\n- #455\r\n- #475 `table.default_values` property\r\n- #467", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1353196970, "label": "Release notes for 3.29"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/2135#issuecomment-1671753753", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2135", "id": 1671753753, "node_id": "IC_kwDOBm6k_c5jpPAZ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-09T16:26:17Z", "updated_at": "2023-08-09T16:28:19Z", "author_association": "OWNER", "body": "- Dropped support for Python 3.7\r\n- New `Justfile`\r\n- #1970\r\n- `datasette.render_template()` now accepts a `Context` subclass as an alternative to a dictionary\r\n- #2106\r\n- #2007\r\n- https://github.com/simonw/datasette/issues/2130\r\n- https://github.com/simonw/datasette/issues/2079\r\n- https://github.com/simonw/datasette/issues/1153", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1843600087, "label": "Release notes for 1.0a3"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/505#issuecomment-1291203911", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/505", "id": 1291203911, "node_id": "IC_kwDOCGYnMM5M9jVH", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-10-25T22:21:02Z", "updated_at": "2022-10-25T22:21:02Z", "author_association": "OWNER", "body": "- Now tested against Python 3.11. ([#502](https://github.com/simonw/sqlite-utils/issues/502))\r\n- New `table.search_sql(include_rank=True)` option, which adds a `rank` column to the generated SQL. Thanks, Jacob Chapman. ([#480](https://github.com/simonw/sqlite-utils/pull/480))\r\n- Progress bars now display for newline-delimited JSON files using the `--nl` option. Thanks, Mischa Untaga. ([#485](https://github.com/simonw/sqlite-utils/issues/485))\r\n- New `db.close()` method. ([#504](https://github.com/simonw/sqlite-utils/issues/504))\r\n- Conversion functions passed to [table.convert(...)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-convert) can now return lists or dictionaries, which will be inserted into the database as JSON strings. ([#495](https://github.com/simonw/sqlite-utils/issues/495))\r\n- `sqlite-utils install` and `sqlite-utils uninstall` commands for installing packages into the same virtual environment as `sqlite-utils`, [described here](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-install). ([#483](https://github.com/simonw/sqlite-utils/issues/483))\r\n- New [sqlite_utils.utils.flatten()](https://sqlite-utils.datasette.io/en/stable/reference.html#reference-utils-flatten) utility function. ([#500](https://github.com/simonw/sqlite-utils/issues/500))\r\n- Documentation on [using Just](https://sqlite-utils.datasette.io/en/stable/contributing.html#contributing-just) to run tests, linters and build documentation.\r\n- Documentation now covers the [Release process](https://sqlite-utils.datasette.io/en/stable/contributing.html#release-process) for this package.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1423182778, "label": "Release sqlite-utils 3.30"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1595#issuecomment-1012664607", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1595", "id": 1012664607, "node_id": "IC_kwDOBm6k_c48XAkf", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-01-14T01:22:58Z", "updated_at": "2022-01-14T01:22:58Z", "author_association": "OWNER", "body": "- Upgraded Pluggy dependency to 1.0. #1575\r\n- Now using [Plausible](https://plausible.io/) analytics for the Datasette documentation.\r\n- The `db.execute_write()` internals method now defaults to blocking until the write operation has completed. Previously it defaulted to queuing the write and then continuing to run code while the write was in the queue. #1579\r\n- `explain query plan` is now allowed with varying amounts of white space in the query. #1588\r\n- New CLI reference page showing the output of `--help` for each of the `datasette` sub-commands. This lead to several small improvements to the help copy. #1594\r\n- Fixed bug where columns with a underscore prefix could result in unnecessary hidden form fields. #1527", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1102484126, "label": "Release notes for 0.60"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343781030", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343781030, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4MTAzMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T00:21:05Z", "updated_at": "2017-11-13T02:09:32Z", "author_association": "OWNER", "body": "- [x] Have `now domain add -e datasettes.com` run without errors (hopefully just a matter of waiting for the DNS to update)\r\n- [x] Alias an example dataset hosted on Now on a datasettes.com subdomain\r\n- [x] Confirm that HTTP caching and HTTP/2 redirect pushing works as expected - this may require another page rule", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1947#issuecomment-1347768549", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1947", "id": 1347768549, "node_id": "IC_kwDOBm6k_c5QVVDl", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-12-13T05:25:56Z", "updated_at": "2022-12-13T22:29:12Z", "author_association": "OWNER", "body": "- [x] I should add a `--database` example to that help text.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1493390939, "label": "UI to create reduced scope tokens from the `/-/create-token` page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343780671", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343780671, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4MDY3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T00:15:21Z", "updated_at": "2017-11-13T00:17:37Z", "author_association": "OWNER", "body": "- [x] Redirect https://datasettes.com/ and https://www.datasettes.com/ to https://github.com/simonw/datasette", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/issues/8#issuecomment-530417631", "issue_url": "https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/8", "id": 530417631, "node_id": "MDEyOklzc3VlQ29tbWVudDUzMDQxNzYzMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-09-11T14:52:44Z", "updated_at": "2019-09-14T19:09:22Z", "author_association": "MEMBER", "body": "- [x] This needs documentation.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 490803176, "label": "--sql and --attach options for feeding commands from SQL queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1424#issuecomment-894864616", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1424", "id": 894864616, "node_id": "IC_kwDOBm6k_c41Vozo", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-08-08T22:26:08Z", "updated_at": "2021-08-08T22:26:08Z", "author_association": "OWNER", "body": "- `datasette.database.QueryInterrupted` for queries that were interrupted\r\n- `sqlite3.OperationalError`\r\n- `sqlite3.DatabaseError` and more", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 963527045, "label": "Document exceptions that can be raised by db.execute() and friends"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1518#issuecomment-993794247", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1518", "id": 993794247, "node_id": "IC_kwDOBm6k_c47PBjH", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-12-14T17:09:40Z", "updated_at": "2021-12-14T17:09:40Z", "author_association": "OWNER", "body": "- `table_actions` should be an extra.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1058072543, "label": "Complete refactor of TableView and table.html template"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1439#issuecomment-1045086033", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1439", "id": 1045086033, "node_id": "IC_kwDOBm6k_c4-Sr9R", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-02-18T19:47:43Z", "updated_at": "2022-02-18T19:51:11Z", "author_association": "OWNER", "body": "- https://datasette.io/-/asgi-scope/db/./db./table-..csv..csv\r\n- https://til.simonwillison.net/-/asgi-scope/db/./db./table-..csv..csv\r\n\r\nDo both of those survive the round-trip to populate `raw_path` correctly?\r\n\r\nNo! In both cases the `/./` bit goes missing.\r\n\r\nIt looks like this might even be a client issue - `curl` shows me this:\r\n\r\n```\r\n~ % curl -vv -i 'https://datasette.io/-/asgi-scope/db/./db./table-..csv..csv'\r\n* Trying 216.239.32.21:443...\r\n* Connected to datasette.io (216.239.32.21) port 443 (#0)\r\n* ALPN, offering http/1.1\r\n* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\r\n* Server certificate: datasette.io\r\n* Server certificate: R3\r\n* Server certificate: ISRG Root X1\r\n> GET /-/asgi-scope/db/db./table-..csv..csv HTTP/1.1\r\n```\r\nSo `curl` decided to turn `/-/asgi-scope/db/./db./table` into `/-/asgi-scope/db/db./table` before even sending the request.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 973139047, "label": "Rethink how .ext formats (v.s. ?_format=) works before 1.0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1821#issuecomment-1258692555", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1821", "id": 1258692555, "node_id": "IC_kwDOBm6k_c5LBh_L", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-09-26T22:06:39Z", "updated_at": "2022-09-26T22:06:39Z", "author_association": "OWNER", "body": "- https://github.com/simonw/datasette/actions/runs/3131344150\r\n- https://github.com/simonw/datasette/releases/tag/0.63a0\r\n- https://pypi.org/project/datasette/0.63a0/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1386734383, "label": "Release Datasette 0.63a0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/186#issuecomment-374872202", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/186", "id": 374872202, "node_id": "MDEyOklzc3VlQ29tbWVudDM3NDg3MjIwMg==", "user": {"value": 47107, "label": "stefanocudini"}, "created_at": "2018-03-21T09:07:22Z", "updated_at": "2018-03-21T09:07:22Z", "author_association": "NONE", "body": "--debug is perfect tnk", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 306811513, "label": "proposal new option to disable user agents cache"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/923#issuecomment-672287754", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/923", "id": 672287754, "node_id": "MDEyOklzc3VlQ29tbWVudDY3MjI4Nzc1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-08-11T21:25:33Z", "updated_at": "2020-08-11T21:25:33Z", "author_association": "OWNER", "body": ".. and confirm if `brew tap ...` is even needed if you run `brew install simonw/datasette/datasette`", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 677037043, "label": "Add homebrew installation to documentation"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-342030075", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 342030075, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MjAzMDA3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-06T02:25:48Z", "updated_at": "2017-11-06T02:25:48Z", "author_association": "OWNER", "body": "... I tried that, I don't like it. I'm going to bring back \"directory serving\" by allowing you to pass a directory as an argument to `datasite` (including `datasite .`). I may even make `.` the default if you don't provide anything at all.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1153#issuecomment-805042880", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1153", "id": 805042880, "node_id": "MDEyOklzc3VlQ29tbWVudDgwNTA0Mjg4MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-23T16:24:32Z", "updated_at": "2021-03-23T16:24:32Z", "author_association": "OWNER", "body": "... actually I think I would do that conversion in Python. The client-side YAML parsers all look a little bit heavy to me in terms of additional page weight.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 771202454, "label": "Use YAML examples in documentation by default, not JSON"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/785#issuecomment-636538298", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/785", "id": 636538298, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNjUzODI5OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-05-31T22:14:43Z", "updated_at": "2020-05-31T22:15:01Z", "author_association": "OWNER", "body": "... actually no I'll do it using a CLI option that can also be in an environment variable:\r\n\r\nhttps://click.palletsprojects.com/en/7.x/options/#values-from-environment-variables\r\n\r\n```python\r\n@click.command()\r\n@click.option('--secret', envvar='DATASETTE_SECRET')\r\ndef greet(secret):\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": 628025100, "label": "Datasette secret mechanism - initially for signed cookies"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1552#issuecomment-996077053", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1552", "id": 996077053, "node_id": "IC_kwDOBm6k_c47Xu39", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-12-16T18:36:41Z", "updated_at": "2021-12-16T18:36:41Z", "author_association": "OWNER", "body": "... actually no, I WILL document this, because not documenting this is what got us to this point in the first place!", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 1, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1078702875, "label": "Allow to set `facets_array` in metadata (like current `facets`)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/983#issuecomment-766536076", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/983", "id": 766536076, "node_id": "MDEyOklzc3VlQ29tbWVudDc2NjUzNjA3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-01-25T04:43:53Z", "updated_at": "2021-01-25T04:43:53Z", "author_association": "OWNER", "body": "... actually not going to include this in 0.54, I need to write a couple of plugins myself using it before I even make it available in preview.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 712260429, "label": "JavaScript plugin hooks mechanism similar to pluggy"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/674#issuecomment-586623462", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/674", "id": 586623462, "node_id": "MDEyOklzc3VlQ29tbWVudDU4NjYyMzQ2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-15T17:36:53Z", "updated_at": "2020-03-26T17:19:23Z", "author_association": "OWNER", "body": "... actually we don't need to do that, we have a mechanism for that already:\r\n\r\nhttps://github.com/simonw/datasette/blob/f1442a8151f66ceef6517b6d3d045e2ec1d0f0ec/tests/build_small_spatialite_db.py", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 565552217, "label": "Rethink how sanity checks work"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1852#issuecomment-1289774183", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1852", "id": 1289774183, "node_id": "IC_kwDOBm6k_c5M4GRn", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-10-24T23:25:52Z", "updated_at": "2022-10-24T23:25:52Z", "author_association": "OWNER", "body": "... also, maybe there should be a UI (perhaps on that page) for resetting the Datasette secret? Useful for emergency invalidation of all tokens.\r\n\r\nNo, I'm not going to build that unless someone asks for it. Restarting the server with a fresh secret should be easy enough.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1421552095, "label": "Default API token authentication mechanism"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/514#issuecomment-504662987", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/514", "id": 504662987, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNDY2Mjk4Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-22T12:46:39Z", "updated_at": "2019-06-22T12:46:39Z", "author_association": "OWNER", "body": "... and @russss also suggested systemd 21 seconds before I posted that!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 459397625, "label": "Documentation with recommendations on running Datasette in production without using Docker"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/808#issuecomment-640157216", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/808", "id": 640157216, "node_id": "MDEyOklzc3VlQ29tbWVudDY0MDE1NzIxNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-06-07T04:58:40Z", "updated_at": "2020-06-07T04:58:40Z", "author_association": "OWNER", "body": "... and I want a unit test which confirms that all permissions are documented.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 632918799, "label": "Permission check for every view in Datasette (plus docs)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1838#issuecomment-1271803298", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1838", "id": 1271803298, "node_id": "IC_kwDOBm6k_c5Lzi2i", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-10-07T16:28:41Z", "updated_at": "2022-10-07T16:28:41Z", "author_association": "OWNER", "body": "... and here's @ocdtrekkie's plugin! https://github.com/ocdtrekkie/datasette-external-links-new-tabs", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1400494162, "label": "Open Datasette link in new tab"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1955#issuecomment-1356610089", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1955", "id": 1356610089, "node_id": "IC_kwDOBm6k_c5Q3Dop", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-12-18T01:12:39Z", "updated_at": "2022-12-18T01:12:39Z", "author_association": "OWNER", "body": "... and it turns out those tests saved me. Because I forgot to check if `datasette` would actually start a server correctly!\r\n\r\n```\r\n % datasette fixtures.db -p 8852\r\nINFO: Started server process [3538]\r\nINFO: Waiting for application startup.\r\nERROR: Exception in 'lifespan' protocol\r\nTraceback (most recent call last):\r\n File \"/Users/simon/.local/share/virtualenvs/datasette-AWNrQs95/lib/python3.10/site-packages/uvicorn/lifespan/on.py\", line 86, in main\r\n await app(scope, self.receive, self.send)\r\n File \"/Users/simon/.local/share/virtualenvs/datasette-AWNrQs95/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py\", line 78, in __call__\r\n return await self.app(scope, receive, send)\r\n File \"/Users/simon/Dropbox/Development/datasette/datasette/utils/asgi.py\", line 437, in __call__\r\n return await self.asgi(scope, receive, send)\r\n File \"/Users/simon/.local/share/virtualenvs/datasette-AWNrQs95/lib/python3.10/site-packages/asgi_csrf.py\", line 39, in app_wrapped_with_csrf\r\n await app(scope, receive, send)\r\n File \"/Users/simon/Dropbox/Development/datasette/datasette/app.py\", line 1457, in __call__\r\n path = scope[\"path\"]\r\nKeyError: 'path'\r\nERROR: Application startup failed. Exiting.\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1496652622, "label": "invoke_startup() is not run in some conditions, e.g. gunicorn/uvicorn workers, breaking lots of things"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/705#issuecomment-603600553", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/705", "id": 603600553, "node_id": "MDEyOklzc3VlQ29tbWVudDYwMzYwMDU1Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-03-25T02:11:56Z", "updated_at": "2020-03-25T02:12:09Z", "author_association": "OWNER", "body": "... and set up the CNAME record:\r\n\r\n $ now dns add datasette.io latest CNAME ghs.googlehosted.com.\r\n\r\nGot an error:\r\n\r\n > Error! A conflicting record exists \"rec_e4c36ae94cf0a2b7b1781329\".\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 585626199, "label": "latest.datasette.io is no longer updating"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1268#issuecomment-803774518", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1268", "id": 803774518, "node_id": "MDEyOklzc3VlQ29tbWVudDgwMzc3NDUxOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-22T05:34:57Z", "updated_at": "2021-03-22T05:34:57Z", "author_association": "OWNER", "body": "... and sure enough, adding this code fixed the problem:\r\n```diff\r\ndiff --git a/datasette/database.py b/datasette/database.py\r\nindex 3579cce..b466b12 100644\r\n--- a/datasette/database.py\r\n+++ b/datasette/database.py\r\n@@ -224,6 +226,9 @@ class Database:\r\n # Try to get counts for each table, $limit timeout for each count\r\n counts = {}\r\n for table in await self.table_names():\r\n+ if table == \"SpatialIndex\":\r\n+ counts[table] = 0\r\n+ continue\r\n try:\r\n table_count = (\r\n await self.execute(\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 837308703, "label": "Figure out why SpatiaLite 5.0 hangs the database page on Linux"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1518#issuecomment-973700549", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1518", "id": 973700549, "node_id": "IC_kwDOBm6k_c46CX3F", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-11-19T03:31:20Z", "updated_at": "2021-11-19T03:31:26Z", "author_association": "OWNER", "body": "... and while I'm doing all of this I can rewrite the templates to not use those cheating magical functions AND document the template context at the same time, refs:\r\n- #1510.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1058072543, "label": "Complete refactor of TableView and table.html template"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1955#issuecomment-1356640463", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1955", "id": 1356640463, "node_id": "IC_kwDOBm6k_c5Q3LDP", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-12-18T02:45:18Z", "updated_at": "2022-12-18T02:45:18Z", "author_association": "OWNER", "body": "... and with this change, the following now works correctly:\r\n\r\n```\r\n% datasette install datasette-gunicorn\r\n% datasette gunicorn fixtures.db -p 8855\r\n[2022-12-17 18:44:29 -0800] [7651] [INFO] Starting gunicorn 20.1.0\r\n[2022-12-17 18:44:29 -0800] [7651] [INFO] Listening at: http://127.0.0.1:8855 (7651)\r\n[2022-12-17 18:44:29 -0800] [7651] [INFO] Using worker: uvicorn.workers.UvicornWorker\r\n[2022-12-17 18:44:29 -0800] [7653] [INFO] Booting worker with pid: 7653\r\n[2022-12-17 18:44:29 -0800] [7653] [INFO] Started server process [7653]\r\n[2022-12-17 18:44:29 -0800] [7653] [INFO] Waiting for application startup.\r\n[2022-12-17 18:44:29 -0800] [7653] [INFO] Application startup complete.\r\n```\r\nSo this issue is now fixed!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1496652622, "label": "invoke_startup() is not run in some conditions, e.g. gunicorn/uvicorn workers, breaking lots of things"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/147#issuecomment-779446652", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/147", "id": 779446652, "node_id": "MDEyOklzc3VlQ29tbWVudDc3OTQ0NjY1Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-02-15T21:04:19Z", "updated_at": "2021-02-15T21:04:19Z", "author_association": "OWNER", "body": "... but it looks like `batch_size` is hard-coded to 100, rather than `None` - which means it's not being calculated using that value:\r\n\r\nhttps://github.com/simonw/sqlite-utils/blob/1f49f32814a942fa076cfe5f504d1621188097ed/sqlite_utils/db.py#L704\r\n\r\nAnd\r\n\r\nhttps://github.com/simonw/sqlite-utils/blob/1f49f32814a942fa076cfe5f504d1621188097ed/sqlite_utils/db.py#L1877", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 688670158, "label": "SQLITE_MAX_VARS maybe hard-coded too low"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/evernote-to-sqlite/issues/5#issuecomment-706776808", "issue_url": "https://api.github.com/repos/dogsheep/evernote-to-sqlite/issues/5", "id": 706776808, "node_id": "MDEyOklzc3VlQ29tbWVudDcwNjc3NjgwOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-11T22:23:14Z", "updated_at": "2020-10-11T22:23:14Z", "author_association": "MEMBER", "body": "... but it's still important to be able to get to the rendered note directly from the browse notes `/evernote/notes` page. Maybe use a simple `render_cell()` hook that just knows how to generate the link to the rendered note page?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 718938889, "label": "Figure out how to display images from tags inline in Datasette"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/467#issuecomment-1224283367", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/467", "id": 1224283367, "node_id": "IC_kwDOCGYnMM5I-RTn", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-08-23T16:05:55Z", "updated_at": "2022-08-23T16:05:55Z", "author_association": "OWNER", "body": "... but that's what the `table.transform(...)` method does already!\r\n\r\nSo maybe this is actually a `transform=True` parameter to `create()` that triggers `table.transform(...)` if necessary.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1348169997, "label": "Mechanism for ensuring a table has all the columns"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1913#issuecomment-1331204360", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1913", "id": 1331204360, "node_id": "IC_kwDOBm6k_c5PWJEI", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-11-29T19:47:40Z", "updated_at": "2022-11-29T19:47:40Z", "author_association": "OWNER", "body": "... but the last step of the deploy failed, when it was meant to push to PyPI!\r\n```\r\nUploading distributions to https://upload.pypi.org/legacy/\r\nTraceback (most recent call last):\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/bin/twine\", line 8, in \r\n sys.exit(main())\r\n ^^^^^^\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/__main__.py\", line 33, in main\r\n error = cli.dispatch(sys.argv[1:])\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/cli.py\", line 123, in dispatch\r\n return main(args.args)\r\n ^^^^^^^^^^^^^^^\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/commands/upload.py\", line 198, in main\r\n return upload(upload_settings, parsed_args.dists)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/commands/upload.py\", line 123, in upload\r\n packages_to_upload = [\r\n ^\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/commands/upload.py\", line 124, in \r\n _make_package(filename, signatures, upload_settings) for filename in uploads\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/commands/upload.py\", line 77, in _make_package\r\n package = package_file.PackageFile.from_filename(filename, upload_settings.comment)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/package.py\", line 96, in from_filename\r\n meta = DIST_TYPES[dtype](filename)\r\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/wheel.py\", line 42, in __init__\r\n self.extractMetadata()\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/pkginfo/distribution.py\", line 121, in extractMetadata\r\n self.parse(data)\r\n File \"/opt/hostedtoolcache/Python/3.11.0/x64/lib/python3.11/site-packages/twine/wheel.py\", line 89, in parse\r\n fp = io.StringIO(distribution.must_decode(data))\r\n ^^^^^^^^^^^^^^^^^^^^^^^^\r\nAttributeError: module 'pkginfo.distribution' has no attribute 'must_decode'. Did you mean: '_must_decode'?\r\nError: Process completed with exit code 1.\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1468603401, "label": "Release Datasette 1.0a0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/672#issuecomment-586109784", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/672", "id": 586109784, "node_id": "MDEyOklzc3VlQ29tbWVudDU4NjEwOTc4NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-14T05:53:50Z", "updated_at": "2020-02-14T05:54:21Z", "author_association": "OWNER", "body": "... cheating like this seems to work:\r\n```\r\nfor name, db in list(self.ds.databases.items()):\r\n```\r\nPython built-in operations are supposedly threadsafe, so in this case I can grab a copy of the list atomically (I think) and then safely iterate over it.\r\n\r\nSeems to work in my testing. Wish I could prove it with a unit test though.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 565064079, "label": "--dirs option for scanning directories for SQLite databases"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1249#issuecomment-803748469", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1249", "id": 803748469, "node_id": "MDEyOklzc3VlQ29tbWVudDgwMzc0ODQ2OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-22T04:17:51Z", "updated_at": "2021-03-22T04:17:51Z", "author_association": "OWNER", "body": "... except my clever image using SpatiaLite installed for Ubuntu doesn't actually work:\r\n\r\n```\r\ndatasette % docker run -p 8001:8001 -v `pwd`:/mnt datasette-spatialite:latest datasette -p 8001 -h 0.0.0.0 /mnt/fixtures.db\r\n File \"/usr/local/lib/python3.9/sqlite3/dbapi2.py\", line 27, in \r\n from _sqlite3 import *\r\nImportError: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /usr/lib/x86_64-linux-gnu/libsqlite3.so.0)\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 824064069, "label": "Updated Dockerfile with SpatiaLite version 5.0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1565#issuecomment-997472509", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1565", "id": 997472509, "node_id": "IC_kwDOBm6k_c47dDj9", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-12-19T22:24:50Z", "updated_at": "2021-12-19T22:24:50Z", "author_association": "OWNER", "body": "... huh, it could even expose a JavaScript function that can be called to execute a SQL query.\r\n\r\n```javascript\r\ndatasette.query(\"select * from blah\").then(...)\r\n```\r\nMaybe it takes an optional second argument that specifies the database - defaulting to the one for the current page.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1083657868, "label": "Documented JavaScript variables on different templates made available for plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/971#issuecomment-696302020", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/971", "id": 696302020, "node_id": "MDEyOklzc3VlQ29tbWVudDY5NjMwMjAyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-21T18:49:09Z", "updated_at": "2020-09-21T18:49:09Z", "author_association": "OWNER", "body": "... made harder to work on because I apparently don't have the `DBSTAT_VTAB` module on macOS.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 705827457, "label": "Support the dbstat table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1509#issuecomment-1068445412", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1509", "id": 1068445412, "node_id": "IC_kwDOBm6k_c4_ry7k", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-03-15T20:37:50Z", "updated_at": "2022-03-15T20:38:56Z", "author_association": "OWNER", "body": "... maybe Datasette itself should include interactive API documentation, in addition to documenting it in the manual?\r\n\r\n`/dbname/table/-/apidocs` could return documentation about the specific table, taking into account columns and types.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1054243511, "label": "Datasette 1.0 JSON API (and documentation)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185931417", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185931417, "node_id": "IC_kwDOBm6k_c5Gr-CZ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T20:59:25Z", "updated_at": "2022-07-15T20:59:25Z", "author_association": "OWNER", "body": "... maybe it should take `send`? But then how would plugins know that another plugin hadn't already used `send` to send a response, and avoid two trying to send at the same time?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1072#issuecomment-719810533", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1072", "id": 719810533, "node_id": "MDEyOklzc3VlQ29tbWVudDcxOTgxMDUzMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-30T21:34:38Z", "updated_at": "2020-10-30T21:34:38Z", "author_association": "OWNER", "body": "... no wait, my comments above assume that I'm just building the `datasette-edit-templates` plugin. Does this work as a general solution for all of Datasette? I don't think it does.\r\n\r\nThis may mean I need to delay the whole feature.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 733499930, "label": "load_template hook doesn't work for include/extends"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/672#issuecomment-586109238", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/672", "id": 586109238, "node_id": "MDEyOklzc3VlQ29tbWVudDU4NjEwOTIzOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-14T05:51:12Z", "updated_at": "2020-02-14T05:51:12Z", "author_association": "OWNER", "body": "... or maybe I can cheat and wrap the access to `self.ds.databases.items()` in `list()`, so I'm iterating over an atomically-created list of those things instead? I'll try that first.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 565064079, "label": "--dirs option for scanning directories for SQLite databases"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/503#issuecomment-1291111357", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/503", "id": 1291111357, "node_id": "IC_kwDOCGYnMM5M9Mu9", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-10-25T20:36:06Z", "updated_at": "2022-10-25T20:36:06Z", "author_association": "OWNER", "body": "... or maybe Windows doesn't like attempts to remove a file that the process has opened?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1423000702, "label": "test_recreate failing on Windows Python 3.11"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1852#issuecomment-1291232589", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1852", "id": 1291232589, "node_id": "IC_kwDOBm6k_c5M9qVN", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-10-25T23:08:37Z", "updated_at": "2022-10-25T23:08:37Z", "author_association": "OWNER", "body": "... so maybe there's a way to create a token that inherits the exact permissions of the actor that created the token? That could even be a default mode for tokens, with an option to then further restrict permissions if desired.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1421552095, "label": "Default API token authentication mechanism"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1293#issuecomment-813134386", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1293", "id": 813134386, "node_id": "MDEyOklzc3VlQ29tbWVudDgxMzEzNDM4Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-04-05T01:20:28Z", "updated_at": "2021-08-13T00:42:30Z", "author_association": "OWNER", "body": "... that output might also provide a better way to extract variables than the current mechanism using a regular expression, by looking for the `Variable` opcodes.\r\n\r\n[UPDATE: it did indeed do that, see #1421]", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 849978964, "label": "Show column metadata plus links for foreign keys on arbitrary query results"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/268#issuecomment-880153069", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/268", "id": 880153069, "node_id": "MDEyOklzc3VlQ29tbWVudDg4MDE1MzA2OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-07-14T19:31:00Z", "updated_at": "2021-07-14T19:31:00Z", "author_association": "OWNER", "body": "... though interestingly I can't replicate that error on `latest.datasette.io` - https://latest.datasette.io/fixtures/searchable?_search=park.&_searchmode=raw\r\n\r\nThat's running https://latest.datasette.io/-/versions SQLite 3.35.4 whereas https://www.niche-museums.com/-/versions is running 3.27.2 (the most recent version available with Vercel) - but there's nothing in the SQLite changelog between those two versions that suggests changes to how the FTS5 parser works. https://www.sqlite.org/changes.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 323718842, "label": "Mechanism for ranking results from SQLite full-text search"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/782#issuecomment-782747878", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/782", "id": 782747878, "node_id": "MDEyOklzc3VlQ29tbWVudDc4Mjc0Nzg3OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-02-20T20:53:11Z", "updated_at": "2021-02-20T20:53:11Z", "author_association": "OWNER", "body": "... though thinking about this further, I could re-implement the `select * from commits` (but only return a max of 10 results) feature using a nested `select * from (select * from commits) limit 10` query.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 627794879, "label": "Redesign default .json format"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1020#issuecomment-712482015", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1020", "id": 712482015, "node_id": "MDEyOklzc3VlQ29tbWVudDcxMjQ4MjAxNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-10-19T22:43:24Z", "updated_at": "2020-10-19T22:43:24Z", "author_association": "OWNER", "body": "... unless I want to support authentication mechanisms that work based on incoming IP address instead, in which case there's an argument for copying more over from the incoming request.\r\n\r\nTailscale is a good example of a system where authentication based on IP address can actually work well, so this is worth doing. Also, there might be authentication mechanisms which work by setting a custom header on the incoming request (not to mention the `Authorization` header).", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 721068929, "label": "Method for datasette.client() to forward on authentication"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1228#issuecomment-1072907680", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1228", "id": 1072907680, "node_id": "IC_kwDOBm6k_c4_80Wg", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-03-19T00:55:48Z", "updated_at": "2022-03-19T00:55:48Z", "author_association": "OWNER", "body": "... unless your data had a column called `n`?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 810397025, "label": "500 error caused by faceting if a column called `n` exists"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1863#issuecomment-1324531750", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1863", "id": 1324531750, "node_id": "IC_kwDOBm6k_c5O8sAm", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-11-23T04:20:47Z", "updated_at": "2022-11-23T04:20:47Z", "author_association": "OWNER", "body": "... which does imply that I'm going to do an extra layer of validation over what SQLite provides. SQLite will happily allow a text string to be added to a supposedly integer column. I'm not going to allow that - I'll return a validation error instead, unless the string can be safely coerced to the correct type.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1425029242, "label": "Update a single record in an existing table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/216#issuecomment-381799408", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/216", "id": 381799408, "node_id": "MDEyOklzc3VlQ29tbWVudDM4MTc5OTQwOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-17T01:22:30Z", "updated_at": "2018-04-17T01:22:30Z", "author_association": "OWNER", "body": "... which is VERY surprising, because `3.23.0` only came out on 2nd April this year: https://www.sqlite.org/changes.html - I have no idea how I came to be running that version on my laptop.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 314665147, "label": "Bug: Sort by column with NULL in next_page URL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/2194#issuecomment-1730259871", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2194", "id": 1730259871, "node_id": "IC_kwDOBm6k_c5nIauf", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-09-21T20:34:09Z", "updated_at": "2023-09-21T20:34:09Z", "author_association": "OWNER", "body": "... which raises the challenge that `datasette publish` doesn't yet know what to do with a config file!\r\n\r\nhttps://github.com/simonw/datasette/blob/2da1a6acec915b81a16127008fd739c7d6075681/.github/workflows/deploy-latest.yml#L114-L122", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1907695234, "label": "Deploy failing with \"plugins/alternative_route.py: Not a directory\""}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/607#issuecomment-548055544", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/607", "id": 548055544, "node_id": "MDEyOklzc3VlQ29tbWVudDU0ODA1NTU0NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-10-30T18:37:44Z", "updated_at": "2019-10-30T18:37:52Z", "author_association": "OWNER", "body": ".Hi @zeluspudding \r\n\r\nYou're running your search queries using the \"contains\" filter, which uses a `like` query under the hood.\r\n\r\nSQL `like` queries are generally slow because they force a full table scan. You can add an index on the column but it will only speed up prefix queries, like `... where name like 'apple%'` - they won't help if you are searching for text further along the string.\r\n\r\nInstead, you should take a look at SQLite's FTS - full text indexing feature. You can build a FTS index against a column and dramatically speed up searches for words within that column.\r\n\r\nThis documentation should help get you started: https://datasette.readthedocs.io/en/stable/full_text_search.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 512996469, "label": "Ways to improve fuzzy search speed on larger data sets?"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/issues/38#issuecomment-623044643", "issue_url": "https://api.github.com/repos/dogsheep/github-to-sqlite/issues/38", "id": 623044643, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMzA0NDY0Mw==", "user": {"value": 5779832, "label": "zzeleznick"}, "created_at": "2020-05-03T02:34:32Z", "updated_at": "2020-05-03T02:34:32Z", "author_association": "NONE", "body": "1. More than glad to share feedback from the sidelines as a [starrer](https://github-to-sqlite.dogsheep.net/github?sql=select%0D%0A++starred_at%2C%0D%0A++starred_by%2C%0D%0A++full_name+as+repo_name%0D%0Afrom%0D%0A++repos_starred%0D%0Awhere%0D%0A++starred_by+%3D+%22zzeleznick%22%0D%0Aorder+by%0D%0A++starred_at+desc). \r\n\r\n```\r\n-- Motivation:\r\n-- Datasette is a data hammer and I'm looking for nails\r\n-- e.g. Find which repos a user has starred => trigger a TBD downstream action\r\nselect\r\n starred_at,\r\n starred_by,\r\n full_name as repo_name\r\nfrom\r\n repos_starred\r\nwhere\r\n starred_by = \"zzeleznick\"\r\norder by\r\n starred_at desc\r\n``` \r\n\r\n| starred_at | starred_by | repo_name |\r\n| --- | --- | --- |\r\n| 2020-02-11T01:08:59Z | zzeleznick | dogsheep/twitter-to-sqlite |\r\n| 2020-01-11T21:57:34Z | zzeleznick | simonw/datasette |\r\n\r\n2. In my day job, I use [airflow](https://github.com/apache/airflow), and that's the mental model I'm bringing to [datasette](https://github.com/simonw/datasette). \r\n\r\n3. I see your project like [twitter-to-sqlite](https://github.com/dogsheep/twitter-to-sqlite) akin to [Operators](https://airflow.apache.org/docs/stable/_api/index.html#pythonapi-operators) in Airflow world.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 611284481, "label": "[Feature Request] Support Repo Name in Search \ud83e\udd7a"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/2189#issuecomment-1730388418", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2189", "id": 1730388418, "node_id": "IC_kwDOBm6k_c5nI6HC", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-09-21T22:26:19Z", "updated_at": "2023-09-21T22:26:19Z", "author_association": "OWNER", "body": "1.0a7 is out with this fix as well now: https://docs.datasette.io/en/1.0a7/changelog.html#a7-2023-09-21", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1901416155, "label": "Server hang on parallel execution of queries to named in-memory databases"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/859#issuecomment-905900807", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/859", "id": 905900807, "node_id": "IC_kwDOBm6k_c41_vMH", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-08-25T21:51:10Z", "updated_at": "2021-08-25T21:51:10Z", "author_association": "OWNER", "body": "10-20 minutes to populate `_internal`! How many databases and tables is that for?\r\n\r\nI may have to rethink the `_internal` mechanism entirely. One possible alternative would be for the Datasette homepage to just show a list of available databases (maybe only if there are more than X connected) and then load in their metadata only the first time they are accessed.\r\n\r\nI need to get my own stress testing rig setup for this.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 642572841, "label": "Database page loads too slowly with many large tables (due to table counts)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/2118#issuecomment-1668720671", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2118", "id": 1668720671, "node_id": "IC_kwDOBm6k_c5jdqgf", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-07T23:58:21Z", "updated_at": "2023-08-07T23:58:21Z", "author_association": "OWNER", "body": "11 tests left:\r\n```\r\nFAILED tests/test_html.py::test_alternate_url_json[/fixtures-http://localhost/fixtures.json] - KeyError: 'link'\r\nFAILED tests/test_html.py::test_alternate_url_json[/fixtures?sql=select+*+from+facetable-http://localhost/fixtures.json?sql=select+*+from+facetable] - assert '' in '\\n\\n\\n fixtures: select * from...\r\nFAILED tests/test_html.py::test_query_page_truncates - assert equals failed\r\nFAILED tests/test_html.py::test_templates_considered[/fixtures-database-fixtures.html, *database.html] - assert '<!-- Templates considered: database-fixtures.html, *database.html -->' in '<!DOCTYPE html>\\n<html>\\n<head>\\n <title>fixtures\\n CSV' in '\\n\\n\\n fixtures: select 1\\n ' in '\\n\\n\\n fixtures\\n CSV' in '\\n\\n\\n fixtures: select 1\\n ' in '\\n\\n\\n fixtures: select * from...\r\nFAILED tests/test_plugins.py::test_hook_extra_css_urls[/fixtures-expected_decoded_object1] - AssertionError: assert equals failed\r\nFAILED tests/test_plugins.py::test_view_names[/fixtures-database] - AssertionError: assert equals failed\r\nFAILED tests/test_plugins.py::test_view_names[/fixtures?sql=select+1-database] - AssertionError: assert equals failed\r\nFAILED tests/test_plugins.py::test_hook_extra_body_script[/fixtures-expected_extra_body_script1] - AssertionError: assert equals failed\r\nFAILED tests/test_html.py::test_base_url_config[False-/fixtures?sql=select+1] - AssertionError: {\r\nFAILED tests/test_table_api.py::test_max_returned_rows - KeyError: 'query'\r\nFAILED tests/test_html.py::test_alternate_url_json[/fixtures-http://localhost/fixtures.json] - KeyError: 'link'\r\n============================================================================ 15 failed, 1297 passed, 2 skipped, 1 xfailed in 58.15s ============================================================================\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1823352380, "label": "New JSON design for query views"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/2118#issuecomment-1668568445", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2118", "id": 1668568445, "node_id": "IC_kwDOBm6k_c5jdFV9", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-07T20:57:46Z", "updated_at": "2023-08-07T20:57:46Z", "author_association": "OWNER", "body": "17 failing tests now.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1823352380, "label": "New JSON design for query views"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1298#issuecomment-823102978", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1298", "id": 823102978, "node_id": "MDEyOklzc3VlQ29tbWVudDgyMzEwMjk3OA==", "user": {"value": 154364, "label": "dracos"}, "created_at": "2021-04-20T08:51:23Z", "updated_at": "2021-04-20T08:51:23Z", "author_association": "NONE", "body": "2. Max height would still let you scroll the page to underneath the facets to the table, but would mean the table would never take up more than your window size, so the horizontal scrollbar would be visible as soon as the table took up the size of the window.\r\n3. Yes, this wouldn't be for mobile :) It'd be desktop-only styling. On mobile you can scroll much more easily with touch, anyway. In your case, perhaps better would be the whole top half would be facets, bottom left quadrant chart, bottom right table. Depends upon the particular use case, as you say.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 855476501, "label": "improve table horizontal scroll experience"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/983#issuecomment-752759885", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/983", "id": 752759885, "node_id": "MDEyOklzc3VlQ29tbWVudDc1Mjc1OTg4NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-12-30T21:11:52Z", "updated_at": "2020-12-30T21:14:00Z", "author_association": "OWNER", "body": "262 bytes if I remove the parameter introspection code, instead requiring plugin authors to specify the arguments they take:\r\n```javascript\r\nwindow.datasette = window.datasette || {};\r\nwindow.datasette.plugins = (() => {\r\n var registry = {};\r\n return {\r\n register: (hook, fn, parameters) => {\r\n if (!registry[hook]) {\r\n registry[hook] = [];\r\n }\r\n registry[hook].push([fn, parameters]);\r\n },\r\n call: (hook, args) => {\r\n args = args || {};\r\n var results = [];\r\n (registry[hook] || []).forEach(([fn, parameters]) => {\r\n /* Call with the correct arguments */\r\n var callWith = parameters.map(parameter => args[parameter]);\r\n var result = fn.apply(fn, callWith);\r\n if (result) {\r\n results.push(result);\r\n }\r\n });\r\n return results;\r\n }\r\n };\r\n})();\r\n```\r\n`window.datasette=window.datasette||{},window.datasette.plugins=(()=>{var a={};return{register:(t,e,r)=>{a[t]||(a[t]=[]),a[t].push([e,r])},call:(t,e)=>{e=e||{};var r=[];return(a[t]||[]).forEach(([a,t])=>{var s=t.map(a=>e[a]),d=a.apply(a,s);d&&r.push(d)}),r}}})();`", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 712260429, "label": "JavaScript plugin hooks mechanism similar to pluggy"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/2118#issuecomment-1668781558", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2118", "id": 1668781558, "node_id": "IC_kwDOBm6k_c5jd5X2", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-08-08T01:34:42Z", "updated_at": "2023-08-08T01:34:42Z", "author_association": "OWNER", "body": "3 failures left:\r\n```\r\n=================================================================== short test summary info ====================================================================\r\nFAILED tests/test_html.py::test_query_json_csv_export_links - assert '<a href=\"/fixtures.csv?sql=select+1&_size=max\">CSV</a>' in '<!DOCTYPE html>\\n<html>\\n<head>\\n <title>fixtures: select 1\\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": 520655983, "label": "\"Invalid SQL\" page should let you edit the SQL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1555#issuecomment-997262475", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1555", "id": 997262475, "node_id": "IC_kwDOBm6k_c47cQSL", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-12-18T18:34:18Z", "updated_at": "2021-12-18T18:34:18Z", "author_association": "OWNER", "body": "\"image\"\r\n\r\nUsing `executescript=True` that call now takes 1.89ms to create all of those tables.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1079149656, "label": "Optimize all those calls to index_list and foreign_key_list"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1268#issuecomment-803777724", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1268", "id": 803777724, "node_id": "MDEyOklzc3VlQ29tbWVudDgwMzc3NzcyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-22T05:42:50Z", "updated_at": "2021-03-22T05:43:23Z", "author_association": "OWNER", "body": "\"tuscany_housenumbers__select___from_sqlite_master_where_sql_like__create_virtual_table__\"\r\n\r\nIf I want to avoid counting virtual tables, I need to detect which tables are virtual tables.\r\n\r\nThe safest way to do this is probably to pull the `sql` for every table and then, in Python, check for values that start with `create virtual table` after converting to lower case, using any number of spaces.\r\n\r\nThis would catch things like ` CREATE virtual TABLE` which might be missed by a SQL `like` query. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 837308703, "label": "Figure out why SpatiaLite 5.0 hangs the database page on Linux"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/705#issuecomment-603599677", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/705", "id": 603599677, "node_id": "MDEyOklzc3VlQ29tbWVudDYwMzU5OTY3Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-03-25T02:08:11Z", "updated_at": "2020-03-25T02:08:11Z", "author_association": "OWNER", "body": "\"Webmaster_Central\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 585626199, "label": "latest.datasette.io is no longer updating"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/genome-to-sqlite/issues/1#issuecomment-544648863", "issue_url": "https://api.github.com/repos/dogsheep/genome-to-sqlite/issues/1", "id": 544648863, "node_id": "MDEyOklzc3VlQ29tbWVudDU0NDY0ODg2Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-10-21T18:36:03Z", "updated_at": "2019-10-21T18:36:03Z", "author_association": "MEMBER", "body": "\"natalie__select_rsid__genotype__case_genotype_when__AA__then__brown_eye_color__80__of_the_time__when__AG__then__brown_eye_color__when__GG__then__blue_eye_color__99__of_the_time__end_as_interpretation_from_genome_where_rsid____rs12913832__an\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 496415321, "label": "Figure out some interesting example SQL queries"}, "performed_via_github_app": null}