{"html_url": "https://github.com/simonw/datasette/issues/498#issuecomment-505228873", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/498", "id": 505228873, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTIyODg3Mw==", "user": {"value": 7936571, "label": "chrismp"}, "created_at": "2019-06-25T00:21:17Z", "updated_at": "2019-06-25T00:21:17Z", "author_association": "NONE", "body": "Eh, I'm not concerned with a relevance score right now. I think I'd be fine with a search whose results show links to data tables with at least one result.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 451513541, "label": "Full text search of all tables at once?"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/514#issuecomment-505232675", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/514", "id": 505232675, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTIzMjY3NQ==", "user": {"value": 7936571, "label": "chrismp"}, "created_at": "2019-06-25T00:43:12Z", "updated_at": "2019-06-25T00:43:12Z", "author_association": "NONE", "body": "Yep, that worked to get the site up and running at `my-server.com:8000` but when I edited `run-datasette.sh` to contain this...\r\n\r\n```\r\n#!/bin/bash\r\n/home/chris/Env/datasette/bin/datasette serve -h 0.0.0.0 -p 80 /home/chris/digital-library/databases/*.db --cors --metadata /home/chris/digital-library/metadata.json\r\n```\r\n\r\nI got this error.\r\n\r\n```\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: [2019-06-25 02:42:41 +0200] [752] [INFO] Goin' Fast @ http://0.0.0.0:80\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: [2019-06-25 02:42:41 +0200] [752] [ERROR] Unable to start server\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: Traceback (most recent call last):\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"uvloop/loop.pyx\", line 1111, in uvloop.loop.Loop._create_server\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"uvloop/handles/tcp.pyx\", line 89, in uvloop.loop.TCPServer.bind\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"uvloop/handles/streamserver.pyx\", line 95, in uvloop.loop.UVStreamServer._fatal_error\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"uvloop/handles/tcp.pyx\", line 87, in uvloop.loop.TCPServer.bind\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"uvloop/handles/tcp.pyx\", line 26, in uvloop.loop.__tcp_bind\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: PermissionError: [Errno 13] Permission denied\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: During handling of the above exception, another exception occurred:\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: Traceback (most recent call last):\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"/home/chris/Env/datasette/lib/python3.7/site-packages/sanic/server.py\", line 591, in serve\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: http_server = loop.run_until_complete(server_coroutine)\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"uvloop/loop.pyx\", line 1451, in uvloop.loop.Loop.run_until_complete\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"uvloop/loop.pyx\", line 1684, in create_server\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: File \"uvloop/loop.pyx\", line 1116, in uvloop.loop.Loop._create_server\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: PermissionError: [Errno 13] error while attempting to bind on address ('0.0.0.0', 80): permission denied\r\nJun 25 02:42:41 ns331247 run-datasette.sh[747]: [2019-06-25 02:42:41 +0200] [752] [INFO] Server Stopped\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": 459397625, "label": "Documentation with recommendations on running Datasette in production without using Docker"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/521#issuecomment-505279560", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/521", "id": 505279560, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTI3OTU2MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-25T04:40:16Z", "updated_at": "2019-06-25T04:40:38Z", "author_association": "OWNER", "body": "I think the trick is to redefine what a \"cell_row\" is. Each row is currently a list of cells:\r\n\r\nhttps://github.com/simonw/datasette/blob/6341f8cbc7833022012804dea120b838ec1f6558/datasette/views/table.py#L159-L163\r\n\r\nI can redefine the row (the `cells` variable in the above example) as a thing-that-iterates-cells (hence behaving like a list) but that also supports `__getitem__` access for looking up cell values if you know the name of the column.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 459621683, "label": "Easier way of creating custom row templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/521#issuecomment-505280611", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/521", "id": 505280611, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTI4MDYxMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-25T04:46:10Z", "updated_at": "2019-06-25T04:46:10Z", "author_association": "OWNER", "body": "Of course I can't do it in this part of he code because it's constructing plain JSON objects here. \r\n\r\nI'll need to do it in the section that prepares special objects for the HTML.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 459621683, "label": "Easier way of creating custom row templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/521#issuecomment-505405030", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/521", "id": 505405030, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTQwNTAzMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-25T11:34:21Z", "updated_at": "2019-06-25T11:34:21Z", "author_association": "OWNER", "body": "Actually I'm OK here - `display_columns_and_rows()` is already only used by the HTML template rendering path.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 459621683, "label": "Easier way of creating custom row templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/521#issuecomment-505421892", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/521", "id": 505421892, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTQyMTg5Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-25T12:26:54Z", "updated_at": "2019-06-25T12:26:54Z", "author_association": "OWNER", "body": "This is starting to shape up. Example template:\r\n```\r\n{% for row in display_rows %}\r\n
\r\n
\r\n

\r\n {{ row[\"First_Name\"] }} {{ row[\"Last_Name\"] }}\r\n

\r\n {% if row[\"Link_to_Photo\"] %}\r\n \r\n {% endif %}\r\n {% for cell in row.cells[3:] %}\r\n {% if cell.raw and cell.column != \"createdTime\" %}\r\n

{{ cell.column }}: {{ cell.value }}

\r\n {% endif %}\r\n {% endfor %}\r\n
\r\n{% endfor %}\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 459621683, "label": "Easier way of creating custom row templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/521#issuecomment-505422550", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/521", "id": 505422550, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTQyMjU1MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-25T12:28:48Z", "updated_at": "2019-06-25T12:28:48Z", "author_association": "OWNER", "body": "Still needed before merge: documentation! I can expand this section: https://datasette.readthedocs.io/en/stable/custom_templates.html#custom-templates", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 459621683, "label": "Easier way of creating custom row templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/529#issuecomment-505424665", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/529", "id": 505424665, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTQyNDY2NQ==", "user": {"value": 1383872, "label": "nathancahill"}, "created_at": "2019-06-25T12:35:07Z", "updated_at": "2019-06-25T12:35:07Z", "author_association": "NONE", "body": "Opps, wrote this late last night, didn't see you'd already worked on the issue.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 460396952, "label": "Use keyed rows - fixes #521"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/498#issuecomment-505635729", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/498", "id": 505635729, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNTYzNTcyOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-25T21:48:46Z", "updated_at": "2019-06-25T21:48:46Z", "author_association": "OWNER", "body": "Hmmm... you know I think I actually need this for my https://github.com/simonw/fara-datasette project...\r\n\r\nhttps://fara.datasettes.com/fara?sql=select+1+as+sortme%2C+%27FARA_All_RegistrantDocs%27+as+%27table%27%2C+rowid+as+id%2C+Document_Type+%7C%7C+%27+%27+%7C%7C+Short_Form_Name+%7C%7C+%27+for+%27+%7C%7C+Registrant_Name+as+title%0D%0Afrom+FARA_All_RegistrantDocs%0D%0A++where+rowid+in+%28select+rowid+from+FARA_All_RegistrantDocs_fts+where+FARA_All_RegistrantDocs_fts+match+%3Asearch%0D%0A++++order+by+rank+limit+10%0D%0A%29%0D%0Aunion%0D%0Aselect+2+as+sortme%2C+%27FARA_All_ForeignPrincipals%27+as+%27table%27%2C+rowid+as+id%2C+Foreign_Principal+%7C%7C+%27+for+%27+%7C%7C+%22Country%2FLocation_Represented%22+as+title%0D%0Afrom+FARA_All_ForeignPrincipals%0D%0A++where+rowid+in+%28select+rowid+from+FARA_All_ForeignPrincipals_fts+where+FARA_All_ForeignPrincipals_fts+match+%3Asearch%0D%0A++++order+by+rank+limit+10%0D%0A%29%0D%0Aunion%0D%0Aselect+3+as+sortme%2C+%27FARA_All_Registrants%27+as+%27table%27%2C+rowid+as+id%2C+Name+%7C%7C+%27+on+%27+%7C%7C+Registration_Date+%7C%7C+%27+in+%27+%7C%7C+City+as+title%0D%0Afrom+FARA_All_Registrants%0D%0A++where+rowid+in+%28select+rowid+from+FARA_All_Registrants_fts+where+FARA_All_Registrants_fts+match+%3Asearch%0D%0A++++order+by+rank+limit+10%0D%0A%29%0D%0Aunion%0D%0Aselect+4+as+sortme%2C+%27FARA_All_ShortForms%27+as+%27table%27%2C+rowid+as+id%2C+Short_Form_First_Name+%7C%7C+%27+%27+%7C%7C+Short_Form_Last_Name+%7C%7C+%27+in+%27+%7C%7C+City+as+title%0D%0Afrom+FARA_All_ShortForms%0D%0A++where+rowid+in+%28select+rowid+from+FARA_All_ShortForms_fts+where+FARA_All_ShortForms_fts+match+%3Asearch%0D%0A++++order+by+rank+limit+10%0D%0A%29%0D%0A%0D%0A&search=cohen", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 451513541, "label": "Full text search of all tables at once?"}, "performed_via_github_app": null}