html_url,issue_url,id,node_id,user,user_label,created_at,updated_at,author_association,body,reactions,issue,issue_label,performed_via_github_app
https://github.com/simonw/datasette/issues/674#issuecomment-586623462,https://api.github.com/repos/simonw/datasette/issues/674,586623462,MDEyOklzc3VlQ29tbWVudDU4NjYyMzQ2Mg==,9599,simonw,2020-02-15T17:36:53Z,2020-03-26T17:19:23Z,OWNER,"... actually we don't need to do that, we have a mechanism for that already:
https://github.com/simonw/datasette/blob/f1442a8151f66ceef6517b6d3d045e2ec1d0f0ec/tests/build_small_spatialite_db.py","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",565552217,Rethink how sanity checks work,
https://github.com/simonw/datasette/issues/394#issuecomment-604166918,https://api.github.com/repos/simonw/datasette/issues/394,604166918,MDEyOklzc3VlQ29tbWVudDYwNDE2NjkxOA==,127565,wragge,2020-03-26T00:56:30Z,2020-03-26T00:56:30Z,CONTRIBUTOR,"Thanks! I'm trying to launch Datasette from *within* a notebook using the jupyter-server-proxy and the new `base_url` parameter. While the assets load ok, and the breadcrumb navigation works, the facet links don't seem to use the `base_url`. Or have I missed something?
My test repository is here: https://github.com/wragge/datasette-test","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",396212021,base_url configuration setting,
https://github.com/simonw/datasette/issues/712#issuecomment-604193362,https://api.github.com/repos/simonw/datasette/issues/712,604193362,MDEyOklzc3VlQ29tbWVudDYwNDE5MzM2Mg==,9599,simonw,2020-03-26T02:32:57Z,2020-03-26T02:32:57Z,OWNER,"Weird... the unit test I just added passes. So suggested facets look like they're OK.
And yet the demo in https://mybinder.org/v2/gh/wragge/datasette-test/master?urlpath=lab doesn't work.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604194598,https://api.github.com/repos/simonw/datasette/issues/712,604194598,MDEyOklzc3VlQ29tbWVudDYwNDE5NDU5OA==,9599,simonw,2020-03-26T02:37:46Z,2020-03-26T02:37:46Z,OWNER,"Here's the truncatted HTML for https://hub.gke.mybinder.org/user/wragge-datasette-test-czqms2oy/proxy/8001/results/articles
```html
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604194872,https://api.github.com/repos/simonw/datasette/issues/712,604194872,MDEyOklzc3VlQ29tbWVudDYwNDE5NDg3Mg==,9599,simonw,2020-03-26T02:38:48Z,2020-03-26T04:04:04Z,OWNER,"I have a hunch about this: maybe the URLs that work are the ones that use `{{ base_url }}` directly in the template, while the ones that break are the ones that reconstruct the URL based on the incoming path?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604195244,https://api.github.com/repos/simonw/datasette/issues/712,604195244,MDEyOklzc3VlQ29tbWVudDYwNDE5NTI0NA==,9599,simonw,2020-03-26T02:40:23Z,2020-03-26T04:17:57Z,OWNER,"Here's the output of the `/-/asgi-scope` plugin:
```
{'client': ('10.12.3.15', 0),
'headers': [(b'cookie',
b''),
(b'upgrade-insecure-requests', b'1'),
(b'dnt', b'1'),
(b'accept-encoding', b'gzip'),
(b'accept-language', b'en-US,en;q=0.5'),
(b'accept',
b'text/html,application/xhtml+xml,application/xml;q=0.9,image/'
b'webp,*/*;q=0.8'),
(b'user-agent',
b'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:74.0) Gecko'
b'/20100101 Firefox/74.0'),
(b'x-scheme', b'https'),
(b'x-original-uri',
b'/user/wragge-datasette-test-czqms2oy/proxy/8001/-/asgi-scope'),
(b'x-forwarded-proto', b'https,http'),
(b'x-forwarded-port', b'443,80'),
(b'x-forwarded-host', b'hub.gke.mybinder.org'),
(b'x-forwarded-for', b'148.64.98.14,10.12.3.15'),
(b'x-real-ip', b'148.64.98.14'),
(b'connection', b'close'),
(b'host', b'hub.gke.mybinder.org'),
(b'x-forwarded-context',
b'/user/wragge-datasette-test-czqms2oy/proxy/8001'),
(b'x-proxycontextpath',
b'/user/wragge-datasette-test-czqms2oy/proxy/8001')],
'http_version': '1.1',
'method': 'GET',
'path': '/-/asgi-scope',
'query_string': b'',
'raw_path': b'/-/asgi-scope',
'root_path': '',
'scheme': 'https,http',
'server': ('127.0.0.1', 8001),
'type': 'http'}
```
From this output... it looks like the `path` being passed through to Datasette is still `/-/asgi-scope` here when I though it would be `/user/wragge-datasette-test-czqms2oy/proxy/8001/-/asgi-scope`
The original URL path (the one I want) is passed in the `x-original-uri` HTTP header.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604195577,https://api.github.com/repos/simonw/datasette/issues/712,604195577,MDEyOklzc3VlQ29tbWVudDYwNDE5NTU3Nw==,9599,simonw,2020-03-26T02:41:40Z,2020-03-26T02:41:40Z,OWNER,Aha! It turns out my demo at https://github.com/simonw/jupyterserverproxy-datasette-demo suffers from the same bug.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604196158,https://api.github.com/repos/simonw/datasette/issues/712,604196158,MDEyOklzc3VlQ29tbWVudDYwNDE5NjE1OA==,9599,simonw,2020-03-26T02:43:47Z,2020-03-26T04:20:15Z,OWNER,"I think the solution here may be to let the incoming `x-original-uri` header over-ride the `raw_path` used by Datasette. This may require a new Datasette setting - maybe this:
--config path_from_header:x-original-uri","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604218449,https://api.github.com/repos/simonw/datasette/issues/712,604218449,MDEyOklzc3VlQ29tbWVudDYwNDIxODQ0OQ==,9599,simonw,2020-03-26T04:12:59Z,2020-03-26T04:15:18Z,OWNER,"I'm running this latest release like so:
Launch this binder: https://mybinder.org/v2/gh/wragge/datasette-test/master?urlpath=lab
Open the notebook.
In the notebook run this:
!pip install datasette-debug-asgi https://github.com/simonw/datasette/archive/7b205af0b53c92d17b69f8c95d70a24a0c06ebce.zip
And use this block to run Datasette:
```
# Get current running servers
servers = list_running_servers()
# Get the current base url
base_url = next(servers)['base_url']
# Create a base url for Datasette suing the proxy path
proxy_url = f'{base_url}proxy/8001/'
# Display a link to Datasette
display(HTML(f'
View Datasette (Click on the stop button to close the Datasette server)
'))
# Launch Datasette
!datasette -- results.db --port 8001 --config base_url:$proxy_url --config path_from_header:x-original-uri --config template_debug:1
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604219753,https://api.github.com/repos/simonw/datasette/issues/712,604219753,MDEyOklzc3VlQ29tbWVudDYwNDIxOTc1Mw==,9599,simonw,2020-03-26T04:18:13Z,2020-03-26T04:18:13Z,OWNER,"Woohoo that worked!
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604225034,https://api.github.com/repos/simonw/datasette/issues/712,604225034,MDEyOklzc3VlQ29tbWVudDYwNDIyNTAzNA==,127565,wragge,2020-03-26T04:40:08Z,2020-03-26T04:40:08Z,CONTRIBUTOR,"Great! Yes, can confirm that this works on Binder. However, when I try to run the same code locally, I get an Internal Server Error when I try to access Datasette.
```
ERROR: Exception in ASGI application
Traceback (most recent call last):
File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/uvicorn/protocols/http/httptools_impl.py"", line 385, in run_asgi
result = await app(self.scope, self.receive, self.send)
File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/uvicorn/middleware/proxy_headers.py"", line 45, in __call__
return await self.app(scope, receive, send)
File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/datasette_debug_asgi.py"", line 24, in wrapped_app
await app(scope, recieve, send)
File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/datasette/utils/asgi.py"", line 174, in __call__
await self.app(scope, receive, send)
File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/datasette/tracer.py"", line 75, in __call__
await self.app(scope, receive, send)
File ""/Volumes/Workspace/mycode/datasette-test/lib/python3.7/site-packages/datasette/app.py"", line 746, in __call__
raw_path = dict(scope[""headers""])[path_from_header.encode(""utf8"")].split(b""?"")[0]
KeyError: b'x-original-uri'
INFO: 127.0.0.1:49320 - ""GET / HTTP/1.1"" 500 Internal Server Error
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604249402,https://api.github.com/repos/simonw/datasette/issues/712,604249402,MDEyOklzc3VlQ29tbWVudDYwNDI0OTQwMg==,127565,wragge,2020-03-26T06:11:44Z,2020-03-26T06:11:44Z,CONTRIBUTOR,"Following on from @betatim's suggestion on Twitter, I've changed the proxy url to include 'absolute'.
``` python
proxy_url = f'{base_url}proxy/absolute/8001/'
```
This works both on Binder and locally, without using the `path_from_header` option. I've updated the demo repository. Sorry @simonw if I've led you down the wrong path!","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/573#issuecomment-604328163,https://api.github.com/repos/simonw/datasette/issues/573,604328163,MDEyOklzc3VlQ29tbWVudDYwNDMyODE2Mw==,82988,psychemedia,2020-03-26T09:41:30Z,2020-03-26T09:41:30Z,CONTRIBUTOR,Fixed by @simonw; example here: https://github.com/simonw/jupyterserverproxy-datasette-demo,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",492153532,Exposing Datasette via Jupyter-server-proxy,
https://github.com/simonw/datasette/issues/712#issuecomment-604466523,https://api.github.com/repos/simonw/datasette/issues/712,604466523,MDEyOklzc3VlQ29tbWVudDYwNDQ2NjUyMw==,9599,simonw,2020-03-26T14:35:43Z,2020-03-26T14:35:43Z,OWNER,"Hooray! This is a really great fix, thanks.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/issues/712#issuecomment-604486651,https://api.github.com/repos/simonw/datasette/issues/712,604486651,MDEyOklzc3VlQ29tbWVudDYwNDQ4NjY1MQ==,9599,simonw,2020-03-26T15:11:49Z,2020-03-26T15:11:49Z,OWNER,"And for https://github.com/simonw/jupyterserverproxy-datasette-demo setting `""absolute_url"": True` appears to fix the bug as well (it previously caused an infinite redirect loop but that seems not to happen any more with the latest `base_url` setting): https://github.com/simonw/jupyterserverproxy-datasette-demo/commit/880f9d50566357160b793557f145c99e74ad759a","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",588108428,base_url doesn't entirely work for running Datasette inside Binder,
https://github.com/simonw/datasette/pull/672#issuecomment-604561639,https://api.github.com/repos/simonw/datasette/issues/672,604561639,MDEyOklzc3VlQ29tbWVudDYwNDU2MTYzOQ==,9599,simonw,2020-03-26T17:22:07Z,2020-03-26T17:22:07Z,OWNER,"Here's the new utility function I should be using to verify database files that I find:
https://github.com/simonw/datasette/blob/6aa516d82dea9885cb4db8d56ec2ccfd4cd9b840/datasette/utils/__init__.py#L773-L787","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",565064079,--dirs option for scanning directories for SQLite databases,
https://github.com/simonw/datasette/pull/672#issuecomment-604569063,https://api.github.com/repos/simonw/datasette/issues/672,604569063,MDEyOklzc3VlQ29tbWVudDYwNDU2OTA2Mw==,9599,simonw,2020-03-26T17:32:06Z,2020-03-26T17:32:06Z,OWNER,"While running it against a nested directory with a TON of databases I kept seeing errors like this:
```
Traceback (most recent call last):
File ""/Users/simonw/Dropbox/Development/datasette/datasette/utils/asgi.py"", line 121, in route_path
return await view(new_scope, receive, send)
File ""/Users/simonw/Dropbox/Development/datasette/datasette/utils/asgi.py"", line 193, in view
request, **scope[""url_route""][""kwargs""]
File ""/Users/simonw/Dropbox/Development/datasette/datasette/views/index.py"", line 58, in get
tables[table][""num_relationships_for_sorting""] = count
KeyError: 'primary-candidates-2018/rep_candidates'
```
And
```
Traceback (most recent call last):
File ""/Users/simonw/Dropbox/Development/datasette/datasette/utils/asgi.py"", line 121, in route_path
return await view(new_scope, receive, send)
File ""/Users/simonw/Dropbox/Development/datasette/datasette/utils/asgi.py"", line 193, in view
request, **scope[""url_route""][""kwargs""]
File ""/Users/simonw/Dropbox/Development/datasette/datasette/views/index.py"", line 58, in get
tables[table][""num_relationships_for_sorting""] = count
KeyError: 'space_used'
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",565064079,--dirs option for scanning directories for SQLite databases,
https://github.com/simonw/datasette/pull/672#issuecomment-604665229,https://api.github.com/repos/simonw/datasette/issues/672,604665229,MDEyOklzc3VlQ29tbWVudDYwNDY2NTIyOQ==,9599,simonw,2020-03-26T20:22:48Z,2020-03-26T20:22:48Z,OWNER,"I also eventually get this error:
```
Traceback (most recent call last):
File ""/Users/simonw/Dropbox/Development/datasette/datasette/utils/asgi.py"", line 121, in route_path
return await view(new_scope, receive, send)
File ""/Users/simonw/Dropbox/Development/datasette/datasette/utils/asgi.py"", line 336, in inner_static
await asgi_send_file(send, full_path, chunk_size=chunk_size)
File ""/Users/simonw/Dropbox/Development/datasette/datasette/utils/asgi.py"", line 303, in asgi_send_file
async with aiofiles.open(str(filepath), mode=""rb"") as fp:
File ""/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/aiofiles/base.py"", line 78, in __aenter__
File ""/Users/simonw/.local/share/virtualenvs/datasette-oJRYYJuA/lib/python3.7/site-packages/aiofiles/threadpool/__init__.py"", line 35, in _open
File ""/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/concurrent/futures/thread.py"", line 57, in run
OSError: [Errno 24] Too many open files: '/Users/simonw/Dropbox/Development/datasette/datasette/static/app.css'
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",565064079,--dirs option for scanning directories for SQLite databases,
https://github.com/simonw/datasette/pull/672#issuecomment-604667029,https://api.github.com/repos/simonw/datasette/issues/672,604667029,MDEyOklzc3VlQ29tbWVudDYwNDY2NzAyOQ==,9599,simonw,2020-03-26T20:26:46Z,2020-03-26T20:26:46Z,OWNER,"I think I can tell what the current file limit is like so:
```
In [1]: import resource
In [2]: resource.getrlimit(resource.RLIMIT_NOFILE)
Out[2]: (256, 9223372036854775807)
```
So maybe I should have Datasette refuse to open more database files than that number minus 5 (to give me some spare room for opening CSS files etc).","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",565064079,--dirs option for scanning directories for SQLite databases,