{"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-451704724", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 451704724, "node_id": "MDEyOklzc3VlQ29tbWVudDQ1MTcwNDcyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-01-06T00:32:23Z", "updated_at": "2019-01-06T00:33:44Z", "author_association": "OWNER", "body": "I found a really nice pattern for writing the unit tests for this (though it would look even nicer with a solution to #395)\r\n```python\r\n@pytest.mark.parametrize(\"prefix\", [\"/prefix/\", \"https://example.com/\"])\r\n@pytest.mark.parametrize(\"path\", [\r\n \"/\",\r\n \"/fixtures\",\r\n \"/fixtures/compound_three_primary_keys\",\r\n \"/fixtures/compound_three_primary_keys/a,a,a\",\r\n \"/fixtures/paginated_view\",\r\n])\r\ndef test_url_prefix_config(prefix, path):\r\n for client in make_app_client(config={\r\n \"url_prefix\": prefix,\r\n }):\r\n response = client.get(path)\r\n soup = Soup(response.body, \"html.parser\")\r\n for a in soup.findAll(\"a\"):\r\n href = a[\"href\"]\r\n if href not in {\r\n \"https://github.com/simonw/datasette\",\r\n \"https://github.com/simonw/datasette/blob/master/LICENSE\",\r\n \"https://github.com/simonw/datasette/blob/master/tests/fixtures.py\",\r\n }:\r\n assert href.startswith(prefix), (href, a.parent)\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-499320973", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 499320973, "node_id": "MDEyOklzc3VlQ29tbWVudDQ5OTMyMDk3Mw==", "user": {"value": 13896256, "label": "kevindkeogh"}, "created_at": "2019-06-06T02:07:59Z", "updated_at": "2019-06-06T02:07:59Z", "author_association": "CONTRIBUTOR", "body": "Hey was this ever merged? Trying to run this behind nginx, and encountering this issue.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-499923145", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 499923145, "node_id": "MDEyOklzc3VlQ29tbWVudDQ5OTkyMzE0NQ==", "user": {"value": 13896256, "label": "kevindkeogh"}, "created_at": "2019-06-07T15:10:57Z", "updated_at": "2019-06-07T15:11:07Z", "author_association": "CONTRIBUTOR", "body": "Putting this here in case anyone else encounters the same issue with nginx, I was able to resolve it by passing the header in the nginx proxy config (i.e., `proxy_set_header Host $host`).", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-556749086", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 556749086, "node_id": "MDEyOklzc3VlQ29tbWVudDU1Njc0OTA4Ng==", "user": {"value": 639012, "label": "jsfenfen"}, "created_at": "2019-11-21T01:15:34Z", "updated_at": "2019-11-21T01:21:45Z", "author_association": "CONTRIBUTOR", "body": "Hey @simonw is the url_prefix config option available in another branch, it looks like you've written some tests for it above? In 0.32 I get \"url_prefix is not a valid option\". I think this would be *really helpful*!\r\n\r\nThis would be really handy for proxying datasette in another domain's *subdirectory* I believe this will allow folks to run upstream authentication, but the links break if the url_prefix doesn't match. \r\n\r\nI'd prefer not to host a proxied version of datasette on a subdomain (e.g. datasette.myurl.com b/c then I gotta worry about sharing authorization cookies with the subdomain, which I just assume not do, but...)\r\n\r\nEdit: I see the wip-url-prefix branch, I may try with that https://github.com/simonw/datasette/commit/8da2db4b71096b19e7a9ef1929369b8483d448bf", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-567127981", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 567127981, "node_id": "MDEyOklzc3VlQ29tbWVudDU2NzEyNzk4MQ==", "user": {"value": 132978, "label": "terrycojones"}, "created_at": "2019-12-18T17:18:06Z", "updated_at": "2019-12-18T17:18:06Z", "author_association": "NONE", "body": "Agreed, this would be nice to have. I'm currently working around it in `nginx` with additional location blocks:\r\n\r\n```\r\n\r\n location /datasette/ {\r\n proxy_pass http://127.0.0.1:8001/;\r\n proxy_redirect off;\r\n include proxy_params;\r\n }\r\n\r\n location /dna-protein-genome/ {\r\n proxy_pass http://127.0.0.1:8001/dna-protein-genome/;\r\n proxy_redirect off;\r\n include proxy_params;\r\n }\r\n\r\n location /rna-protein-genome/ {\r\n proxy_pass http://127.0.0.1:8001/rna-protein-genome/;\r\n proxy_redirect off;\r\n include proxy_params;\r\n }\r\n```\r\n\r\nThe 2nd and 3rd above are my databases. This works, but I have a small problem with URLs like `/rna-protein-genome?params....` that I could fix with some more nginx munging. I seem to do this sort of thing once every 5 years and then have to look it all up again.\r\n\r\nThanks!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-567128636", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 567128636, "node_id": "MDEyOklzc3VlQ29tbWVudDU2NzEyODYzNg==", "user": {"value": 132978, "label": "terrycojones"}, "created_at": "2019-12-18T17:19:46Z", "updated_at": "2019-12-18T17:19:46Z", "author_association": "NONE", "body": "Hmmm, wait, maybe my mindless (copy/paste) use of `proxy_redirect` is causing me grief...", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-567133734", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 567133734, "node_id": "MDEyOklzc3VlQ29tbWVudDU2NzEzMzczNA==", "user": {"value": 639012, "label": "jsfenfen"}, "created_at": "2019-12-18T17:33:23Z", "updated_at": "2019-12-18T17:33:23Z", "author_association": "CONTRIBUTOR", "body": "FWIW I did a dumb merge of the branch here: https://github.com/jsfenfen/datasette and it seemed to work in that I could run stuff at a subdirectory, but ended up abandoning it in favor of just posting a subdomain because getting the nginx configs right was making me crazy. I still would prefer posting at a subdirectory but the subdomain seems simpler at the moment. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null}
{"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-567219479", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 567219479, "node_id": "MDEyOklzc3VlQ29tbWVudDU2NzIxOTQ3OQ==", "user": {"value": 132978, "label": "terrycojones"}, "created_at": "2019-12-18T21:24:23Z", "updated_at": "2019-12-18T21:24:23Z", "author_association": "NONE", "body": "@simonw What about allowing a base url. The `
View Datasette (Click on the stop button to close the Datasette server)
'))\r\n\r\n # Launch Datasette\r\n with Popen(\r\n [\r\n 'python', '-m', 'datasette', '--',\r\n database,\r\n '--port', str(port),\r\n '--config', f'base_url:{proxy_url}'\r\n ],\r\n stdout=PIPE,\r\n stderr=PIPE,\r\n bufsize=1,\r\n universal_newlines=True\r\n ) as p:\r\n print(p.stdout.readline(), end='')\r\n while True:\r\n try:\r\n line = p.stderr.readline()\r\n if not line:\r\n break\r\n print(line, end='')\r\n exit_code = p.poll()\r\n except KeyboardInterrupt:\r\n p.send_signal(SIGINT)\r\n```\r\n\r\nIdeally, I'd like some extra magic to notify users when they are leaving the closing the notebook tab and make them terminate the running datasette processes. I'll be looking for it.", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 1, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-602916580", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 602916580, "node_id": "MDEyOklzc3VlQ29tbWVudDYwMjkxNjU4MA==", "user": {"value": 132978, "label": "terrycojones"}, "created_at": "2020-03-23T23:37:06Z", "updated_at": "2020-03-23T23:37:06Z", "author_association": "NONE", "body": "@simonw You're welcome - I was just trying it out back in December as I thought it should work. Now there's a pandemic to work on though.... so no time at all for more at the moment. BTW, I have datasette running on several protein and full (virus) genome databases I build, and it's great - thank you! Hi and best regards to you & Nat :-)", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 1, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-602907207", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 602907207, "node_id": "MDEyOklzc3VlQ29tbWVudDYwMjkwNzIwNw==", "user": {"value": 127565, "label": "wragge"}, "created_at": "2020-03-23T23:12:18Z", "updated_at": "2020-03-23T23:12:18Z", "author_association": "CONTRIBUTOR", "body": "This would also be useful for running Datasette in Jupyter notebooks on [Binder](https://mybinder.org/). While you can use [Jupyter-server-proxy](https://github.com/jupyterhub/jupyter-server-proxy) to access Datasette on Binder, the links are broken.\r\n\r\nWhy run Datasette on Binder? I'm developing a [range of Jupyter notebooks](https://glam-workbench.github.io/) that are aimed at getting humanities researchers to explore data from libraries, archives, and museums. Many of them are aimed at researchers with limited digital skills, so being able to run examples in Binder without them installing anything is fantastic.\r\n\r\nFor example, there are a [series of notebooks](https://glam-workbench.github.io/trove-harvester/) that help researchers harvest digitised historical newspaper articles from Trove. The metadata from this harvest is saved as a CSV file that users can download. I've also provided some extra notebooks that use Pandas etc to demonstrate ways of analysing and visualising the harvested data.\r\n\r\nBut it would be really nice if, after completing a harvest, the user could spin up Datasette for some initial exploration of their harvested data without ever leaving their browser.", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/394#issuecomment-603631640", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/394", "id": 603631640, "node_id": "MDEyOklzc3VlQ29tbWVudDYwMzYzMTY0MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-03-25T04:19:08Z", "updated_at": "2020-03-25T04:19:08Z", "author_association": "OWNER", "body": "Shipped in 0.39: https://datasette.readthedocs.io/en/latest/changelog.html#v0-39", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 396212021, "label": "base_url configuration setting"}, "performed_via_github_app": null}