\r\n sys.exit(cli())\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/click/core.py\", line 829, in __call__\r\n return self.main(*args, **kwargs)\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/click/core.py\", line 782, in main\r\n rv = self.invoke(ctx)\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/click/core.py\", line 1259, in invoke\r\n return _process_result(sub_ctx.command.invoke(sub_ctx))\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/click/core.py\", line 1259, in invoke\r\n return _process_result(sub_ctx.command.invoke(sub_ctx))\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/click/core.py\", line 1066, in invoke\r\n return ctx.invoke(self.callback, **ctx.params)\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/click/core.py\", line 610, in invoke\r\n return callback(*args, **kwargs)\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/datasette/publish/heroku.py\", line 103, in heroku\r\n extra_metadata,\r\n File \"/usr/lib/python3.7/contextlib.py\", line 112, in __enter__\r\n return next(self.gen)\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/datasette/publish/heroku.py\", line 191, in temporary_heroku_directory\r\n os.path.join(tmp.name, \"templates\"),\r\n File \"/home/aborruso/.local/lib/python3.7/site-packages/datasette/utils/__init__.py\", line 605, in link_or_copy_directory\r\n shutil.copytree(src, dst, copy_function=os.link, dirs_exist_ok=True)\r\nTypeError: copytree() got an unexpected keyword argument 'dirs_exist_ok'\r\n```\r\n\r\nDo I must open a new issue?\r\n\r\nThank you", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608058890, "label": "link_or_copy_directory() error - Invalid cross-device link"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/744#issuecomment-634283355", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/744", "id": 634283355, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDI4MzM1NQ==", "user": {"value": 30607, "label": "aborruso"}, "created_at": "2020-05-26T21:15:34Z", "updated_at": "2020-05-26T21:15:34Z", "author_association": "NONE", "body": "> Oh no! It looks like `dirs_exist_ok` is Python 3.8 only. This is a bad fix, it needs to work on older Python's too. Re-opening.\r\n\r\nThank you very much", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608058890, "label": "link_or_copy_directory() error - Invalid cross-device link"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/744#issuecomment-634446887", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/744", "id": 634446887, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNDQ0Njg4Nw==", "user": {"value": 30607, "label": "aborruso"}, "created_at": "2020-05-27T06:01:28Z", "updated_at": "2020-05-27T06:01:28Z", "author_association": "NONE", "body": "Dear @simonw thank you for your time, now IT WORKS!!!\r\n\r\nI hope that this edit to datasette code is not for an exceptional case (my PC configuration) and that it will be useful to other users. \r\n\r\nThank you again!!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608058890, "label": "link_or_copy_directory() error - Invalid cross-device link"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/744#issuecomment-635386935", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/744", "id": 635386935, "node_id": "MDEyOklzc3VlQ29tbWVudDYzNTM4NjkzNQ==", "user": {"value": 30607, "label": "aborruso"}, "created_at": "2020-05-28T14:32:53Z", "updated_at": "2020-05-28T14:32:53Z", "author_association": "NONE", "body": "Wow, I'm in some way very proud!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 608058890, "label": "link_or_copy_directory() error - Invalid cross-device link"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/sqlite-utils/issues/69#issuecomment-710768396", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/69", "id": 710768396, "node_id": "MDEyOklzc3VlQ29tbWVudDcxMDc2ODM5Ng==", "user": {"value": 30607, "label": "aborruso"}, "created_at": "2020-10-17T07:46:59Z", "updated_at": "2020-10-17T07:46:59Z", "author_association": "NONE", "body": "Great @simonw thank you very much", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 534507142, "label": "Feature request: enable extensions loading"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/sqlite-utils/issues/188#issuecomment-710778368", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/188", "id": 710778368, "node_id": "MDEyOklzc3VlQ29tbWVudDcxMDc3ODM2OA==", "user": {"value": 30607, "label": "aborruso"}, "created_at": "2020-10-17T08:52:58Z", "updated_at": "2020-10-17T08:52:58Z", "author_association": "NONE", "body": "I have done a stupid question.\r\n\r\nIf I run\r\n\r\n```\r\nsqlite-utils :memory: \"select spatialite_version()\" --load-extension=/usr/local/lib/mod_spatialite.so\r\n```\r\n\r\nI have `[{\"spatialite_version()\": \"5.0.0\"}]`\r\n\r\nThank you for this great tool", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 723708310, "label": "About loading spatialite"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1220#issuecomment-778008752", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1220", "id": 778008752, "node_id": "MDEyOklzc3VlQ29tbWVudDc3ODAwODc1Mg==", "user": {"value": 30607, "label": "aborruso"}, "created_at": "2021-02-12T06:37:34Z", "updated_at": "2021-02-12T06:37:34Z", "author_association": "NONE", "body": "I have used my path, I'm running it from the folder in wich I have the db.\n\nDo I must an absolute path?\n\nDo I must create exactly that folder?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 806743116, "label": "Installing datasette via docker: Path 'fixtures.db' does not exist"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1220#issuecomment-778467759", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1220", "id": 778467759, "node_id": "MDEyOklzc3VlQ29tbWVudDc3ODQ2Nzc1OQ==", "user": {"value": 30607, "label": "aborruso"}, "created_at": "2021-02-12T21:35:17Z", "updated_at": "2021-02-12T21:35:17Z", "author_association": "NONE", "body": "Thank you", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 806743116, "label": "Installing datasette via docker: Path 'fixtures.db' does not exist"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1845#issuecomment-1279924827", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1845", "id": 1279924827, "node_id": "IC_kwDOBm6k_c5MShpb", "user": {"value": 30636, "label": "kindly"}, "created_at": "2022-10-16T08:54:53Z", "updated_at": "2022-10-16T08:54:53Z", "author_association": "NONE", "body": "> It was part of a larger idea I was exploring around ensuring Datasette could be used to start interacting with CSV/JSON data out-of-the-box, without needing to first convert that data into SQLite using separate tools.\r\n\r\nThis would be great. My organization deals with very nested JSON open data and I have been wanting to find a way to hook into datasette so that the analysts do not have to first convert to sqlite first.\r\n\r\nThis can kind of be done with datasette-lite. \r\n\r\nFrom this random nested JSON API:\r\nhttps://api.nobelprize.org/v1/prize.json\r\n\r\nYou can use the API of https://flatterer.herokuapp.com to return a multi table sqlite database:\r\n\r\nhttps://lite.datasette.io/?url=https://flatterer.herokuapp.com/api/convert?output_format=sqlite%26file_url=https://api.nobelprize.org/v1/prize.json\r\n\r\nThis is great and fun, but it would be great if there was some plugin mechanism that you could feed a local datasette a nested JSON file directly, possibly hooking into other flattening tools for this.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1410305897, "label": "Reconsider the Datasette first-run experience"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/782#issuecomment-782745199", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/782", "id": 782745199, "node_id": "MDEyOklzc3VlQ29tbWVudDc4Mjc0NTE5OQ==", "user": {"value": 30665, "label": "frankieroberto"}, "created_at": "2021-02-20T20:32:03Z", "updated_at": "2021-02-20T20:32:03Z", "author_association": "NONE", "body": "I think it\u2019s a good idea if the top level item of the response JSON is always an object, rather than an array, at least as the default. Mainly because it allows you to add extra keys in a backwards-compatible way. Also just seems more expected somehow.\r\n\r\nThe API design guidance for the UK government also recommends this: https://www.gov.uk/guidance/gds-api-technical-and-data-standards#use-json\r\n\r\nI also strongly dislike having versioned APIs (eg with a `/v1/` path prefix, as it invariably means that old versions stop working at some point, even though the bit of the API you\u2019re using might not have changed at all.", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 1}", "issue": {"value": 627794879, "label": "Redesign default .json format"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/782#issuecomment-782746755", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/782", "id": 782746755, "node_id": "MDEyOklzc3VlQ29tbWVudDc4Mjc0Njc1NQ==", "user": {"value": 30665, "label": "frankieroberto"}, "created_at": "2021-02-20T20:44:05Z", "updated_at": "2021-02-20T20:44:05Z", "author_association": "NONE", "body": "Minor suggestion: rename `size` query param to `limit`, to better reflect that it\u2019s a maximum number of rows returned rather than a guarantee of getting that number, and also for consistency with the SQL keyword?\r\n\r\nI like the idea of specifying a limit of 0 if you don\u2019t want any rows data - and returning an empty array under the `rows` key seems fine.\r\n\r\nHave you given any thought as to whether to pretty print (format with spaces) the output or not? Can be useful for debugging/exploring in a browser or other basic tools which don\u2019t parse the JSON. Could be default (can\u2019t be much bigger with gzip?) or opt-in.", "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-783265830", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/782", "id": 783265830, "node_id": "MDEyOklzc3VlQ29tbWVudDc4MzI2NTgzMA==", "user": {"value": 30665, "label": "frankieroberto"}, "created_at": "2021-02-22T10:21:14Z", "updated_at": "2021-02-22T10:21:14Z", "author_association": "NONE", "body": "@simonw:\r\n\r\n> The problem there is that ?_size=x isn't actually doing the same thing as the SQL limit keyword.\r\n\r\nInteresting! Although I don't think it matters too much what the underlying implementation is - I more meant that `limit` is familiar to developers conceptually as \"up to and including this number, if they exist\", whereas \"size\" is potentially more ambiguous. However, it's probably no big deal either way.", "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/pull/1204#issuecomment-951731255", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1204", "id": 951731255, "node_id": "IC_kwDOBm6k_c44ukQ3", "user": {"value": 30934, "label": "20after4"}, "created_at": "2021-10-26T09:01:28Z", "updated_at": "2021-10-26T09:01:28Z", "author_association": "NONE", "body": "> Writing the tests will be a bit tricky since we need to confirm that the `include_table_top(datasette, database, actor, table)` arguments were all passed correctly but the only thing we get back from the plugin is a list of templates. Maybe encode those values into the template names somehow?\r\n\r\nWhy not return a data structure instead of just a template name?\r\n\r\nI've already done some custom hacking to modify datasette but the plugin mechanism you are building here would be much cleaner than what I've built. I'd be happy to help with testing this PR and fleshing it out further if you are still considering merging this.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 793002853, "label": "WIP: Plugin includes"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/878#issuecomment-951740637", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/878", "id": 951740637, "node_id": "IC_kwDOBm6k_c44umjd", "user": {"value": 30934, "label": "20after4"}, "created_at": "2021-10-26T09:12:15Z", "updated_at": "2021-10-26T09:12:15Z", "author_association": "NONE", "body": "This sounds really ambitious but also really awesome. I like the idea that basically any piece of a page could be selectively replaced.\r\n\r\nIt sort of sounds like a python asyncio version of https://github.com/observablehq/runtime", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 648435885, "label": "New pattern for views that return either JSON or HTML, available for plugins"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1532#issuecomment-981966693", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1532", "id": 981966693, "node_id": "IC_kwDOBm6k_c46h59l", "user": {"value": 30934, "label": "20after4"}, "created_at": "2021-11-29T19:56:52Z", "updated_at": "2021-11-29T19:56:52Z", "author_association": "NONE", "body": "FWIW I've written some web components that consume the json api and I think it's a really nice way to work with datasette. I like the combination with datasette+sqlite as a back-end feeding data to a front-end that's entirely javascript + html.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1065429936, "label": "Use datasette-table Web Component to guide the design of the JSON API for 1.0"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1304#issuecomment-981980048", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1304", "id": 981980048, "node_id": "IC_kwDOBm6k_c46h9OQ", "user": {"value": 30934, "label": "20after4"}, "created_at": "2021-11-29T20:13:53Z", "updated_at": "2021-11-29T20:14:11Z", "author_association": "NONE", "body": "There isn't any way to do this with sqlite as far as I know. The only option is to insert the right number of ? placeholders into the sql template and then provide an array of values.", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 863884805, "label": "Document how to send multiple values for \"Named parameters\" "}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1532#issuecomment-982745406", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1532", "id": 982745406, "node_id": "IC_kwDOBm6k_c46k4E-", "user": {"value": 30934, "label": "20after4"}, "created_at": "2021-11-30T15:28:57Z", "updated_at": "2021-11-30T15:28:57Z", "author_association": "NONE", "body": "It's a really great API and the documentation is really great too. Honestly, in more than 20 years of professional experience, I haven't worked with any software API that was more of a joy to use. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1065429936, "label": "Use datasette-table Web Component to guide the design of the JSON API for 1.0"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1304#issuecomment-988461884", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1304", "id": 988461884, "node_id": "IC_kwDOBm6k_c466rs8", "user": {"value": 30934, "label": "20after4"}, "created_at": "2021-12-08T03:20:26Z", "updated_at": "2021-12-08T03:20:26Z", "author_association": "NONE", "body": "The easiest or most straightforward thing to do is to use named parameters like:\r\n\r\n```sql\r\nselect * where key IN (:p1, :p2, :p3)\r\n```\r\n\r\nAnd simply construct the list of placeholders dynamically based on the number of values.\r\n\r\nDoing this is possible with datasette if you forgo \"canned queries\" and just use the raw query endpoint and pass the query sql, along with p1, p2 ... in the request.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 863884805, "label": "Document how to send multiple values for \"Named parameters\" "}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1304#issuecomment-988463455", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1304", "id": 988463455, "node_id": "IC_kwDOBm6k_c466sFf", "user": {"value": 30934, "label": "20after4"}, "created_at": "2021-12-08T03:23:14Z", "updated_at": "2021-12-08T03:23:14Z", "author_association": "NONE", "body": "I actually think it would be a useful thing to add support for in datasette. It wouldn't be difficult to unwind an array of params and add the placeholders automatically.", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 863884805, "label": "Document how to send multiple values for \"Named parameters\" "}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1528#issuecomment-988468238", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1528", "id": 988468238, "node_id": "IC_kwDOBm6k_c466tQO", "user": {"value": 30934, "label": "20after4"}, "created_at": "2021-12-08T03:35:45Z", "updated_at": "2021-12-08T03:35:45Z", "author_association": "NONE", "body": "FWIW I implemented something similar with a bit of plugin code:\r\n\r\n```python\r\n@hookimpl\r\ndef canned_queries(datasette: Datasette, database: str) -> Mapping[str, str]:\r\n # load \"canned queries\" from the filesystem under\r\n # www/sql/db/query_name.sql\r\n queries = {}\r\n\r\n sqldir = Path(__file__).parent.parent / \"sql\"\r\n if database:\r\n sqldir = sqldir / database\r\n\r\n if not sqldir.is_dir():\r\n return queries\r\n\r\n for f in sqldir.glob('*.sql'):\r\n try:\r\n sql = f.read_text('utf8').strip()\r\n if not len(sql):\r\n log(f\"Skipping empty canned query file: {f}\")\r\n continue\r\n queries[f.stem] = { \"sql\": sql }\r\n except OSError as err:\r\n log(err)\r\n\r\n return queries\r\n\r\n\r\n\r\n```", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 1, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1060631257, "label": "Add new `\"sql_file\"` key to Canned Queries in metadata?"}, "performed_via_github_app": null}
{"html_url": "https://github.com/dogsheep/swarm-to-sqlite/issues/12#issuecomment-941274088", "issue_url": "https://api.github.com/repos/dogsheep/swarm-to-sqlite/issues/12", "id": 941274088, "node_id": "IC_kwDODD6af844GrPo", "user": {"value": 33631, "label": "fs111"}, "created_at": "2021-10-12T18:31:57Z", "updated_at": "2021-10-12T18:31:57Z", "author_association": "NONE", "body": "I am running into the same problem. Is there any workaround?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 951817328, "label": "403 when getting token"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1574#issuecomment-1008279307", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1574", "id": 1008279307, "node_id": "IC_kwDOBm6k_c48GR8L", "user": {"value": 33631, "label": "fs111"}, "created_at": "2022-01-09T11:26:06Z", "updated_at": "2022-01-09T11:26:06Z", "author_association": "NONE", "body": "@fgregg my thinking was backwards compatibility. I don't know what people do to their builds, I just wanted a smaller image for my use case.\r\n\r\n@simonw any chance to take a look at this? If there is no interest, feel free to close the PR", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1084193403, "label": "introduce new option for datasette package to use a slim base image"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1574#issuecomment-1084216224", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1574", "id": 1084216224, "node_id": "IC_kwDOBm6k_c5An9Og", "user": {"value": 33631, "label": "fs111"}, "created_at": "2022-03-31T07:45:25Z", "updated_at": "2022-03-31T07:45:25Z", "author_association": "NONE", "body": "@simonw I like that you want to go \"slim by default\". Do you want another PR for that or should I just wait?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1084193403, "label": "introduce new option for datasette package to use a slim base image"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/pull/1574#issuecomment-1214765672", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1574", "id": 1214765672, "node_id": "IC_kwDOBm6k_c5IZ9po", "user": {"value": 33631, "label": "fs111"}, "created_at": "2022-08-15T08:49:31Z", "updated_at": "2022-08-15T08:49:31Z", "author_association": "NONE", "body": "closing as this is now the default", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1084193403, "label": "introduce new option for datasette package to use a slim base image"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/sqlite-utils/issues/46#issuecomment-592999503", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/46", "id": 592999503, "node_id": "MDEyOklzc3VlQ29tbWVudDU5Mjk5OTUwMw==", "user": {"value": 35075, "label": "chrishas35"}, "created_at": "2020-02-29T22:08:20Z", "updated_at": "2020-02-29T22:08:20Z", "author_association": "NONE", "body": "@simonw any thoughts on allow extracts to specify the lookup column name? If I'm understanding the documentation right, `.lookup()` allows you to define the \"value\" column (the documentation uses name), but when you use `extracts` keyword as part of `.insert()`, `.upsert()` etc. the lookup must be done against a column named \"value\". I have an existing lookup table that I've populated with columns \"id\" and \"name\" as opposed to \"id\" and \"value\", and seems I can't use `extracts=`, unless I'm missing something...\r\n\r\nInitial thought on how to do this would be to allow the dictionary value to be a tuple of table name column pair... so:\r\n```\r\ntable = db.table(\"trees\", extracts={\"species_id\": (\"Species\", \"name\"})\r\n```\r\n\r\nI haven't dug too much into the existing code yet, but does this make sense? Worth doing?\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": 471780443, "label": "extracts= option for insert/update/etc"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/sqlite-utils/issues/89#issuecomment-593122605", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/89", "id": 593122605, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MzEyMjYwNQ==", "user": {"value": 35075, "label": "chrishas35"}, "created_at": "2020-03-01T17:33:11Z", "updated_at": "2020-03-01T17:33:11Z", "author_association": "NONE", "body": "If you're happy with the proposed implementation, I have code & tests written that I'll get ready for a PR.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 573578548, "label": "Ability to customize columns used by extracts= feature"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/sqlite-utils/issues/249#issuecomment-803502424", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/249", "id": 803502424, "node_id": "MDEyOklzc3VlQ29tbWVudDgwMzUwMjQyNA==", "user": {"value": 36287, "label": "prabhur"}, "created_at": "2021-03-21T02:43:32Z", "updated_at": "2021-03-21T02:43:32Z", "author_association": "NONE", "body": "> Did you run `enable-fts` before you inserted the data?\r\n> \r\n> If so you'll need to run `populate-fts` after the insert to populate the FTS index.\r\n> \r\n> A better solution may be to add `--create-triggers` to the `enable-fts` command to add triggers that will automatically keep the index updated as you insert new records.\r\n\r\nWow. Wasn't expecting a response this quick, especially during a weekend. :-) Sincerely appreciate it.\r\nI tried the `populate-fts` and that did the trick. My bad for not consulting the docs again. I think I forgot to add that step when I automated the workflow.\r\nThanks for the suggestion. I'll close this issue. Have a great weekend and many many thanks for creating these suite of tools around sqlite.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 836963850, "label": "Full text search possibly broken?"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1624#issuecomment-1261194164", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1624", "id": 1261194164, "node_id": "IC_kwDOBm6k_c5LLEu0", "user": {"value": 38532, "label": "palfrey"}, "created_at": "2022-09-28T16:54:22Z", "updated_at": "2022-09-28T16:54:22Z", "author_association": "NONE", "body": "https://github.com/simonw/datasette-cors seems to workaround this", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1122427321, "label": "Index page `/` has no CORS headers"}, "performed_via_github_app": null}
{"html_url": "https://github.com/dogsheep/dogsheep-photos/issues/20#issuecomment-633234781", "issue_url": "https://api.github.com/repos/dogsheep/dogsheep-photos/issues/20", "id": 633234781, "node_id": "MDEyOklzc3VlQ29tbWVudDYzMzIzNDc4MQ==", "user": {"value": 41439, "label": "dmd"}, "created_at": "2020-05-24T13:56:13Z", "updated_at": "2020-05-24T13:56:13Z", "author_association": "NONE", "body": "As that seems to be closed, can you give a hint on how to make this work?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 613006393, "label": "Ability to serve thumbnailed Apple Photo from its place on disk"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/sqlite-utils/issues/540#issuecomment-1537744000", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/540", "id": 1537744000, "node_id": "IC_kwDOCGYnMM5bqByA", "user": {"value": 42327, "label": "pquentin"}, "created_at": "2023-05-08T04:56:12Z", "updated_at": "2023-05-08T04:56:12Z", "author_association": "NONE", "body": "Hey @simonw, urllib3 maintainer here :wave:\r\n\r\nSorry for breaking your CI. I understand you may prefer to pin the Python version, but note that specifying just `python: \"3\"` will get you the latest. We use that in urllib3: https://github.com/urllib3/urllib3/blob/main/.readthedocs.yml\r\n\r\nI can open PRs to sqlite-utils / datasette if you're interested", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1699184583, "label": "sphinx.builders.linkcheck build error"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/409#issuecomment-472844001", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/409", "id": 472844001, "node_id": "MDEyOklzc3VlQ29tbWVudDQ3Mjg0NDAwMQ==", "user": {"value": 43100, "label": "Uninen"}, "created_at": "2019-03-14T13:04:20Z", "updated_at": "2019-03-14T13:04:42Z", "author_association": "NONE", "body": "It seems this affects the Datasette Publish -site as well: https://github.com/simonw/datasette-publish-support/issues/3", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 408376825, "label": "Zeit API v1 does not work for new users - need to migrate to v2"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/1886#issuecomment-1316289392", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1886", "id": 1316289392, "node_id": "IC_kwDOBm6k_c5OdPtw", "user": {"value": 45195, "label": "rtanglao"}, "created_at": "2022-11-16T03:54:17Z", "updated_at": "2022-11-16T03:58:56Z", "author_association": "NONE", "body": "Happy Birthday Datasette!\r\n\r\nThanks Simon!!\r\n\r\nI use datasette on everything most notably [my flickr metadata SQLite DB](https://www.dropbox.com/s/6j10e2vohp2j5kf/roland2019-2020.db?dl=0) to make art.\r\n\r\nDatasette lite on my 2019 flickr metadata is super helpful too:\r\nhttps://lite.datasette.io/?csv=https%3A%2F%2Fraw.githubusercontent.com%2Frtanglao%2Frt-flickr-sqlite-csv%2Fmain%2F2019-roland-flickr-metadata.csv\r\n\r\nEven better datasette lite on all firefox support questions from 2021: https://lite.datasette.io/?url=https%3A%2F%2Fraw.githubusercontent.com%2Frtanglao%2Frt-kits-api3%2Fmain%2FYEARLY_CSV_FILES%2F2021-firefox-sumo-questions.db\r\n\r\nThanks again Simon! So great! What a gift to the world!!!!!!\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1447050738, "label": "Call for birthday presents: if you're using Datasette, let us know how you're using it here"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/619#issuecomment-697973420", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/619", "id": 697973420, "node_id": "MDEyOklzc3VlQ29tbWVudDY5Nzk3MzQyMA==", "user": {"value": 45416, "label": "obra"}, "created_at": "2020-09-23T21:07:58Z", "updated_at": "2020-09-23T21:07:58Z", "author_association": "NONE", "body": "I've just run into this after crafting a complex query and discovered that hitting back loses my query.\r\n\r\nEven showing me the whole bad query would be a huge improvement over the current status quo.", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-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/123#issuecomment-698110186", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/123", "id": 698110186, "node_id": "MDEyOklzc3VlQ29tbWVudDY5ODExMDE4Ng==", "user": {"value": 45416, "label": "obra"}, "created_at": "2020-09-24T04:49:51Z", "updated_at": "2020-09-24T04:49:51Z", "author_association": "NONE", "body": "As a half-measure, I'd get value out of being able to upload a CSV and have datasette run csv-to-sqlite on it.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275125561, "label": "Datasette serve should accept paths/URLs to CSVs and other file formats"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/123#issuecomment-698174957", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/123", "id": 698174957, "node_id": "MDEyOklzc3VlQ29tbWVudDY5ODE3NDk1Nw==", "user": {"value": 45416, "label": "obra"}, "created_at": "2020-09-24T07:42:05Z", "updated_at": "2020-09-24T07:42:05Z", "author_association": "NONE", "body": "\nOh. Awesome. \n\nOn Thu, Sep 24, 2020 at 12:28:53AM -0700, Simon Willison wrote:\n> @obra there's a plugin for that! https://github.com/simonw/\n> datasette-upload-csvs\n> \n> \u00e2\u0080\u0094\n> You are receiving this because you were mentioned.\n> Reply to this email directly, view it on GitHub, or unsubscribe.*\n> \n\n-- \n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275125561, "label": "Datasette serve should accept paths/URLs to CSVs and other file formats"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/187#issuecomment-489353316", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/187", "id": 489353316, "node_id": "MDEyOklzc3VlQ29tbWVudDQ4OTM1MzMxNg==", "user": {"value": 46059, "label": "carsonyl"}, "created_at": "2019-05-04T18:36:36Z", "updated_at": "2019-05-04T18:36:36Z", "author_association": "NONE", "body": "Hi @simonw - I just hit this issue when trying out Datasette after your PyCon talk today. Datasette is pinned to Sanic 0.7.0, but it looks like 0.8.0 added the option to remove the uvloop dependency for Windows by having an environment variable `SANIC_NO_UVLOOP` at install time. Maybe that'll be sufficient before a port to Starlette?", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 1, \"eyes\": 0}", "issue": {"value": 309033998, "label": "Windows installation error"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/633#issuecomment-620841496", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/633", "id": 620841496, "node_id": "MDEyOklzc3VlQ29tbWVudDYyMDg0MTQ5Ng==", "user": {"value": 46165, "label": "nryberg"}, "created_at": "2020-04-28T20:37:50Z", "updated_at": "2020-04-28T20:37:50Z", "author_association": "NONE", "body": "Using the Heroku web interface, you can set the WEB_CONCURRENCY = 1\r\n\r\n![image](https://user-images.githubusercontent.com/46165/80535319-352c8100-8966-11ea-9d4f-df2622ec8bff.png)\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 522334771, "label": "Publish to Heroku is broken: \"WARNING: You must pass the application as an import string to enable 'reload' or 'workers\""}, "performed_via_github_app": null}
{"html_url": "https://github.com/dogsheep/evernote-to-sqlite/issues/14#issuecomment-911772943", "issue_url": "https://api.github.com/repos/dogsheep/evernote-to-sqlite/issues/14", "id": 911772943, "node_id": "IC_kwDOEhK-wc42WI0P", "user": {"value": 46968, "label": "step21"}, "created_at": "2021-09-02T14:53:11Z", "updated_at": "2021-09-02T14:53:11Z", "author_association": "NONE", "body": "Additionally, assuming the line numbers match up with the provided enenx file, the mentioned line plus one before and after is as follows:\r\n```\r\n]]>\r\n\r\n
\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 986829194, "label": "xml.etree.ElementTree.Parse Error - mismatched tag"}, "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/141#issuecomment-346974336", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/141", "id": 346974336, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Njk3NDMzNg==", "user": {"value": 50138, "label": "janimo"}, "created_at": "2017-11-26T00:00:35Z", "updated_at": "2017-11-26T00:00:35Z", "author_association": "NONE", "body": "FWIW I worked around this by setting TMPDIR to ~/tmp before running the command.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275814941, "label": "datasette publish can fail if /tmp is on a different device"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/124#issuecomment-346987395", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/124", "id": 346987395, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Njk4NzM5NQ==", "user": {"value": 50138, "label": "janimo"}, "created_at": "2017-11-26T06:24:08Z", "updated_at": "2017-11-26T06:24:08Z", "author_association": "NONE", "body": "Are there performance gains when using immutable as opposed to read-only? From what I see other processes can still modify the DB when immutable, but there are no change notifications.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275125805, "label": "Option to open readonly but not immutable"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/124#issuecomment-347123991", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/124", "id": 347123991, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzEyMzk5MQ==", "user": {"value": 50138, "label": "janimo"}, "created_at": "2017-11-27T09:25:15Z", "updated_at": "2017-11-27T09:25:15Z", "author_association": "NONE", "body": "That's the only reference to immutable I saw as well, making me think that there may be no perceivable advantages over simply using mode=ro. Since the database is never or seldom updated the change notifications should not impact performance.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275125805, "label": "Option to open readonly but not immutable"}, "performed_via_github_app": null}