{"html_url": "https://github.com/simonw/datasette/pull/1769#issuecomment-1185536255", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1769", "id": 1185536255, "node_id": "IC_kwDOBm6k_c5Gqdj_", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2022-07-15T13:16:42Z", "updated_at": "2022-07-15T13:16:42Z", "author_association": "NONE", "body": "# [Codecov](https://codecov.io/gh/simonw/datasette/pull/1769?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) Report\n> Merging [#1769](https://codecov.io/gh/simonw/datasette/pull/1769?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) (bb3c610) into [main](https://codecov.io/gh/simonw/datasette/commit/950cc7677f65aa2543067b3bbfc2b6acb98b62c8?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) (950cc76) will **not change** coverage.\n> The diff coverage is `n/a`.\n\n```diff\n@@ Coverage Diff @@\n## main #1769 +/- ##\n=======================================\n Coverage 91.67% 91.67% \n=======================================\n Files 36 36 \n Lines 4658 4658 \n=======================================\n Hits 4270 4270 \n Misses 388 388 \n```\n\n\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/simonw/datasette/pull/1769?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison)\n> `\u0394 = absolute (impact)`, `\u00f8 = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/simonw/datasette/pull/1769?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). Last update [950cc76...bb3c610](https://codecov.io/gh/simonw/datasette/pull/1769?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306020162, "label": "Update pytest-asyncio requirement from <0.19,>=0.17 to >=0.17,<0.20"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185925081", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185925081, "node_id": "IC_kwDOBm6k_c5Gr8fZ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T20:55:41Z", "updated_at": "2022-07-15T20:56:16Z", "author_association": "OWNER", "body": "I think the hook gets called any time any exception makes it to this function: https://github.com/simonw/datasette/blob/950cc7677f65aa2543067b3bbfc2b6acb98b62c8/datasette/app.py#L1374-L1440\r\n\r\nMultiple plugins can register for the hook. If they return a `Response` then that's returned to the user - if they return `None` then they can quietly do something with the error (log it to Sentry for example) and let some other handler return a response.\r\n\r\nI think Datasette should have a default plugin hook implementation which returns the 500 error page.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185929360", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185929360, "node_id": "IC_kwDOBm6k_c5Gr9iQ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T20:58:11Z", "updated_at": "2022-07-15T20:58:11Z", "author_association": "OWNER", "body": "Proposed hook design:\r\n```python\r\n@hookspec\r\ndef handle_exception(datasette, request, exception):\r\n \"\"\"Handle an uncaught exception\"\"\"\r\n```\r\nIt takes `request` in case it needs to render a template and pass the request to it.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185931417", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185931417, "node_id": "IC_kwDOBm6k_c5Gr-CZ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T20:59:25Z", "updated_at": "2022-07-15T20:59:25Z", "author_association": "OWNER", "body": "... maybe it should take `send`? But then how would plugins know that another plugin hadn't already used `send` to send a response, and avoid two trying to send at the same time?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185933972", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185933972, "node_id": "IC_kwDOBm6k_c5Gr-qU", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:00:56Z", "updated_at": "2022-07-15T21:00:56Z", "author_association": "OWNER", "body": "It's weird to return a `Response` though because the code in question lives in `DatasetteRouter` which currently works outside of the layer where responses happen - everything in that class at the moment works using `send` directly.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185935764", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185935764, "node_id": "IC_kwDOBm6k_c5Gr_GU", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:02:00Z", "updated_at": "2022-07-15T21:02:12Z", "author_association": "OWNER", "body": "Returning a `Response` is by far the most intuitive way to design this though. Plugin authors shouldn't care that `DatasetteRouter` (an undocumented internal API of Datasette) doesn't currently handle responses.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185939664", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185939664, "node_id": "IC_kwDOBm6k_c5GsADQ", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:04:19Z", "updated_at": "2022-07-15T21:04:19Z", "author_association": "OWNER", "body": "I'll implement this hook and then release it as `0.62a1`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185943887", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185943887, "node_id": "IC_kwDOBm6k_c5GsBFP", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:07:53Z", "updated_at": "2022-07-15T21:07:53Z", "author_association": "OWNER", "body": "In `DatasetteRouter` I'm going to rename `handle_500` to `handle_exception` because it already deals with error codes other than 500 (`Forbidden` exceptions become 403 and `Base400` become 400).", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185944799", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185944799, "node_id": "IC_kwDOBm6k_c5GsBTf", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:09:08Z", "updated_at": "2022-07-15T21:09:08Z", "author_association": "OWNER", "body": "Had to lookup that `Base400` thing: https://github.com/simonw/datasette/blob/950cc7677f65aa2543067b3bbfc2b6acb98b62c8/datasette/utils/asgi.py#L16-L29", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/pull/452#issuecomment-1185949850", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/452", "id": 1185949850, "node_id": "IC_kwDOCGYnMM5GsCia", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2022-07-15T21:15:45Z", "updated_at": "2022-07-15T21:18:34Z", "author_association": "NONE", "body": "# [Codecov](https://codecov.io/gh/simonw/sqlite-utils/pull/452?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) Report\n> Merging [#452](https://codecov.io/gh/simonw/sqlite-utils/pull/452?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) (eef350f) into [main](https://codecov.io/gh/simonw/sqlite-utils/commit/42440d6345c242ee39778045e29143fb550bd2c2?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) (42440d6) will **increase** coverage by `0.00%`.\n> The diff coverage is `100.00%`.\n\n```diff\n@@ Coverage Diff @@\n## main #452 +/- ##\n=======================================\n Coverage 96.60% 96.61% \n=======================================\n Files 6 6 \n Lines 2534 2540 +6 \n=======================================\n+ Hits 2448 2454 +6 \n Misses 86 86 \n```\n\n\n| [Impacted Files](https://codecov.io/gh/simonw/sqlite-utils/pull/452?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison) | Coverage \u0394 | |\n|---|---|---|\n| [sqlite\\_utils/db.py](https://codecov.io/gh/simonw/sqlite-utils/pull/452/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison#diff-c3FsaXRlX3V0aWxzL2RiLnB5) | `97.53% <100.00%> (+0.01%)` | :arrow_up: |\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/simonw/sqlite-utils/pull/452?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison)\n> `\u0394 = absolute (impact)`, `\u00f8 = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/simonw/sqlite-utils/pull/452?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). Last update [42440d6...eef350f](https://codecov.io/gh/simonw/sqlite-utils/pull/452?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Simon+Willison).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1299760627, "label": "Add duplicate table feature"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/449#issuecomment-1185970114", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/449", "id": 1185970114, "node_id": "IC_kwDOCGYnMM5GsHfC", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:46:13Z", "updated_at": "2022-07-15T21:46:13Z", "author_association": "OWNER", "body": "Documentation:\r\n- https://sqlite-utils.datasette.io/en/latest/python-api.html#duplicating-tables\r\n- https://sqlite-utils.datasette.io/en/latest/reference.html#sqlite_utils.db.Table.duplicate", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1279863844, "label": "Utilities for duplicating tables and creating a table with the results of a query"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/454#issuecomment-1185971600", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/454", "id": 1185971600, "node_id": "IC_kwDOCGYnMM5GsH2Q", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:48:23Z", "updated_at": "2022-07-15T21:48:23Z", "author_association": "OWNER", "body": "Documentation:\r\n- https://sqlite-utils.datasette.io/en/latest/cli.html#duplicating-tables\r\n- https://sqlite-utils.datasette.io/en/latest/cli-reference.html#duplicate", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306548397, "label": "CLI command for duplicating tables"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/453#issuecomment-1185974145", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/453", "id": 1185974145, "node_id": "IC_kwDOCGYnMM5GsIeB", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:52:18Z", "updated_at": "2022-07-15T21:52:18Z", "author_association": "OWNER", "body": "I should warn you that this isn't a supported API - I reserve the right to change how it works between release without a major version bump, because it's not part of the documented API surface.\r\n\r\nYou'll be fine if you pin to exact versions of the library though!\r\n\r\nYou may find this recently-documented function useful though: https://sqlite-utils.datasette.io/en/latest/python-api.html#reading-rows-from-a-file\r\n\r\nSee:\r\n- #443\r\n\r\nI'm going to close this issue for the moment, but if anyone wants to submit a PR that cleans up this I'll happily review it.\r\n\r\n", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1303169663, "label": "'unclosed file' warning when using insert_upsert_implementation from Python"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/451#issuecomment-1185975132", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/451", "id": 1185975132, "node_id": "IC_kwDOCGYnMM5GsItc", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:53:42Z", "updated_at": "2022-07-15T21:53:42Z", "author_association": "OWNER", "body": "Documentation can go here: https://sqlite-utils.datasette.io/en/stable/reference.html#sqlite-utils-utils", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1298531653, "label": "Make sqlite_utils.utils.chunks a documented function"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1185982012", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1185982012, "node_id": "IC_kwDOCGYnMM5GsKY8", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:02:59Z", "updated_at": "2022-07-15T22:03:49Z", "author_association": "OWNER", "body": "From https://sqlite-utils.datasette.io/en/latest/cli-reference.html\r\n\r\nCommands that currently have an `--ignore` flag, and their descriptions:\r\n\r\n- `insert`: Ignore records if pk already exists\r\n- `create-table`: If table already exists, do nothing\r\n- `add-foreign-key`: If foreign key already exists, do nothing\r\n- `drop-table`: *description is missing*\r\n- `create-view`: If view already exists, do nothing\r\n- `drop-view`: *description is missing*\r\n\r\nAnd `create-index` has:\r\n\r\n- `--if-not-exists`: Ignore if index already exists", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1185983894", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1185983894, "node_id": "IC_kwDOCGYnMM5GsK2W", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:06:29Z", "updated_at": "2022-07-15T22:37:20Z", "author_association": "OWNER", "body": "Commands that could have `--ignore` added to them:\r\n\r\n- [x] `enable-fts`\r\n- [x] `disable-fts` (not doing)\r\n- [x] `add-column`\r\n- [x] `add-foreign-keys` (decided not to do this)\r\n- [x] `duplicate`\r\n- [x] `add-geometry-column` (decided not to do this)\r\n- [x] `create-spatial-index` (decided not to do this)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/451#issuecomment-1185987117", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/451", "id": 1185987117, "node_id": "IC_kwDOCGYnMM5GsLot", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:09:33Z", "updated_at": "2022-07-15T22:09:33Z", "author_association": "OWNER", "body": "Documentation: https://sqlite-utils.datasette.io/en/latest/reference.html#sqlite-utils-utils-chunks", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1298531653, "label": "Make sqlite_utils.utils.chunks a documented function"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1185988277", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1185988277, "node_id": "IC_kwDOCGYnMM5GsL61", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:11:52Z", "updated_at": "2022-07-15T22:11:52Z", "author_association": "OWNER", "body": "For `enable-fts` I should use `--replace` instead, since that matches how the Python API works: https://github.com/simonw/sqlite-utils/blob/9dd4cf891d9f4565019e030ddc712507ac87b998/sqlite_utils/db.py#L2088-L2106", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1185988480", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1185988480, "node_id": "IC_kwDOCGYnMM5GsL-A", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:12:20Z", "updated_at": "2022-07-15T22:12:20Z", "author_association": "OWNER", "body": "`disable-fts` already fails silently if the table doesn't have FTS setup.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1185993791", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1185993791, "node_id": "IC_kwDOCGYnMM5GsNQ_", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:23:02Z", "updated_at": "2022-07-15T22:23:02Z", "author_association": "OWNER", "body": "`create-spatial-index` is tricky. For consistency with `create-index` it should really use `--if-not-exists` - but under the hood it's not using `IF NOT EXISTS` because those indexes are created using `select CreateSpatialIndex(...)`.\r\n\r\nReally this highlights that `--if-not-exists` is a bad name for that option on `create-index`.\r\n\r\nI'm tempted to add `--ignore` to `create-index` and mark `--if-not-exists` as deprecated - though it will still work because I don't want to release a major version bump.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1185994282", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1185994282, "node_id": "IC_kwDOCGYnMM5GsNYq", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:24:12Z", "updated_at": "2022-07-15T22:24:12Z", "author_association": "OWNER", "body": "I can do this for `--create-index` instead:\r\n```\r\nOptions:\r\n --name TEXT Explicit name for the new index\r\n --unique Make this a unique index\r\n --if-not-exists, --ignore Ignore if index already exists\r\n --analyze Run ANALYZE after creating the index\r\n --load-extension TEXT SQLite extensions to load\r\n -h, --help Show this message and exit.\r\n```\r\nThat supports both names for the option.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1185997860", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1185997860, "node_id": "IC_kwDOCGYnMM5GsOQk", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:32:51Z", "updated_at": "2022-07-15T22:32:51Z", "author_association": "OWNER", "body": "`add-foreign-keys` is enough of a power-feature that I'm happy not to add this there.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1186001408", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1186001408, "node_id": "IC_kwDOCGYnMM5GsPIA", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:37:40Z", "updated_at": "2022-07-15T22:37:40Z", "author_association": "OWNER", "body": "I'm going to skip `add-geometry-column` and `create-spatial-index` as well.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/450#issuecomment-1186002019", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/450", "id": 1186002019, "node_id": "IC_kwDOCGYnMM5GsPRj", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:39:09Z", "updated_at": "2022-07-15T22:39:09Z", "author_association": "OWNER", "body": "Here are all of the changes I made in this issue: https://github.com/simonw/sqlite-utils/compare/e10536c7f59abbb785f092bf83c4ab94c00e31a3...b9a89a0f2c3559989efe65f25a6e1f8fa76fe8b0", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1292060682, "label": "Add --ignore option to more commands"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/sqlite-utils/issues/448#issuecomment-1186002560", "issue_url": "https://api.github.com/repos/simonw/sqlite-utils/issues/448", "id": 1186002560, "node_id": "IC_kwDOCGYnMM5GsPaA", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T22:40:40Z", "updated_at": "2022-07-15T22:40:40Z", "author_association": "OWNER", "body": "This is very strange. GitHub Actions CI here runs against Windows and installs OK.\r\n\r\nMarking this as \"Help wanted\" to see if anyone can figure out what's going on here.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1279144769, "label": "Reading rows from a file => AttributeError: '_io.StringIO' object has no attribute 'readinto'"}, "performed_via_github_app": null}