{"html_url": "https://github.com/simonw/datasette/issues/567#issuecomment-590667545", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/567", "id": 590667545, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDY2NzU0NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T03:40:49Z", "updated_at": "2020-02-25T03:40:49Z", "author_association": "OWNER", "body": "Closing this in favour of #682 - a mechanism for writing to databases from a clue which is being developed in pull request #683.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 476573875, "label": "Datasette Edit"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/683#issuecomment-590679273", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/683", "id": 590679273, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDY3OTI3Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T04:37:21Z", "updated_at": "2020-02-25T04:37:21Z", "author_association": "OWNER", "body": "I'm happy with this now. I'm going to merge to master.", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 570101428, "label": ".execute_write() and .execute_write_fn() methods on Database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/684#issuecomment-590681375", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/684", "id": 590681375, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDY4MTM3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T04:47:01Z", "updated_at": "2020-02-25T04:47:01Z", "author_association": "OWNER", "body": "This page here: https://datasette.readthedocs.io/en/latest/internals.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 570301333, "label": "Add documentation on Database introspection methods to internals.rst"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/683#issuecomment-590681676", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/683", "id": 590681676, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDY4MTY3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T04:48:29Z", "updated_at": "2020-02-25T04:48:29Z", "author_association": "OWNER", "body": "Documentation: https://datasette.readthedocs.io/en/latest/internals.html#await-db-execute-write-sql-params-none-block-false", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 570101428, "label": ".execute_write() and .execute_write_fn() methods on Database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/685#issuecomment-590682210", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/685", "id": 590682210, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDY4MjIxMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T04:50:53Z", "updated_at": "2020-02-25T04:50:53Z", "author_association": "OWNER", "body": "Current implementations:\r\n\r\nhttps://github.com/simonw/datasette/blob/a093c5f79fa034a97d2ad8b606745dd3b80365af/datasette/database.py#L103-L168\r\n\r\nAt the very least the method name `execute_against_connection_in_thread()` should be updated to something that's more similar to the new (and documented) `.execute_write_fn()` method.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 570309546, "label": "Document (and reconsider design of) Database.execute() and Database.execute_against_connection_in_thread()"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/668#issuecomment-590687137", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/668", "id": 590687137, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDY4NzEzNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T05:11:35Z", "updated_at": "2020-02-25T05:11:35Z", "author_association": "OWNER", "body": "I can imitate how `shapefile-to-SQLite` does it: https://github.com/simonw/shapefile-to-sqlite/blob/5e3fb00eb1eee6ae0103a9ce4167a5e5ec17cf9f/shapefile_to_sqlite/utils.py#L105", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 563347679, "label": "Make it easier to load SpatiaLite"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/676#issuecomment-590697977", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/676", "id": 590697977, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDY5Nzk3Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T05:57:24Z", "updated_at": "2020-02-25T05:57:24Z", "author_association": "OWNER", "body": "OK, this is in master now. You can install master using:\r\n\r\n pip install https://github.com/simonw/datasette/archive/master.zip\r\n\r\nDocumentation here: https://datasette.readthedocs.io/en/latest/json_api.html#special-table-arguments", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 568091133, "label": "?_searchmode=raw option for running FTS searches without escaping characters"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/683#issuecomment-590610180", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/683", "id": 590610180, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDYxMDE4MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T00:00:07Z", "updated_at": "2020-02-25T00:00:07Z", "author_association": "OWNER", "body": "Basic stuff to cover in unit tests:\r\n- Exercise `.execute_write(sql)` - both with block=True and block=False\r\n- Exercise `.execute_write_fn(fn)` in the same way\r\n- Throw 10 updates in the queue, block on just the last one, check it worked correctly\r\n\r\nI'm going to write these tests directly against a `Database()` object rather than booting up an entire Datasette instance.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 570101428, "label": ".execute_write() and .execute_write_fn() methods on Database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/683#issuecomment-590614896", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/683", "id": 590614896, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDYxNDg5Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T00:16:51Z", "updated_at": "2020-02-25T00:16:51Z", "author_association": "OWNER", "body": "The other problem with the poll-for-UUID-completion idea: how long does this mean Datasette needs to keep holding onto the `WriteTask` objects?\r\n\r\nMaybe we say you only get to ask \"is this UUID still in the queue\" and if the answer is \"no\" then you assume the task has been completed.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 570101428, "label": ".execute_write() and .execute_write_fn() methods on Database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/683#issuecomment-590617822", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/683", "id": 590617822, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MDYxNzgyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T00:26:48Z", "updated_at": "2020-02-25T00:26:48Z", "author_association": "OWNER", "body": "This failing test is a nasty one - the whole thing just hangs (so I imagine Travis will run for a while before hopefully giving up). Here's what happens if I add `--full-trace` and then hit Ctrl+C to cancel a test run:\r\n```\r\n$ pytest -k test_execute_write_fn_block_true --full-trace\r\n=================================================================== test session starts ===================================================================\r\nplatform darwin -- Python 3.7.5, pytest-5.2.4, py-1.8.1, pluggy-0.13.1\r\nrootdir: /Users/simonw/Dropbox/Development/datasette, inifile: pytest.ini\r\nplugins: asyncio-0.10.0\r\ncollected 410 items / 409 deselected / 1 selected \r\n\r\ntests/test_database.py ^C^C\r\n\r\n================================================================= 409 deselected in 4.45s =================================================================\r\nTraceback (most recent call last):\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/main.py\", line 193, in wrap_session\r\n session.exitstatus = doit(config, session) or 0\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/main.py\", line 237, in _main\r\n config.hook.pytest_runtestloop(session=session)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/hooks.py\", line 286, in __call__\r\n return self._hookexec(self, self.get_hookimpls(), kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 93, in _hookexec\r\n return self._inner_hookexec(hook, methods, kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 87, in \r\n firstresult=hook.spec.opts.get(\"firstresult\") if hook.spec else False,\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 208, in _multicall\r\n return outcome.get_result()\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 80, in get_result\r\n raise ex[1].with_traceback(ex[2])\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 187, in _multicall\r\n res = hook_impl.function(*args)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/main.py\", line 258, in pytest_runtestloop\r\n item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/hooks.py\", line 286, in __call__\r\n return self._hookexec(self, self.get_hookimpls(), kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 93, in _hookexec\r\n return self._inner_hookexec(hook, methods, kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 87, in \r\n firstresult=hook.spec.opts.get(\"firstresult\") if hook.spec else False,\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 208, in _multicall\r\n return outcome.get_result()\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 80, in get_result\r\n raise ex[1].with_traceback(ex[2])\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 187, in _multicall\r\n res = hook_impl.function(*args)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/runner.py\", line 80, in pytest_runtest_protocol\r\n runtestprotocol(item, nextitem=nextitem)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/runner.py\", line 95, in runtestprotocol\r\n reports.append(call_and_report(item, \"call\", log))\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/runner.py\", line 176, in call_and_report\r\n call = call_runtest_hook(item, when, **kwds)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/runner.py\", line 201, in call_runtest_hook\r\n lambda: ihook(item=item, **kwds), when=when, reraise=reraise\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/runner.py\", line 229, in from_call\r\n result = func()\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/runner.py\", line 201, in \r\n lambda: ihook(item=item, **kwds), when=when, reraise=reraise\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/hooks.py\", line 286, in __call__\r\n return self._hookexec(self, self.get_hookimpls(), kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 93, in _hookexec\r\n return self._inner_hookexec(hook, methods, kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 87, in \r\n firstresult=hook.spec.opts.get(\"firstresult\") if hook.spec else False,\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 208, in _multicall\r\n return outcome.get_result()\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 80, in get_result\r\n raise ex[1].with_traceback(ex[2])\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 187, in _multicall\r\n res = hook_impl.function(*args)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/runner.py\", line 125, in pytest_runtest_call\r\n item.runtest()\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/python.py\", line 1429, in runtest\r\n self.ihook.pytest_pyfunc_call(pyfuncitem=self)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/hooks.py\", line 286, in __call__\r\n return self._hookexec(self, self.get_hookimpls(), kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 93, in _hookexec\r\n return self._inner_hookexec(hook, methods, kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 87, in \r\n firstresult=hook.spec.opts.get(\"firstresult\") if hook.spec else False,\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 208, in _multicall\r\n return outcome.get_result()\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 80, in get_result\r\n raise ex[1].with_traceback(ex[2])\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 187, in _multicall\r\n res = hook_impl.function(*args)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pytest_asyncio/plugin.py\", line 158, in pytest_pyfunc_call\r\n pyfuncitem.obj(**testargs), loop=event_loop))\r\n File \"/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py\", line 566, in run_until_complete\r\n self.run_forever()\r\n File \"/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py\", line 534, in run_forever\r\n self._run_once()\r\n File \"/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py\", line 1735, in _run_once\r\n event_list = self._selector.select(timeout)\r\n File \"/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/selectors.py\", line 558, in select\r\n kev_list = self._selector.control(None, max_ev, timeout)\r\nKeyboardInterrupt\r\n\r\nDuring handling of the above exception, another exception occurred:\r\n\r\nTraceback (most recent call last):\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/bin/pytest\", line 8, in \r\n sys.exit(main())\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/config/__init__.py\", line 90, in main\r\n return config.hook.pytest_cmdline_main(config=config)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/hooks.py\", line 286, in __call__\r\n return self._hookexec(self, self.get_hookimpls(), kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 93, in _hookexec\r\n return self._inner_hookexec(hook, methods, kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 87, in \r\n firstresult=hook.spec.opts.get(\"firstresult\") if hook.spec else False,\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 208, in _multicall\r\n return outcome.get_result()\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 80, in get_result\r\n raise ex[1].with_traceback(ex[2])\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 187, in _multicall\r\n res = hook_impl.function(*args)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/main.py\", line 230, in pytest_cmdline_main\r\n return wrap_session(config, _main)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/main.py\", line 209, in wrap_session\r\n config.hook.pytest_keyboard_interrupt(excinfo=excinfo)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/hooks.py\", line 286, in __call__\r\n return self._hookexec(self, self.get_hookimpls(), kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 93, in _hookexec\r\n return self._inner_hookexec(hook, methods, kwargs)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/manager.py\", line 87, in \r\n firstresult=hook.spec.opts.get(\"firstresult\") if hook.spec else False,\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 208, in _multicall\r\n return outcome.get_result()\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 80, in get_result\r\n raise ex[1].with_traceback(ex[2])\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/pluggy/callers.py\", line 187, in _multicall\r\n res = hook_impl.function(*args)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/terminal.py\", line 680, in pytest_keyboard_interrupt\r\n self._keyboardinterrupt_memo = excinfo.getrepr(funcargs=True)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/_code/code.py\", line 598, in getrepr\r\n return fmt.repr_excinfo(self)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/_code/code.py\", line 830, in repr_excinfo\r\n reprtraceback = self.repr_traceback(excinfo)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/_code/code.py\", line 778, in repr_traceback\r\n reprentry = self.repr_traceback_entry(entry, einfo)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/_code/code.py\", line 737, in repr_traceback_entry\r\n reprargs = self.repr_args(entry) if not short else None\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/_code/code.py\", line 656, in repr_args\r\n args.append((argname, saferepr(argvalue)))\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/_io/saferepr.py\", line 67, in saferepr\r\n return SafeRepr(maxsize).repr(obj)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/_pytest/_io/saferepr.py\", line 36, in repr\r\n s = super().repr(x)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/reprlib.py\", line 52, in repr\r\n return self.repr1(x, self.maxlevel)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/reprlib.py\", line 60, in repr1\r\n return getattr(self, 'repr_' + typename)(x, level)\r\n File \"/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/reprlib.py\", line 112, in repr_dict\r\n for key in islice(_possibly_sorted(x), self.maxdict):\r\nKeyboardInterrupt\r\nTask was destroyed but it is pending!\r\ntask: wait_for=()]>>\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 570101428, "label": ".execute_write() and .execute_write_fn() methods on Database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/666#issuecomment-591049024", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/666", "id": 591049024, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MTA0OTAyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T20:19:09Z", "updated_at": "2020-02-25T20:19:09Z", "author_association": "OWNER", "body": "This is great, thanks!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 562085508, "label": "Use inspect-file, if possible, for total row count"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/684#issuecomment-591062343", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/684", "id": 591062343, "node_id": "MDEyOklzc3VlQ29tbWVudDU5MTA2MjM0Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-02-25T20:50:32Z", "updated_at": "2020-02-25T20:50:32Z", "author_association": "OWNER", "body": "More important is to document `execute()` - see #685 ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 570301333, "label": "Add documentation on Database introspection methods to internals.rst"}, "performed_via_github_app": null}