{"html_url": "https://github.com/simonw/datasette/issues/1277#issuecomment-808641846", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1277", "id": 808641846, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY0MTg0Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T03:49:34Z", "updated_at": "2021-03-27T03:49:34Z", "author_association": "OWNER", "body": "I fixed this already, it's a duplicate of #1239", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 842212586, "label": "Facet by array breaks if table name contains a space"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1276#issuecomment-808642405", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1276", "id": 808642405, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY0MjQwNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T03:53:18Z", "updated_at": "2021-03-27T03:53:18Z", "author_association": "OWNER", "body": "That's really odd. What version of SQLite are you using on the server? You can tell by visiting `https://your-site/-/versions`", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 841456306, "label": "Invalid SQL: \"no such table: pragma_database_list\" on database page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1272#issuecomment-808647937", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1272", "id": 808647937, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY0NzkzNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T04:23:19Z", "updated_at": "2021-03-27T04:23:36Z", "author_association": "OWNER", "body": "Part of the challenge here is only running if a Docker daemon is available. I think this pattern works, in `tests/test_dockerfile.py`:\r\n```python\r\nimport httpx\r\nimport pathlib\r\nimport pytest\r\nimport subprocess\r\n\r\nroot = pathlib.Path(__file__).parent.parent\r\n\r\ndef docker_is_available():\r\n try:\r\n client = httpx.Client(\r\n transport=httpx.HTTPTransport(uds=\"/var/run/docker.sock\")\r\n )\r\n client.get(\"http://docker/info\")\r\n return True\r\n except httpx.ConnectError:\r\n return False\r\n\r\n\r\n@pytest.fixture\r\ndef build_container():\r\n assert (root / \"Dockerfile\").exists()\r\n subprocess.check_call([\r\n \"docker\", \"build\", str(root), \"-t\", \"datasette-dockerfile-test\"\r\n ])\r\n\r\n\r\n@pytest.mark.skipif(not docker_is_available(),\r\n reason=\"Docker is not available\"\r\n)\r\ndef test_dockerfile(build_container):\r\n output = subprocess.check_output([\r\n \"docker\", \"run\", \"datasette-dockerfile-test\", \"datasette\", \"--get\", \"/_memory?sql=select+1&shape=_array\"\r\n ])\r\n assert False, \"Implement better assertion here\"\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 838245338, "label": "Unit tests for the Dockerfile"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1272#issuecomment-808648974", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1272", "id": 808648974, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY0ODk3NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T04:29:42Z", "updated_at": "2021-03-27T04:29:42Z", "author_association": "OWNER", "body": "I'm skipping this for the moment because the new Dockerfile shape introduced in https://github.com/simonw/datasette/issues/1249#issuecomment-804404544 isn't compatible with this technique, since it installs Datasette from PyPI rather than directly from the repo.\r\n\r\nWill need to change that if I want to do this unit tests thing.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 838245338, "label": "Unit tests for the Dockerfile"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1249#issuecomment-808649322", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1249", "id": 808649322, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY0OTMyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T04:31:28Z", "updated_at": "2021-03-27T04:31:28Z", "author_association": "OWNER", "body": "One last test of that Dockerfile:\r\n```\r\n(datasette) datasette % docker build -f Dockerfile -t datasetteproject/datasette:0.55a --build-arg VERSION=0.55 .\r\n(datasette) datasette % docker run datasetteproject/datasette:0.55a datasette --get '/-/versions.json' | jq\r\n{\r\n \"python\": {\r\n \"version\": \"3.9.2\",\r\n \"full\": \"3.9.2 (default, Feb 19 2021, 17:23:45) \\n[GCC 8.3.0]\"\r\n },\r\n \"datasette\": {\r\n \"version\": \"0.55\"\r\n },\r\n \"asgi\": \"3.0\",\r\n \"uvicorn\": \"0.13.4\",\r\n \"sqlite\": {\r\n \"version\": \"3.27.2\",\r\n \"fts_versions\": [\r\n \"FTS5\",\r\n \"FTS4\",\r\n \"FTS3\"\r\n ],\r\n \"extensions\": {\r\n \"json1\": null\r\n },\r\n \"compile_options\": [\r\n \"COMPILER=gcc-8.3.0\",\r\n \"ENABLE_COLUMN_METADATA\",\r\n \"ENABLE_DBSTAT_VTAB\",\r\n \"ENABLE_FTS3\",\r\n \"ENABLE_FTS3_PARENTHESIS\",\r\n \"ENABLE_FTS3_TOKENIZER\",\r\n \"ENABLE_FTS4\",\r\n \"ENABLE_FTS5\",\r\n \"ENABLE_JSON1\",\r\n \"ENABLE_LOAD_EXTENSION\",\r\n \"ENABLE_PREUPDATE_HOOK\",\r\n \"ENABLE_RTREE\",\r\n \"ENABLE_SESSION\",\r\n \"ENABLE_STMTVTAB\",\r\n \"ENABLE_UNLOCK_NOTIFY\",\r\n \"ENABLE_UPDATE_DELETE_LIMIT\",\r\n \"HAVE_ISNAN\",\r\n \"LIKE_DOESNT_MATCH_BLOBS\",\r\n \"MAX_SCHEMA_RETRY=25\",\r\n \"MAX_VARIABLE_NUMBER=250000\",\r\n \"OMIT_LOOKASIDE\",\r\n \"SECURE_DELETE\",\r\n \"SOUNDEX\",\r\n \"TEMP_STORE=1\",\r\n \"THREADSAFE=1\",\r\n \"USE_URI\"\r\n ]\r\n }\r\n}\r\n(datasette) datasette % docker run datasetteproject/datasette:0.55a datasette --get '/-/versions.json' --load-extension=spatialite | jq\r\n{\r\n \"python\": {\r\n \"version\": \"3.9.2\",\r\n \"full\": \"3.9.2 (default, Feb 19 2021, 17:23:45) \\n[GCC 8.3.0]\"\r\n },\r\n \"datasette\": {\r\n \"version\": \"0.55\"\r\n },\r\n \"asgi\": \"3.0\",\r\n \"uvicorn\": \"0.13.4\",\r\n \"sqlite\": {\r\n \"version\": \"3.27.2\",\r\n \"fts_versions\": [\r\n \"FTS5\",\r\n \"FTS4\",\r\n \"FTS3\"\r\n ],\r\n \"extensions\": {\r\n \"json1\": null,\r\n \"spatialite\": \"5.0.1\"\r\n },\r\n \"compile_options\": [\r\n \"COMPILER=gcc-8.3.0\",\r\n \"ENABLE_COLUMN_METADATA\",\r\n \"ENABLE_DBSTAT_VTAB\",\r\n \"ENABLE_FTS3\",\r\n \"ENABLE_FTS3_PARENTHESIS\",\r\n \"ENABLE_FTS3_TOKENIZER\",\r\n \"ENABLE_FTS4\",\r\n \"ENABLE_FTS5\",\r\n \"ENABLE_JSON1\",\r\n \"ENABLE_LOAD_EXTENSION\",\r\n \"ENABLE_PREUPDATE_HOOK\",\r\n \"ENABLE_RTREE\",\r\n \"ENABLE_SESSION\",\r\n \"ENABLE_STMTVTAB\",\r\n \"ENABLE_UNLOCK_NOTIFY\",\r\n \"ENABLE_UPDATE_DELETE_LIMIT\",\r\n \"HAVE_ISNAN\",\r\n \"LIKE_DOESNT_MATCH_BLOBS\",\r\n \"MAX_SCHEMA_RETRY=25\",\r\n \"MAX_VARIABLE_NUMBER=250000\",\r\n \"OMIT_LOOKASIDE\",\r\n \"SECURE_DELETE\",\r\n \"SOUNDEX\",\r\n \"TEMP_STORE=1\",\r\n \"THREADSAFE=1\",\r\n \"USE_URI\"\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": 824064069, "label": "Updated Dockerfile with SpatiaLite version 5.0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1249#issuecomment-808649480", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1249", "id": 808649480, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY0OTQ4MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T04:32:10Z", "updated_at": "2021-03-27T04:32:10Z", "author_association": "OWNER", "body": "I'll close this issue after I ship Datasette 0.56 and confirm that the Dockerfile was correctly built and published to Docker Hub.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 824064069, "label": "Updated Dockerfile with SpatiaLite version 5.0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1258#issuecomment-808650266", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1258", "id": 808650266, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY1MDI2Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T04:37:07Z", "updated_at": "2021-03-27T04:37:07Z", "author_association": "OWNER", "body": "I like that idea.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 828858421, "label": "Allow canned query params to specify default values"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1258#issuecomment-808651088", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1258", "id": 808651088, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY1MTA4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T04:41:52Z", "updated_at": "2021-03-27T04:42:14Z", "author_association": "OWNER", "body": "Right now they look like this:\r\n```yaml\r\ndatabases:\r\n fixtures:\r\n queries:\r\n neighborhood_search:\r\n params:\r\n - text\r\n```\r\nIn addition to being able to specify defaults, I'd also like to add other things in the future - most significantly the ability to specify a different input widget (e.g. textarea v.s. single-line input)\r\n\r\nSo maybe this looks like:\r\n```yaml\r\nparams:\r\n- name: text\r\n default: \"\"\r\n- name: age\r\n widget: number\r\n```", "reactions": "{\"total_count\": 2, \"+1\": 2, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 828858421, "label": "Allow canned query params to specify default values"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1278#issuecomment-808652008", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1278", "id": 808652008, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODY1MjAwOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T04:47:17Z", "updated_at": "2021-03-27T04:47:17Z", "author_association": "OWNER", "body": "https://github.com/simonw/timezones-api is that project, it's pretty old now. I'll try to get it running on Cloud Run.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 842416110, "label": "SpatiaLite timezones demo is broken"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1278#issuecomment-808756366", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1278", "id": 808756366, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODc1NjM2Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T16:15:47Z", "updated_at": "2021-03-27T16:15:47Z", "author_association": "OWNER", "body": "https://timezones-api.datasette.io/ is now up and running on Cloud Run.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 842416110, "label": "SpatiaLite timezones demo is broken"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1273#issuecomment-808756921", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1273", "id": 808756921, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODc1NjkyMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T16:19:45Z", "updated_at": "2021-03-27T16:26:28Z", "author_association": "OWNER", "body": "I have a better recipe for using spatial indexes now on https://simonwillison.net/2021/Jan/24/drawing-shapes-spatialite/\r\n```sql\r\nselect\r\n AsGeoJSON(geometry), *\r\nfrom\r\n CPAD_2020a_SuperUnits\r\nwhere\r\n PARK_NAME like '%mini%' and\r\n Intersects(GeomFromGeoJSON(:freedraw), geometry) = 1\r\n and CPAD_2020a_SuperUnits.rowid in (\r\n select\r\n rowid\r\n from\r\n SpatialIndex\r\n where\r\n f_table_name = 'CPAD_2020a_SuperUnits'\r\n and search_frame = GeomFromGeoJSON(:freedraw)\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": 838382890, "label": "Refresh SpatiaLite documentation"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1090#issuecomment-808757155", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1090", "id": 808757155, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODc1NzE1NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T16:21:43Z", "updated_at": "2021-03-27T16:21:43Z", "author_association": "OWNER", "body": "Idea for these: imitate https://django-sql-dashboard.readthedocs.io/en/latest/widgets.html#custom-widgets and drive them with templates.\r\n\r\nSo a custom widget type of `textarea` would look for a template called `widgets/textarea.html` - which means users could define brand new custom widgets just by creating their own template files.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 741862364, "label": "Custom widgets for canned query forms"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1090#issuecomment-808757659", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1090", "id": 808757659, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODc1NzY1OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T16:25:25Z", "updated_at": "2021-03-27T16:25:25Z", "author_association": "OWNER", "body": "Related feature request: ability to set default values for canned queries: #1258", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 741862364, "label": "Custom widgets for canned query forms"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1273#issuecomment-808757721", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1273", "id": 808757721, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODc1NzcyMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T16:25:48Z", "updated_at": "2021-03-27T16:25:48Z", "author_association": "OWNER", "body": "> This will give you back an additional column of GeoJSON. You can copy and paste GeoJSON from this column into the debugging tool at geojson.io to visualize it on a map.\r\n\r\nThat should promote `datasette-leaflet-geojson` instead.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 838382890, "label": "Refresh SpatiaLite documentation"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1273#issuecomment-808759984", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1273", "id": 808759984, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODc1OTk4NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2021-03-27T16:43:17Z", "updated_at": "2021-03-27T16:43:17Z", "author_association": "OWNER", "body": "That rivers example in the tutorial would work a lot better with a live demo.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 838382890, "label": "Refresh SpatiaLite documentation"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1279#issuecomment-808762613", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1279", "id": 808762613, "node_id": "MDEyOklzc3VlQ29tbWVudDgwODc2MjYxMw==", "user": {"value": 22429695, "label": "codecov[bot]"}, "created_at": "2021-03-27T17:03:37Z", "updated_at": "2021-03-27T17:03:37Z", "author_association": "NONE", "body": "# [Codecov](https://codecov.io/gh/simonw/datasette/pull/1279?src=pr&el=h1) Report\n> Merging [#1279](https://codecov.io/gh/simonw/datasette/pull/1279?src=pr&el=desc) (14d8977) into [main](https://codecov.io/gh/simonw/datasette/commit/3fcfc8513465339ac5f055296cbb67f5262af02b?el=desc) (3fcfc85) will **not change** coverage.\n> The diff coverage is `n/a`.\n\n[![Impacted file tree graph](https://codecov.io/gh/simonw/datasette/pull/1279/graphs/tree.svg?width=650&height=150&src=pr&token=eSahVY7kw1)](https://codecov.io/gh/simonw/datasette/pull/1279?src=pr&el=tree)\n\n```diff\n@@ Coverage Diff @@\n## main #1279 +/- ##\n=======================================\n Coverage 91.51% 91.51% \n=======================================\n Files 34 34 \n Lines 4255 4255 \n=======================================\n Hits 3894 3894 \n Misses 361 361 \n```\n\n\n\n------\n\n[Continue to review full report at Codecov](https://codecov.io/gh/simonw/datasette/pull/1279?src=pr&el=continue).\n> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)\n> `\u0394 = absolute (impact)`, `\u00f8 = not affected`, `? = missing data`\n> Powered by [Codecov](https://codecov.io/gh/simonw/datasette/pull/1279?src=pr&el=footer). Last update [3fcfc85...14d8977](https://codecov.io/gh/simonw/datasette/pull/1279?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 842556944, "label": "Minor Docs Update. Added `--app` to fly install command."}, "performed_via_github_app": null}