Emacs IPython Notebook and Jupyterhub

101 views
Skip to first unread message

John Miller

unread,
Jul 21, 2017, 6:22:20 PM7/21/17
to jup...@googlegroups.com
Getting EIN working with Jupyterhub has been a long standing request, and I
have been trying to get this implemented the past couple days. Unfortunately
I've come against a wall and wonder if someone here might be able to provide
some guidance.

At the moment I am using the REST API as documented on the website
(https://jupyterhub.readthedocs.io/en/latest/_static/rest-api/index.html)
and things go pretty well, up to a certain point. Here is the sequence of
events I have programmed:

1. After supplying a url, user name, and password, ein sends a query to
'/hub/api/authorizations/token'.
2. We store the token, make sure the Authorization header looks like the
example code at (https://jupyterhub.readthedocs.io/en/latest/rest.html) then
query '/hub/api/user/[user]/server' to start a notebook server.
3. EIN queries '/hub/api/user/[user]' to get information about this user,
most importantly we are looking for the server path for the newly started
server.
4. Use the server path to use EIN's usual facilities for accessing the
notebook server.

Things work great up until step 4. EIN will try querying, as an example,
'http://127.0.0.1:8000/user/millejoh/api/contents' and Jupyterhub will
respond by redirecting to the hub login page. Interestingly enough a call to
'http://127.0.0.1:8000/user/millejoh/api' works as expected, that is it will
return JSON with the version of the running notebook server.

Apparently authenticating via '/hub/api/authentications/token' doesn't
really authenticate, at least as far as access to the contents API is
concerned? Is there something else EIN needs to be doing to ingratiate
itself to jupyterhub and convince the hub it really is a nice guy/gal and
promises to play nice with everyone?

Best regards,

John



John Miller

unread,
Jul 22, 2017, 11:11:48 AM7/22/17
to jup...@googlegroups.com
After some additional sleuthing I realized I wasn't passing the
'Authorization' header with the contents API request. Thinking this might be
the problem I added the header, but then got the following response in the
console running jupyterhub:

[E 2017-07-22 10:05:45.125 JupyterHub web:1590] Uncaught exception GET
/hub/user/millejoh/api/contents/ (::ffff:127.0.0.1)
HTTPServerRequest(protocol='http', host='127.0.0.1:8000', method='GET',
uri='/hub/user/millejoh/api/contents/', version='HTTP/1.1',
remote_ip='::ffff:127.0.0.1', headers={'X-Forwarded-Host': '127.0.0.1:8000',
'X-Forwarded-Proto': 'http', 'X-Forwarded-Port': '8000', 'X-Forwarded-For':
'::ffff:127.0.0.1', 'Authorization': 'token
bb5e49ad68dc4f5abdaccd954abb8742', 'X-Xsrftoken':
'2|d136b4d2|ee8d84ef6c536241a6e09c36453a9328|1497490250', 'Cookie':
'_xsrf=2|d136b4d2|ee8d84ef6c536241a6e09c36453a9328|1497490250',
'Accept-Encoding': 'deflate, gzip', 'Accept': '*/*', 'User-Agent':
'curl/7.54.0', 'Host': '127.0.0.1:8000', 'Connection': 'close'})
Traceback (most recent call last):
File
"/home/millejoh/miniconda3/envs/jupyterhub/lib/python3.6/site-packages/torna
do/web.py", line 1511, in _execute
result = yield result
File
"/home/millejoh/miniconda3/envs/jupyterhub/lib/python3.6/site-packages/jupyt
erhub/handlers/base.py", line 520, in get
if current_user.spawner:
AttributeError: 'User' object has no attribute 'spawner'

[E 2017-07-22 10:05:45.223 JupyterHub log:99] {
"X-Forwarded-Host": "127.0.0.1:8000",
"X-Forwarded-Proto": "http",
"X-Forwarded-Port": "8000",
"X-Forwarded-For": "::ffff:127.0.0.1",
"Authorization": "token [secret]",
"X-Xsrftoken":
"2|d136b4d2|ee8d84ef6c536241a6e09c36453a9328|1497490250",
"Cookie":
"_xsrf=2|d136b4d2|ee8d84ef6c536241a6e09c36453a9328|1497490250",
"Accept-Encoding": "deflate, gzip",
"Accept": "*/*",
"User-Agent": "curl/7.54.0",
"Host": "127.0.0.1:8000",
"Connection": "close"
}
[E 2017-07-22 10:05:45.225 JupyterHub log:100] 500 GET
/hub/user/millejoh/api/contents/ (millejoh@::ffff:127.0.0.1) 96.56ms

Matthias Bussonnier

unread,
Jul 22, 2017, 1:09:46 PM7/22/17
to jup...@googlegroups.com
Hi John,

> AttributeError: 'User' object has no attribute 'spawner'

That might be a bug in JupyterHub I would suggest opening an issue and
trying out master. I encountered something similar yesterday where
invalid credentials would raise an error and a 500, instead of
replying "invalid credentials".
> --
> You received this message because you are subscribed to the Google Groups "Project Jupyter" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to jupyter+u...@googlegroups.com.
> To post to this group, send email to jup...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/jupyter/000701d302fc%24d41c6080%247c552180%24%40gmail.com.
> For more options, visit https://groups.google.com/d/optout.

John Miller

unread,
Jul 24, 2017, 6:23:38 PM7/24/17
to Project Jupyter
Thanks for the suggestion, Matt. I opened an issue and am installing master as I type.

In case anyone is interested, I am running jupyterhub on Bash for Windows while trying to connect from Emacs on Windows, all on the same machine. What an interesting world...

Alex Payne

unread,
Jul 27, 2017, 1:42:21 PM7/27/17
to Project Jupyter
I'm curious if you'd have better luck with ob-ipython?
I haven't tried it yet but I thought I'd share.
Reply all
Reply to author
Forward
0 new messages