{"html_url": "https://github.com/dogsheep/twitter-to-sqlite/issues/53#issuecomment-748436453", "issue_url": "https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/53", "id": 748436453, "node_id": "MDEyOklzc3VlQ29tbWVudDc0ODQzNjQ1Mw==", "user": {"value": 27, "label": "anotherjesse"}, "created_at": "2020-12-19T07:47:01Z", "updated_at": "2020-12-19T07:47:01Z", "author_association": "NONE", "body": "I think this should probably be closed as won't fix.\r\n\r\nAttempting to make a patch for this I realized that the since_id would limit to tweets posted since that since_id, not when it was favorited. So favoriting something in the older would be missed if you used `--since` with a cron script\r\n\r\nBetter to just use `--stop_after` set to a couple hundred", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 771324837, "label": "--since support for favorites"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/healthkit-to-sqlite/issues/11#issuecomment-711083698", "issue_url": "https://api.github.com/repos/dogsheep/healthkit-to-sqlite/issues/11", "id": 711083698, "node_id": "MDEyOklzc3VlQ29tbWVudDcxMTA4MzY5OA==", "user": {"value": 572, "label": "jarib"}, "created_at": "2020-10-17T21:39:15Z", "updated_at": "2020-10-17T21:39:15Z", "author_association": "NONE", "body": "Nice! Works perfectly. Thanks for the quick response and great tooling in general.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 723838331, "label": "export.xml file name varies with different language settings"}, "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/github-to-sqlite/issues/15#issuecomment-605439685", "issue_url": "https://api.github.com/repos/dogsheep/github-to-sqlite/issues/15", "id": 605439685, "node_id": "MDEyOklzc3VlQ29tbWVudDYwNTQzOTY4NQ==", "user": {"value": 2029, "label": "garethr"}, "created_at": "2020-03-28T12:17:01Z", "updated_at": "2020-03-28T12:17:01Z", "author_association": "NONE", "body": "That looks great, thanks!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 544571092, "label": "Assets table with downloads"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/issues/33#issuecomment-622279374", "issue_url": "https://api.github.com/repos/dogsheep/github-to-sqlite/issues/33", "id": 622279374, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMjI3OTM3NA==", "user": {"value": 2029, "label": "garethr"}, "created_at": "2020-05-01T07:12:47Z", "updated_at": "2020-05-01T07:12:47Z", "author_association": "NONE", "body": "I also go it working with:\r\n\r\n```yaml\r\nrun: echo ${{ secrets.github_token }} | github-to-sqlite auth\r\n```", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 609950090, "label": "Fall back to authentication via ENV"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1114#issuecomment-735436014", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1114", "id": 735436014, "node_id": "MDEyOklzc3VlQ29tbWVudDczNTQzNjAxNA==", "user": {"value": 2182, "label": "danp"}, "created_at": "2020-11-29T18:33:30Z", "updated_at": "2020-11-29T18:33:30Z", "author_association": "CONTRIBUTOR", "body": "Thank you!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 752966476, "label": "--load-extension=spatialite not working with datasetteproject/datasette docker image"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/issues/54#issuecomment-927312650", "issue_url": "https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/54", "id": 927312650, "node_id": "IC_kwDODEm0Qs43RasK", "user": {"value": 2182, "label": "danp"}, "created_at": "2021-09-26T14:09:51Z", "updated_at": "2021-09-26T14:09:51Z", "author_association": "NONE", "body": "Similar trouble with ageinfo using 0.22. Here's what my ageinfo.js file looks like:\r\n\r\n```\r\nwindow.YTD.ageinfo.part0 = [\r\n {\r\n \"ageMeta\" : { }\r\n }\r\n]\r\n```\r\n\r\nCommenting out the registration for ageinfo in archive.py gets my archive to import.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 779088071, "label": "Archive import appears to be broken on recent exports"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/pocket-to-sqlite/issues/11#issuecomment-1221521377", "issue_url": "https://api.github.com/repos/dogsheep/pocket-to-sqlite/issues/11", "id": 1221521377, "node_id": "IC_kwDODLZ_YM5Izu_h", "user": {"value": 2467, "label": "fernand0"}, "created_at": "2022-08-21T10:51:37Z", "updated_at": "2022-08-21T10:51:37Z", "author_association": "NONE", "body": "I didn't see there is a PR about this: https://github.com/dogsheep/pocket-to-sqlite/pull/7", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1345452427, "label": "-a option is used for \"--auth\" and for \"--all\""}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1552#issuecomment-995296725", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1552", "id": 995296725, "node_id": "IC_kwDOBm6k_c47UwXV", "user": {"value": 3556, "label": "davidbgk"}, "created_at": "2021-12-15T23:29:32Z", "updated_at": "2021-12-15T23:29:32Z", "author_association": "CONTRIBUTOR", "body": "@simonw thank you for your fast answer and your guidance!\r\n\r\nWhile digging into the code, I found an undocumented way of doing it:\r\n\r\n```yaml\r\nfacets: [\"Facet for a column\", {\"array\": \"Facet for an array\"}]\r\n```\r\n\r\nThe only remaining problem with that solution is here: https://github.com/simonw/datasette/blob/250db8192cb8aba5eb8cd301ccc2a49525bc3d24/datasette/facets.py#L33\r\n\r\nWe have:\r\n\r\n```python\r\ntype, metadata_config = metadata_config.items()[0]\r\n```\r\n\r\nBut it requires to cast the `dict_items` as a list prior to access the first element:\r\n\r\n```python\r\ntype, metadata_config = list(metadata_config.items())[0]\r\n```\r\n\r\nI guess it's an unspotted bug? (I mean, independently of the facets-with-arrays issue.)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"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/1552#issuecomment-996229007", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1552", "id": 996229007, "node_id": "IC_kwDOBm6k_c47YT-P", "user": {"value": 3556, "label": "davidbgk"}, "created_at": "2021-12-16T22:04:39Z", "updated_at": "2021-12-16T22:04:39Z", "author_association": "CONTRIBUTOR", "body": "Wow, that was fast, thank you so much @simonw !\r\n\r\n> I'm also not convinced that this configuration syntax is right. It's a bit weird having a `\"facets\"` list that can either by column-name-strings or `{\"type-of-facet\": \"column-name\"}` objects. Maybe there's a better design for this?\r\n\r\nI agree that it's not ideal, my initial naive approach was to detect if it's an array, like what is done here:\r\n\r\nhttps://github.com/simonw/datasette/blob/2c07327d23d9c5cf939ada9ba4091c1b8b2ba42d/datasette/facets.py#L312-L313\r\n\r\nBut it requires an extra query to determine the type, which is a bit problematic, especially for big tables I guess.\r\n\r\nTaking a look at #510, I wonder if a `facet_delimiter` should be defined for that kind of columns (that would help our team not to have an intermediary conversion step from `foo|bar` to `[\"foo\",\"bar\"]` for instance).\r\n\r\nTo be consistent with the `--extract-column` parameter, maybe an explicit casting/delimiter would be useful: `--set-column 'Foo:Array:|'`.\r\n\r\nThrowing a lot of ideas without knowing the big picture\u2026 but sometimes newcomers have superpowers :).", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"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/1871#issuecomment-1309650806", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1871", "id": 1309650806, "node_id": "IC_kwDOBm6k_c5OD692", "user": {"value": 3556, "label": "davidbgk"}, "created_at": "2022-11-10T01:38:58Z", "updated_at": "2022-11-10T01:38:58Z", "author_association": "CONTRIBUTOR", "body": "> Realized the API explorer doesn't need the API key piece at all - it can work with standard cookie-based auth.\r\n> \r\n> This also reflects how most plugins are likely to use this API, where they'll be adding JavaScript that uses `fetch()` to call the write API directly.\r\n\r\nI agree (that's what I did with the previous insert plugin), maybe a complete example using `fetch()` in the documentation would be valuable as a \u201cGetting started with the API\u201d or similar?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1427293909, "label": "API explorer tool"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1929#issuecomment-1339906969", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1929", "id": 1339906969, "node_id": "IC_kwDOBm6k_c5P3VuZ", "user": {"value": 3556, "label": "davidbgk"}, "created_at": "2022-12-06T19:34:20Z", "updated_at": "2022-12-06T19:34:20Z", "author_association": "CONTRIBUTOR", "body": "I confirm that it works \ud83d\udc4d ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1473659191, "label": "Incorrect link from the API explorer to the JSON API documentation"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1931#issuecomment-1339916064", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1931", "id": 1339916064, "node_id": "IC_kwDOBm6k_c5P3X8g", "user": {"value": 3556, "label": "davidbgk"}, "created_at": "2022-12-06T19:42:45Z", "updated_at": "2022-12-06T19:42:45Z", "author_association": "CONTRIBUTOR", "body": "The `\"return\": true` option is really nice!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1473814539, "label": "/db/table/-/upsert"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1170#issuecomment-754004715", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1170", "id": 754004715, "node_id": "MDEyOklzc3VlQ29tbWVudDc1NDAwNDcxNQ==", "user": {"value": 3637, "label": "benpickles"}, "created_at": "2021-01-04T14:25:44Z", "updated_at": "2021-01-04T14:25:44Z", "author_association": "CONTRIBUTOR", "body": "I was going to re-add the filter to only run Prettier when there have been changes in `datasette/static` but that would mean it wouldn't run when the package is updated. That plus the fact that [the last run of the job took only 8 seconds](https://github.com/benpickles/datasette/runs/1640121514) is why I decided not to re-add the filter.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 778126516, "label": "Install Prettier via package.json"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1169#issuecomment-754007242", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1169", "id": 754007242, "node_id": "MDEyOklzc3VlQ29tbWVudDc1NDAwNzI0Mg==", "user": {"value": 3637, "label": "benpickles"}, "created_at": "2021-01-04T14:29:57Z", "updated_at": "2021-01-04T14:29:57Z", "author_association": "CONTRIBUTOR", "body": "I somewhat share your reluctance to add a package.json to seemingly every project out there but ultimately if they're project dependencies it's important they're managed within the codebase.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 777677671, "label": "Prettier package not actually being cached"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1167#issuecomment-754619930", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1167", "id": 754619930, "node_id": "MDEyOklzc3VlQ29tbWVudDc1NDYxOTkzMA==", "user": {"value": 3637, "label": "benpickles"}, "created_at": "2021-01-05T12:57:57Z", "updated_at": "2021-01-05T12:57:57Z", "author_association": "CONTRIBUTOR", "body": "Not sure where exactly to put the actual docs (presumably somewhere in [docs/contributing.rst](https://github.com/simonw/datasette/blob/main/docs/contributing.rst)) but I've made a slight change to make it easier to run locally (copying [the approach in excalidraw](https://github.com/excalidraw/excalidraw/blob/ade2565f497243a5e428f4906d8ed80c872fd981/package.json#L90-L94)): https://github.com/simonw/datasette/compare/main...benpickles:prettier-docs\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": 777145954, "label": "Add Prettier to contributing documentation"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/269#issuecomment-859940977", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/269", "id": 859940977, "node_id": "MDEyOklzc3VlQ29tbWVudDg1OTk0MDk3Nw==", "user": {"value": 4068, "label": "frafra"}, "created_at": "2021-06-11T22:33:08Z", "updated_at": "2021-06-11T22:33:08Z", "author_association": "NONE", "body": "`true` and `false` json values are cast to integer, which is not optimal.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 919250621, "label": "bool type not supported"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/270#issuecomment-860031071", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/270", "id": 860031071, "node_id": "MDEyOklzc3VlQ29tbWVudDg2MDAzMTA3MQ==", "user": {"value": 4068, "label": "frafra"}, "created_at": "2021-06-12T10:00:24Z", "updated_at": "2021-06-12T10:00:24Z", "author_association": "NONE", "body": "Sure, I am sorry if my message hasn't been clear enough. I am also a new user :)\r\n\r\nAt the beginning, I just call `sqlite-utils insert \"$db\" \"$table\" \"$jsonfile\"` to create the database. sqlite-utils convert JSON values into `TEXT`, when it tries to determine the schema automatically. I then try to transform the table to set `JSON` as type:\r\n\r\n```\r\nsqlite-utils transform species.sqlite species --type criteria json\r\nUsage: sqlite-utils transform [OPTIONS] PATH TABLE\r\nTry 'sqlite-utils transform --help' for help.\r\n\r\nError: Invalid value for '--type': 'json' is not one of 'INTEGER', 'TEXT', 'FLOAT', 'BLOB'.\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 919314806, "label": "Cannot set type JSON"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/269#issuecomment-860031217", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/269", "id": 860031217, "node_id": "MDEyOklzc3VlQ29tbWVudDg2MDAzMTIxNw==", "user": {"value": 4068, "label": "frafra"}, "created_at": "2021-06-12T10:01:53Z", "updated_at": "2021-06-12T10:01:53Z", "author_association": "NONE", "body": "`sqlite-utils transform` does not allow setting the column type to boolean:\r\n```\r\nError: Invalid value for '--type': 'bool' is not one of 'INTEGER', 'TEXT', 'FLOAT', 'BLOB'.\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 919250621, "label": "bool type not supported"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1286#issuecomment-860047794", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1286", "id": 860047794, "node_id": "MDEyOklzc3VlQ29tbWVudDg2MDA0Nzc5NA==", "user": {"value": 4068, "label": "frafra"}, "created_at": "2021-06-12T12:36:15Z", "updated_at": "2021-06-12T12:36:15Z", "author_association": "NONE", "body": "@mroswell That is a very nice solution. I wonder if custom classes, like `col-columnName-value` could be automatically added to cells when facets on such column are enabled, to allow custom styling without having to modify templates or add custom JavaScript code.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 849220154, "label": "Better default display of arrays of items"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1375#issuecomment-860548546", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1375", "id": 860548546, "node_id": "MDEyOklzc3VlQ29tbWVudDg2MDU0ODU0Ng==", "user": {"value": 4068, "label": "frafra"}, "created_at": "2021-06-14T09:41:59Z", "updated_at": "2021-06-14T09:41:59Z", "author_association": "NONE", "body": "> There is a feature for this at the moment, but it's a little bit hidden: you can use `?_json=col` to tell\r\n> Datasette that you would like a specific column to be exported as nested JSON: https://docs.datasette.io/en/stable/json_api.html#special-json-arguments\r\n\r\nThanks :)\r\n \r\n> I considered trying to make this automatic - so it detects columns that appear to contain valid JSON and outputs them as nested objects - but the problem with that is that it can lead to inconsistent results - you might hit the API and find that not every column contains valid JSON (compared to the previous day) resulting in the API retuning string instead of the expected dictionary and breaking your code.\r\n\r\nIf a developer is not sure if the JSON fields are valid, but then retrieves and parse them, it should handle errors too. Handling inconsistent data is necessary due to the nature of SQLite. A global or dataset option to render the data as they have been defined (JSON, boolean, etc.) when requesting JSON could allow the user to download a regular JSON from the browser without having to rely on APIs. I would guess someone could just make a custom template with an extra JSON-parsed download button otherwise :)", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 919508498, "label": "JSON export dumps JSON fields as TEXT"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/270#issuecomment-862574390", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/270", "id": 862574390, "node_id": "MDEyOklzc3VlQ29tbWVudDg2MjU3NDM5MA==", "user": {"value": 4068, "label": "frafra"}, "created_at": "2021-06-16T17:34:49Z", "updated_at": "2021-06-16T17:34:49Z", "author_association": "NONE", "body": "Sorry, I got confused because SQLite has a JSON column type, even if it is treated as TEXT, and I though automatic facets were available for JSON arrays stored as JSON only :)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 919314806, "label": "Cannot set type JSON"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/438#issuecomment-1139379923", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/438", "id": 1139379923, "node_id": "IC_kwDOCGYnMM5D6Y7T", "user": {"value": 4068, "label": "frafra"}, "created_at": "2022-05-27T08:05:01Z", "updated_at": "2022-05-27T08:05:01Z", "author_association": "NONE", "body": "I tried to debug it using `pdb`, but it looks `sqlite-utils` catches the exception, so it is not quick to figure out where the failure is happening.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1250161887, "label": "illegal UTF-16 surrogate"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/438#issuecomment-1139392769", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/438", "id": 1139392769, "node_id": "IC_kwDOCGYnMM5D6cEB", "user": {"value": 4068, "label": "frafra"}, "created_at": "2022-05-27T08:21:53Z", "updated_at": "2022-05-27T08:21:53Z", "author_association": "NONE", "body": "Argument were specified in the wrong order. `PATH TABLE FILE` can be misleading :)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1250161887, "label": "illegal UTF-16 surrogate"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/439#issuecomment-1139426398", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/439", "id": 1139426398, "node_id": "IC_kwDOCGYnMM5D6kRe", "user": {"value": 4068, "label": "frafra"}, "created_at": "2022-05-27T09:04:05Z", "updated_at": "2022-05-27T10:44:54Z", "author_association": "NONE", "body": "This code works:\r\n\r\n```python\r\nimport csv\r\nimport sqlite_utils\r\ndb = sqlite_utils.Database(\"test.db\")\r\nreader = csv.DictReader(open(\"csv\", encoding=\"utf-16-le\").read().split(\"\\r\\n\"), delimiter=\";\")\r\ndb[\"test\"].insert_all(reader, pk=\"Id\")\r\n```\r\n\r\nI used `iconv` to change the encoding; sqlite-utils can import the resulting file, even if it stops at 98 %:\r\n\r\n```\r\nsqlite-utils insert --csv test test.db clean \r\n [------------------------------------] 0%\r\n [###################################-] 98% 00:00:00\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": 1250495688, "label": "Misleading progress bar against utf-16-le CSV input"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/433#issuecomment-1139484453", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/433", "id": 1139484453, "node_id": "IC_kwDOCGYnMM5D6ycl", "user": {"value": 4068, "label": "frafra"}, "created_at": "2022-05-27T10:20:08Z", "updated_at": "2022-05-27T10:20:08Z", "author_association": "NONE", "body": "I can confirm. This only happens with sqlite-utils. I am using gnome-terminal with bash.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1239034903, "label": "CLI eats my cursor"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1818#issuecomment-1257290709", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1818", "id": 1257290709, "node_id": "IC_kwDOBm6k_c5K8LvV", "user": {"value": 5363, "label": "nelsonjchen"}, "created_at": "2022-09-25T22:17:06Z", "updated_at": "2022-09-25T22:17:06Z", "author_association": "NONE", "body": "I wonder if having an option for displaying the max row id might help too. Not accurate especially if something was deleted, but useful for DBs as a dump. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1384549993, "label": "Setting to turn off table row counts entirely"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1818#issuecomment-1258738740", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1818", "id": 1258738740, "node_id": "IC_kwDOBm6k_c5LBtQ0", "user": {"value": 5363, "label": "nelsonjchen"}, "created_at": "2022-09-26T22:52:45Z", "updated_at": "2022-09-26T22:55:57Z", "author_association": "NONE", "body": "thoughts on order of precedence to use:\r\n\r\n* sqlite-utils count, if present. closest thing to a standard i guess.\r\n* row(max_id) if like, the first and/or last x amount of rows ids are all contiguous. kind of a cheap/dumb/imperfect heuristic to see if the table is dump/not dump. if the check passes, still stick on `est.` after the display.\r\n* count(*) if enabled in datasette ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1384549993, "label": "Setting to turn off table row counts entirely"}, "performed_via_github_app": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/32#issuecomment-791053721", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/32", "id": 791053721, "node_id": "MDEyOklzc3VlQ29tbWVudDc5MTA1MzcyMQ==", "user": {"value": 6213, "label": "dsisnero"}, "created_at": "2021-03-05T00:31:27Z", "updated_at": "2021-03-05T00:31:27Z", "author_association": "NONE", "body": "I am getting the same thing for US West (N. California) us-west-1", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 803333769, "label": "KeyError: 'Contents' on running upload"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/2054#issuecomment-1499797384", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/2054", "id": 1499797384, "node_id": "IC_kwDOBm6k_c5ZZReI", "user": {"value": 6213, "label": "dsisnero"}, "created_at": "2023-04-07T00:46:50Z", "updated_at": "2023-04-07T00:46:50Z", "author_association": "NONE", "body": "you should have a look at Roda written in ruby . ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1657861026, "label": "Make detailed notes on how table, query and row views work right now"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1298#issuecomment-1125083348", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1298", "id": 1125083348, "node_id": "IC_kwDOBm6k_c5DD2jU", "user": {"value": 7150, "label": "llimllib"}, "created_at": "2022-05-12T14:43:51Z", "updated_at": "2022-05-12T14:43:51Z", "author_association": "NONE", "body": "user report: I found this issue because the first time I tried to use datasette for real, I displayed a large table, and thought there was no horizontal scroll bar at all. I didn't even consider that I had to scroll all the way to the end of the page to find it.\r\n\r\nJust chipping in to say that this confused me, and I didn't even find the scroll bar until after I saw this issue. I don't know what the right answer is, but IMO the UI should suggest to the user that there is a way to view the data that's hidden to the right.", "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/176#issuecomment-359697938", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/176", "id": 359697938, "node_id": "MDEyOklzc3VlQ29tbWVudDM1OTY5NzkzOA==", "user": {"value": 7193, "label": "gijs"}, "created_at": "2018-01-23T07:17:56Z", "updated_at": "2018-01-23T07:17:56Z", "author_association": "NONE", "body": "\ud83d\udc4d I'd like this too! ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 285168503, "label": "Add GraphQL endpoint"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1#issuecomment-338523957", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1", "id": 338523957, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODUyMzk1Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T01:09:05Z", "updated_at": "2017-10-24T02:42:12Z", "author_association": "OWNER", "body": "I also need to solve for weird primary keys. If it\u2019s a single integer or a single char field that\u2019s easy. But what if it is a compound key with more than one chat field? What delimiter can I use that will definitely be safe?\r\n\r\nLet\u2019s say I use hyphen. Now I need to find a durable encoding for any hyphens that might exist in the key fields themselves.\r\n\r\nHow about I use URLencoding for every non-alpha-numeric character? That will turn hyphens into (I think) %2D. It should also solve for unicode characters, but it means the vast majority of keys (integers) will display neatly, including a compound key of eg 5678-345\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": 267513424, "label": "Addressable pages for every row in a table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1#issuecomment-338524454", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1", "id": 338524454, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODUyNDQ1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T01:15:24Z", "updated_at": "2017-10-23T01:15:24Z", "author_association": "OWNER", "body": "Table rendering logic needs to detect the primary key field and turn it into a hyperlink. If there is a compound primary key it should add an extra column at the start of the table which displays the compound key as a link", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267513424, "label": "Addressable pages for every row in a table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/5#issuecomment-338524857", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/5", "id": 338524857, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODUyNDg1Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T01:20:30Z", "updated_at": "2017-10-23T01:20:30Z", "author_association": "OWNER", "body": "https://stackoverflow.com/a/14468878/6083\r\n\r\nLooks like I should order by compound primary key and implement cursor-based pagination.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267516066, "label": "Implement sensible query pagination"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/3#issuecomment-338526148", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/3", "id": 338526148, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODUyNjE0OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T01:35:17Z", "updated_at": "2017-10-23T01:35:17Z", "author_association": "OWNER", "body": "https://github.com/ahupp/python-magic/blob/master/README.md", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267515678, "label": "Make individual column valuables addressable, with smart content types"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/4#issuecomment-338530389", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/4", "id": 338530389, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODUzMDM4OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T02:15:41Z", "updated_at": "2017-10-23T02:15:41Z", "author_association": "OWNER", "body": "This means I need a good solution for these compile time options while running in development mode \r\n ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267515836, "label": "Make URLs immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/4#issuecomment-338530480", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/4", "id": 338530480, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODUzMDQ4MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T02:16:33Z", "updated_at": "2017-10-23T02:16:33Z", "author_association": "OWNER", "body": " How about when the service starts up it checks for a compile.json file and, if it is missing, creates it using the same code we run at compile time normally ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267515836, "label": "Make URLs immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/11#issuecomment-338530704", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/11", "id": 338530704, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODUzMDcwNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T02:18:36Z", "updated_at": "2017-10-23T02:18:36Z", "author_association": "OWNER", "body": "Needed by https://github.com/simonw/stateless-datasets/issues/4#issuecomment-338530389", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267522549, "label": "Code that generates compile-time properties about the database "}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/4#issuecomment-338531827", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/4", "id": 338531827, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODUzMTgyNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T02:28:31Z", "updated_at": "2017-10-23T02:29:05Z", "author_association": "OWNER", "body": "Many of the applications I want to implement with this would benefit from having permanent real URLs.\r\n\r\nSo let\u2019s have both. The sha1 urls will serve far future cache headers (and an etag derived from their path). The non sha1 URLs will serve 302 uncached redirects to the sha1 locations.\r\n\r\nWe will have a setting that lets people opt out of this behavior.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267515836, "label": "Make URLs immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/8#issuecomment-338697223", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/8", "id": 338697223, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODY5NzIyMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T15:28:11Z", "updated_at": "2017-10-23T15:28:11Z", "author_association": "OWNER", "body": "Now returning this:\r\n\r\n {\r\n \"error\": \"attempt to write a readonly database\",\r\n \"ok\": false\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": 267517314, "label": "Attempting an INSERT or UPDATE should return a sane error message"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/16#issuecomment-338768860", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/16", "id": 338768860, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODc2ODg2MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T19:23:29Z", "updated_at": "2017-10-23T19:23:29Z", "author_association": "OWNER", "body": "I could use the table-reflow mechanism demonstrated here: http://demos.jquerymobile.com/1.4.3/table-reflow/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267726219, "label": "Default HTML/CSS needs to look reasonable and be responsive"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/20#issuecomment-338769538", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/20", "id": 338769538, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODc2OTUzOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T19:25:55Z", "updated_at": "2017-10-23T19:25:55Z", "author_association": "OWNER", "body": "Maybe this should be handled by views instead?\r\n\r\nhttps://stateless-datasets-wreplxalgu.now.sh/ lists some views\r\n\r\nhttps://stateless-datasets-wreplxalgu.now.sh/?sql=select%20*%20from%20%22Order%20Subtotals%22 is an example showing the content of a view.\r\n\r\nWhat would the URL to views be? I don't think a view can share a name with a table, so the same URL scheme could work for both.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267759136, "label": "Config file with support for defining canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/4#issuecomment-338789734", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/4", "id": 338789734, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODc4OTczNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T20:40:25Z", "updated_at": "2017-10-23T21:10:19Z", "author_association": "OWNER", "body": "URL design:\r\n\r\n /database/table.json - redirects to /database-6753f4a/table.json\r\n\r\nSo we always redirect to the version with the truncated hash in the URL.\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267515836, "label": "Make URLs immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/4#issuecomment-338797522", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/4", "id": 338797522, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODc5NzUyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T21:09:33Z", "updated_at": "2017-10-23T21:09:33Z", "author_association": "OWNER", "body": "https://stackoverflow.com/a/18134919/6083 is a good answer about how many characters of the hash are needed to be unique. I say we default to 7 characters, like git does - but allow extras to be configured.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267515836, "label": "Make URLs immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/4#issuecomment-338799438", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/4", "id": 338799438, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODc5OTQzOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T21:17:25Z", "updated_at": "2017-10-23T21:17:25Z", "author_association": "OWNER", "body": "Can I take advantage of HTTP/2 so even if you get redirected I start serving you the correct resource straight away?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267515836, "label": "Make URLs immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/4#issuecomment-338804173", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/4", "id": 338804173, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODgwNDE3Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T21:36:37Z", "updated_at": "2017-10-23T21:36:37Z", "author_association": "OWNER", "body": "Looks like the easiest way to implement HTTP/2 server push today is to run behind Cloudflare and use this:\r\n\r\n Link: ; rel=preload; as=script\r\n\r\nhttps://blog.cloudflare.com/announcing-support-for-http-2-server-push-2/\r\n\r\nHere's the W3C draft: https://w3c.github.io/preload/\r\n\r\nFrom https://w3c.github.io/preload/#as-attribute it looks like I should use `as=fetch` if the content is intended for consumption by fetch() or XMLHTTPRequest.\r\n\r\nUnclear if I should throw `as=fetch crossorigin` in there. Need to experiment on that.\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267515836, "label": "Make URLs immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/4#issuecomment-338806718", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/4", "id": 338806718, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODgwNjcxOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-23T21:47:53Z", "updated_at": "2017-10-23T21:47:53Z", "author_association": "OWNER", "body": "Here's what the homepage of cloudflare.com does (with newlines added within the link header for clarity):\r\n\r\n $ curl -i 'https://www.cloudflare.com/' \r\n HTTP/1.1 200 OK\r\n Date: Mon, 23 Oct 2017 21:45:58 GMT\r\n Content-Type: text/html; charset=utf-8\r\n Transfer-Encoding: chunked\r\n Connection: keep-alive\r\n link:\r\n ; rel=preload; as=style,\r\n ; rel=preload; as=style,\r\n ; rel=preload,\r\n ; rel=preload,\r\n ; rel=preload; as=video,\r\n ; rel=preload; as=video,\r\n ; rel=preload; as=video,\r\n ; rel=preload; as=video,\r\n ; rel=preload; as=video,\r\n ; rel=preload; as=image\r\n\r\nThe original header looked like this:\r\n\r\n link: ; rel=preload; as=style, ; rel=preload; as=style, ; rel=preload, ; rel=preload, ; rel=preload; as=video, ; rel=preload; as=video, ; rel=preload; as=video, ; rel=preload; as=video, ; rel=preload; as=video, ; rel=preload; as=image\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": 267515836, "label": "Make URLs immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/24#issuecomment-338834213", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/24", "id": 338834213, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODgzNDIxMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T00:23:05Z", "updated_at": "2017-10-24T00:23:05Z", "author_association": "OWNER", "body": "If I can\u2019t setect a primary key, I won\u2019t provide a URL for those records", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267828746, "label": "Implement full URL design"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/17#issuecomment-338852971", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/17", "id": 338852971, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg1Mjk3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T02:26:47Z", "updated_at": "2017-10-24T02:26:47Z", "author_association": "OWNER", "body": "I'm not going to bother with this.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267732005, "label": "In development mode, should still pick up new .db files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/7#issuecomment-338853083", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/7", "id": 338853083, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg1MzA4Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T02:27:25Z", "updated_at": "2017-10-24T02:27:25Z", "author_association": "OWNER", "body": "Fixed in 9d219140694551453bfa528e0624919eb065f9d6", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267516650, "label": "Framework where by every page is JSON plus a template"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/23#issuecomment-338854988", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/23", "id": 338854988, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg1NDk4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T02:40:12Z", "updated_at": "2017-10-25T00:05:46Z", "author_association": "OWNER", "body": " /database-name/table-name?name__contains=simon&sort=id+desc\r\n\r\nNote that if there's a column called \"sort\" you can still do sort__exact=blah\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": 267788884, "label": "Support Django-style filters in querystring arguments"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1#issuecomment-338857568", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1", "id": 338857568, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg1NzU2OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T02:57:12Z", "updated_at": "2017-10-24T02:57:12Z", "author_association": "OWNER", "body": "I can find the primary keys using:\r\n\r\n PRAGMA table_info(myTable)\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267513424, "label": "Addressable pages for every row in a table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/23#issuecomment-338859620", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/23", "id": 338859620, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg1OTYyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T03:11:42Z", "updated_at": "2017-10-24T03:11:42Z", "author_association": "OWNER", "body": "I\u2019m going to implement everything in https://docs.djangoproject.com/en/1.11/ref/models/querysets/#field-lookups with the exception of range and the various date ones.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267788884, "label": "Support Django-style filters in querystring arguments"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/23#issuecomment-338859709", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/23", "id": 338859709, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg1OTcwOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T03:12:18Z", "updated_at": "2017-10-24T03:12:42Z", "author_association": "OWNER", "body": "I\u2019m going to need to write unit tests for this, is this depends on #9", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267788884, "label": "Support Django-style filters in querystring arguments"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1#issuecomment-338861511", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1", "id": 338861511, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg2MTUxMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T03:24:17Z", "updated_at": "2017-10-24T03:24:17Z", "author_association": "OWNER", "body": "Some tables won't have primary keys, in which case I won't generate pages for individual records.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267513424, "label": "Addressable pages for every row in a table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/9#issuecomment-338863155", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/9", "id": 338863155, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg2MzE1NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T03:36:58Z", "updated_at": "2017-10-24T03:36:58Z", "author_association": "OWNER", "body": "I\u2019m going to use py.test and start with all tests in a single tests.py module", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267517348, "label": "Initial test suite"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1#issuecomment-338872286", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1", "id": 338872286, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg3MjI4Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T04:46:06Z", "updated_at": "2017-10-24T04:46:06Z", "author_association": "OWNER", "body": "I'm going to use `,` as the separator between elements of a compound primary key. If those elements themselves include a comma I will use `%2C` in its place.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267513424, "label": "Addressable pages for every row in a table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/9#issuecomment-338882110", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/9", "id": 338882110, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg4MjExMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T05:55:33Z", "updated_at": "2017-10-24T05:55:33Z", "author_association": "OWNER", "body": "Well, I've started it at least.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267517348, "label": "Initial test suite"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1#issuecomment-338882207", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1", "id": 338882207, "node_id": "MDEyOklzc3VlQ29tbWVudDMzODg4MjIwNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T05:56:04Z", "updated_at": "2017-10-24T05:56:04Z", "author_association": "OWNER", "body": "Next step: generate links to these.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267513424, "label": "Addressable pages for every row in a table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/24#issuecomment-339003850", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/24", "id": 339003850, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTAwMzg1MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T14:12:00Z", "updated_at": "2017-10-24T14:12:00Z", "author_association": "OWNER", "body": "As of b46e370ee6126aa2fa85cf789a31da38aed98496 this is done.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267828746, "label": "Implement full URL design"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/29#issuecomment-339019873", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/29", "id": 339019873, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTAxOTg3Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T14:58:33Z", "updated_at": "2017-10-24T14:58:33Z", "author_association": "OWNER", "body": "Here's what I've got now:\r\n\r\n\"localhost_8006_northwind-40d049b_categories_json\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268050821, "label": "Handle bytestring records encoding to JSON"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/5#issuecomment-339027711", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/5", "id": 339027711, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTAyNzcxMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T15:21:30Z", "updated_at": "2017-10-24T15:21:30Z", "author_association": "OWNER", "body": "I have code to detect primary keys on tables... but what should I do for tables that lack primary keys? How should I even sort them?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267516066, "label": "Implement sensible query pagination"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/5#issuecomment-339028979", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/5", "id": 339028979, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTAyODk3OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T15:25:08Z", "updated_at": "2017-10-24T15:25:08Z", "author_association": "OWNER", "body": "Looks like I can use the SQLite specific \u201crowid\u201d in that case. It isn\u2019t guaranteed to stay consistent across a VACUUM but that\u2019s ok because we are immutable anyway.\r\n\r\n https://www.sqlite.org/lang_createtable.html#rowid", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267516066, "label": "Implement sensible query pagination"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/23#issuecomment-339138809", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/23", "id": 339138809, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTEzODgwOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-24T21:32:46Z", "updated_at": "2017-10-24T21:32:46Z", "author_association": "OWNER", "body": "May as well support most of https://sqlite.org/lang_expr.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267788884, "label": "Support Django-style filters in querystring arguments"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/23#issuecomment-339186887", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/23", "id": 339186887, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTE4Njg4Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T01:39:43Z", "updated_at": "2017-10-25T04:22:41Z", "author_association": "OWNER", "body": "Still to do:\r\n\r\n- [x] `gt`, `gte`, `lt`, `lte`\r\n- [x] `like`\r\n- [x] `glob`\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267788884, "label": "Support Django-style filters in querystring arguments"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/23#issuecomment-339210353", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/23", "id": 339210353, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTIxMDM1Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T04:23:02Z", "updated_at": "2017-10-25T04:23:02Z", "author_association": "OWNER", "body": "I'm going to call this one done for the moment. The date filters can go in a stretch goal.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267788884, "label": "Support Django-style filters in querystring arguments"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/19#issuecomment-339366612", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/19", "id": 339366612, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTM2NjYxMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T15:21:16Z", "updated_at": "2017-10-25T15:21:16Z", "author_association": "OWNER", "body": "I had to manually set the content disposition header:\r\n\r\n return await response.file_stream(\r\n filepath, headers={\r\n 'Content-Disposition': 'attachment; filename=\"{}\"'.format(ilepath)\r\n }\r\n )\r\n\r\nIn the next release of Sanic I can just use the filename= argument instead:\r\n\r\nhttps://github.com/channelcat/sanic/commit/07e95dba4f5983afc1e673df14bdd278817288aa", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267741262, "label": "Efficient url for downloading the raw database file"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/37#issuecomment-339382054", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/37", "id": 339382054, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTM4MjA1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T16:05:56Z", "updated_at": "2017-10-25T16:05:56Z", "author_association": "OWNER", "body": "Could this be as simple as using the iterative JSON encoder and adding a yield statement in between each chunk?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268453968, "label": "Ability to serialize massive JSON without blocking event loop"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/38#issuecomment-339388215", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/38", "id": 339388215, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTM4ODIxNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T16:25:45Z", "updated_at": "2017-10-25T16:25:45Z", "author_association": "OWNER", "body": "First experiment: hook up an iterative CSV dump (just because that\u2019s a tiny bit easier to get started with than iterative a JSON). Have it execute a big select statement and then iterate through the result set 100 rows at a time using sqite fetchmany() - also have it async sleep for a second in between each batch of 100.\r\n\r\nCan this work without needing python threads? ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268462768, "label": "Experiment with patterns for concurrent long running queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/38#issuecomment-339388771", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/38", "id": 339388771, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTM4ODc3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T16:27:29Z", "updated_at": "2017-10-25T16:27:29Z", "author_association": "OWNER", "body": "If this does work, I need to figure it what to do about the HTML view. ASsuming I can iteratively produce JSON and CSV, what to do about HTML? One option: render the first 500 rows as HTML, then hand off to an infinite scroll experience that iteratively loads more rows as JSON.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268462768, "label": "Experiment with patterns for concurrent long running queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/38#issuecomment-339389105", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/38", "id": 339389105, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTM4OTEwNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T16:28:39Z", "updated_at": "2017-10-25T16:28:39Z", "author_association": "OWNER", "body": "The gold standard here is to be able to serve up increasingly large datasets without blocking the event loop and while using a sustainable amount of RAM", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268462768, "label": "Experiment with patterns for concurrent long running queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/38#issuecomment-339389328", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/38", "id": 339389328, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTM4OTMyOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T16:29:23Z", "updated_at": "2017-10-25T16:29:23Z", "author_association": "OWNER", "body": "Ideally we can get some serious gains from the fact that our database file is opened with the immutable option.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268462768, "label": "Experiment with patterns for concurrent long running queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339395551", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339395551, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTM5NTU1MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T16:49:32Z", "updated_at": "2017-10-25T16:49:32Z", "author_association": "OWNER", "body": "Simplest implementation will be to create a temporary directory somewhere, copy in a Dockerfile and the databases and run \u201cnow\u201d in it.\r\n\r\nIdeally I can use symlinks rather than copying potentially large database files around.", "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/39#issuecomment-339406634", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/39", "id": 339406634, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTQwNjYzNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T17:27:10Z", "updated_at": "2017-10-25T17:27:10Z", "author_association": "OWNER", "body": "It certainly looks like some of the stuff in https://sqlite.org/pragma.html could be used to screw around with things. Example: `PRAGMA case_sensitive_like = 1` - would that affect future queries?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268469569, "label": "Protect against malicious SQL that causes damage even though our DB is immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/39#issuecomment-339413825", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/39", "id": 339413825, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTQxMzgyNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T17:48:48Z", "updated_at": "2017-10-25T17:48:48Z", "author_association": "OWNER", "body": "Could I use https://sqlparse.readthedocs.io/en/latest/ to parse incoming statements and ensure they are pure SELECTs? Would that prevent people from using a compound SELECT statement to trigger an evil PRAGMA of some sort?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268469569, "label": "Protect against malicious SQL that causes damage even though our DB is immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/16#issuecomment-339420462", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/16", "id": 339420462, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTQyMDQ2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T18:10:51Z", "updated_at": "2017-10-25T18:10:51Z", "author_association": "OWNER", "body": "https://sitesforprofit.com/responsive-table-plugins-and-patterns has some useful links.\r\n\r\nI really like the pattern from https://css-tricks.com/responsive-data-tables/\r\n\r\n /* \r\n Max width before this PARTICULAR table gets nasty\r\n This query will take effect for any screen smaller than 760px\r\n and also iPads specifically.\r\n */\r\n @media \r\n only screen and (max-width: 760px),\r\n (min-device-width: 768px) and (max-device-width: 1024px) {\r\n\r\n /* Force table to not be like tables anymore */\r\n table, thead, tbody, th, td, tr { \r\n display: block; \r\n }\r\n \r\n /* Hide table headers (but not display: none;, for accessibility) */\r\n thead tr { \r\n position: absolute;\r\n top: -9999px;\r\n left: -9999px;\r\n }\r\n \r\n tr { border: 1px solid #ccc; }\r\n \r\n td { \r\n /* Behave like a \"row\" */\r\n border: none;\r\n border-bottom: 1px solid #eee; \r\n position: relative;\r\n padding-left: 50%; \r\n }\r\n \r\n td:before { \r\n /* Now like a table header */\r\n position: absolute;\r\n /* Top/left values mimic padding */\r\n top: 6px;\r\n left: 6px;\r\n width: 45%; \r\n padding-right: 10px; \r\n white-space: nowrap;\r\n }\r\n \r\n /*\r\n Label the data\r\n */\r\n td:nth-of-type(1):before { content: \"First Name\"; }\r\n td:nth-of-type(2):before { content: \"Last Name\"; }\r\n td:nth-of-type(3):before { content: \"Job Title\"; }\r\n td:nth-of-type(4):before { content: \"Favorite Color\"; }\r\n td:nth-of-type(5):before { content: \"Wars of Trek?\"; }\r\n td:nth-of-type(6):before { content: \"Porn Name\"; }\r\n td:nth-of-type(7):before { content: \"Date of Birth\"; }\r\n td:nth-of-type(8):before { content: \"Dream Vacation City\"; }\r\n td:nth-of-type(9):before { content: \"GPA\"; }\r\n td:nth-of-type(10):before { content: \"Arbitrary Data\"; }\r\n }", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267726219, "label": "Default HTML/CSS needs to look reasonable and be responsive"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/39#issuecomment-339510770", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/39", "id": 339510770, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxMDc3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:07:40Z", "updated_at": "2017-10-26T00:07:40Z", "author_association": "OWNER", "body": "It looks like I should double quote my columns and ensure they are correctly escaped https://blog.christosoft.de/2012/10/sqlite-escaping-table-acolumn-names/ - hopefully using ? placeholders for column names will work. I should use ? for tables too.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268469569, "label": "Protect against malicious SQL that causes damage even though our DB is immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339514819", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339514819, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxNDgxOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:35:46Z", "updated_at": "2017-10-26T00:35:46Z", "author_association": "OWNER", "body": "I\u2019m going to have a single command-line app that does everything.\r\n\r\nName to be decided - options include dataset, stateless, datasite (I quite like that - it reflects SQLite and the fact that you create a website)", "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/40#issuecomment-339515822", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339515822, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxNTgyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:43:34Z", "updated_at": "2017-10-26T00:43:34Z", "author_association": "OWNER", "body": "datasite .\r\n\r\n- starts web app in current directory, serving all DB files\r\n\r\ndatasite . -p 8001\r\n\r\n- serves on custom port\r\n\r\ndatasite blah.db blah2.db\r\n\r\n- serves specified files\r\n\r\nYou can\u2019t specify more than one directory. You can specify as many files as you like. If you specify two files with different oaths but the same name then they must be accessed by hash.\r\n\r\ndatasite publish .\r\n\r\n- publishes current directory to the internet! Uses now by default, if it detects it on your path. Other publishers will be eventually added as plugins.\r\n\r\ndatasite publish http://path-to-db.db\r\n\r\n- publishes a DB available at a URL. Works by constructing the Dockerfile with wget calls in it.\r\n\r\ndatasite blah.db -m metadata.json\r\n\r\nIf you specify a directory it looks for metadata.json in that directory. Otherwise you can pass an explicit metadata file oath with -m or \u2014metadata", "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/40#issuecomment-339516032", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339516032, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxNjAzMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:44:52Z", "updated_at": "2017-10-26T00:44:52Z", "author_association": "OWNER", "body": "Another potential name: datapi ", "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/40#issuecomment-339517846", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339517846, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxNzg0Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:58:39Z", "updated_at": "2017-10-26T00:58:39Z", "author_association": "OWNER", "body": "I\u2019m going to use Click for this\r\n\r\nhttp://nvie.com/posts/writing-a-cli-in-python-in-under-60-seconds/\r\nhttps://kushaldas.in/posts/building-command-line-tools-in-python-with-click.html", "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/40#issuecomment-339724700", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339724700, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTcyNDcwMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T16:35:20Z", "updated_at": "2017-10-26T16:35:20Z", "author_association": "OWNER", "body": "Here\u2019s how to make the \u201cserve\u201d subcommand the default if it is called with no arguments:\r\n\r\n @click.group(invoke_without_command=True)\r\n def serve():\r\n # ...", "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/41#issuecomment-339866724", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/41", "id": 339866724, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTg2NjcyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-27T04:04:52Z", "updated_at": "2017-10-27T04:04:52Z", "author_association": "OWNER", "body": "\"databases\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268590777, "label": "Homepage should show summary of databases"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339891755", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339891755, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTg5MTc1NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-27T07:10:53Z", "updated_at": "2017-10-27T07:10:53Z", "author_association": "OWNER", "body": "Deploys to Now aren't working at the moment - they aren't showing the uploaded databases, because I've broken the path handling somehow. I need to do a bit more work here.", "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/40#issuecomment-340561577", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 340561577, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MDU2MTU3Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-30T19:43:40Z", "updated_at": "2017-10-30T19:43:40Z", "author_association": "OWNER", "body": "http://the-hitchhikers-guide-to-packaging.readthedocs.io/en/latest/quickstart.html describes how to package this for PyPI", "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/39#issuecomment-340787868", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/39", "id": 340787868, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MDc4Nzg2OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-31T14:54:14Z", "updated_at": "2017-10-31T14:54:14Z", "author_association": "OWNER", "body": "Here\u2019s how I can (I think) provide safe execution of arbitrary SQL while blocking PRAGMA calls: let people use names parameters in their SQL and apply strict filtering to the SQL query but not to the parameter values.\r\n\r\n cur.execute(\r\n \"select * from people where name_last=:who and age=:age\", {\r\n \"who\": who,\r\n \"age\": age\r\n })\r\n\r\nIn URL form:\r\n\r\n ?sql=select...&who=Terry&age=34\r\n\r\nNow we can apply strict, dumb validation rules to the SQL part while allowing anything in the named queries - so people can execute a search for PRAGMA without being able to execute a PRAGMA statement.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268469569, "label": "Protect against malicious SQL that causes damage even though our DB is immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/10#issuecomment-341938424", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/10", "id": 341938424, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MTkzODQyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-04T23:48:57Z", "updated_at": "2017-11-04T23:48:57Z", "author_association": "OWNER", "body": "Done: https://github.com/simonw/stateless-datasets/commit/edaa10587e60946e0c1935333f6b79553db33798", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267517381, "label": "Set up Travis"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-341945420", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 341945420, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MTk0NTQyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-05T02:55:07Z", "updated_at": "2017-11-05T02:55:07Z", "author_association": "OWNER", "body": "To simplify things a bit, I'm going to require that every database is explicitly listed in the command line. I won't support \"serve everything in this directory\" for the moment.", "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/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/16#issuecomment-342032943", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/16", "id": 342032943, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MjAzMjk0Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-06T02:50:07Z", "updated_at": "2017-11-06T02:50:07Z", "author_association": "OWNER", "body": "Default look with Bootstrap 4 looks like this:\r\n\"flights\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267726219, "label": "Default HTML/CSS needs to look reasonable and be responsive"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/44#issuecomment-342484889", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/44", "id": 342484889, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MjQ4NDg4OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-07T13:39:49Z", "updated_at": "2017-11-07T13:39:49Z", "author_association": "OWNER", "body": "I\u2019m going to call this feature \u201ccount values\u201d", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 269731374, "label": "?_group_count=country - return counts by specific column(s)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/47#issuecomment-342521344", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/47", "id": 342521344, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MjUyMTM0NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-07T15:37:45Z", "updated_at": "2017-11-07T15:37:45Z", "author_association": "OWNER", "body": "GDS Registries could be fun too: https://registers.cloudapps.digital/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271831408, "label": "Create neat example database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/32#issuecomment-343164111", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/32", "id": 343164111, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzE2NDExMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T14:05:56Z", "updated_at": "2017-11-09T14:05:56Z", "author_association": "OWNER", "body": "Implemented in 31b21f5c5e15fc3acab7fabb170c1da71dc3c98c", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268106803, "label": "Try running SQLite queries in a separate thread"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/48#issuecomment-343168796", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/48", "id": 343168796, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzE2ODc5Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T14:22:21Z", "updated_at": "2017-11-09T14:22:21Z", "author_association": "OWNER", "body": "Won't fix: ujson is not compatible with the custom JSON encoder I'm using here: https://github.com/simonw/immutabase/blob/b2dee11fcd989d9e2a7bf4de1e23dbc320c05013/immutabase/app.py#L401-L416", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272391665, "label": "Switch to ujson"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/49#issuecomment-343237982", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/49", "id": 343237982, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzIzNzk4Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T17:58:01Z", "updated_at": "2017-11-09T17:58:01Z", "author_association": "OWNER", "body": "More terms:\r\n\r\n* publish\r\n* share\r\n* docker\r\n* host\r\n* stateless\r\n\r\nI want to capture the idea of publishing an immutable database in a stateless container.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272661336, "label": "Pick a name"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/49#issuecomment-343238262", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/49", "id": 343238262, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzIzODI2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T17:58:59Z", "updated_at": "2017-11-09T17:58:59Z", "author_association": "OWNER", "body": "The name should ideally be available on PyPI and should make sense as both a command line application and a library.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272661336, "label": "Pick a name"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/48#issuecomment-343239062", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/48", "id": 343239062, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzIzOTA2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T18:01:46Z", "updated_at": "2017-11-09T18:01:46Z", "author_association": "OWNER", "body": "This looks promising: https://github.com/esnme/ultrajson/issues/124#issuecomment-323882878", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272391665, "label": "Switch to ujson"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/50#issuecomment-343266326", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/50", "id": 343266326, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzI2NjMyNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T19:33:18Z", "updated_at": "2017-11-09T19:33:18Z", "author_association": "OWNER", "body": "http://sanic.readthedocs.io/en/latest/sanic/testing.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272694136, "label": "Unit tests against application itself"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/49#issuecomment-343281876", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/49", "id": 343281876, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzI4MTg3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T20:30:42Z", "updated_at": "2017-11-09T20:30:42Z", "author_association": "OWNER", "body": "How about datasette?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272661336, "label": "Pick a name"}, "performed_via_github_app": null}