2929 from .external import nbformat3 as nbformat
3030 from .external .websocket import websocket3 as websocket
3131 from .external .websocket .websocket3 import *
32- from urllib .request import urlopen , Request , ProxyHandler , build_opener , install_opener
33- from urllib .parse import urlparse
34-
35-
36-
32+ from urllib .request import urlopen , Request , ProxyHandler , build_opener , install_opener , HTTPCookieProcessor
33+ from urllib .parse import urlparse , urlencode
34+ from http .cookiejar import CookieJar
3735
3836def install_proxy_opener ():
37+ cookies = CookieJar ()
3938 proxy = ProxyHandler ({})
40- opener = build_opener (proxy )
39+ opener = build_opener (proxy , HTTPCookieProcessor ( cookies ) )
4140 install_opener (opener )
41+ return cookies
4242
43- install_proxy_opener ()
43+ cookies = install_proxy_opener ()
4444
4545def create_uid ():
4646 return str (uuid .uuid4 ())
4747
48- def get_notebooks (baseurl ):
49- target_url = "http://%s/notebooks" % baseurl
48+ def get_notebooks (baseurl , psswd = None ):
5049 try :
50+ if psswd != None :
51+ target_url = baseurl + '''/login?next=%2F'''
52+ urlopen (target_url , data = urlencode ({'password' : psswd }).encode ('utf8' ))
53+ target_url = baseurl + "/notebooks"
5154 req = urlopen (target_url )
5255 try :
5356 encoding = req .headers .get_content_charset ()
5457 body = req .readall ().decode (encoding )
5558 except AttributeError :
5659 body = req .read ()
60+ if '<input type="password" name="password" id="password_input">' in body :
61+ return 'psswd'
5762 data = json .loads (body )
5863 return data
5964 except Exception as e :
@@ -63,7 +68,7 @@ def get_notebooks(baseurl):
6368
6469def create_new_notebook (baseurl ):
6570 try :
66- req = urlopen ("http://" + baseurl + "/new" )
71+ req = urlopen (baseurl + "/new" )
6772 try :
6873 encoding = req .headers .get_content_charset ()
6974 body = req .readall ().decode (encoding )
@@ -285,20 +290,20 @@ def get_kernel_id(self):
285290 raise Exception ("notebook_id not found" )
286291
287292 def start_kernel (self ):
288- url = "http://" + self .baseurl + "/kernels?notebook=" + self .notebook_id
293+ url = self .baseurl + "/kernels?notebook=" + self .notebook_id
289294 req = urlopen (url , data = b"" ) # data="" makes it POST request
290295 req .read ()
291296 self .create_websockets ()
292297
293298 def restart_kernel (self ):
294- url = "http://" + self .baseurl + "/kernels/" + self .kernel_id + "/restart"
299+ url = self .baseurl + "/kernels/" + self .kernel_id + "/restart"
295300 req = urlopen (url , data = b"" )
296301 req .read ()
297302 self .create_websockets ()
298303 self .status_callback ("idle" )
299304
300305 def interrupt_kernel (self ):
301- url = "http://" + self .baseurl + "/kernels/" + self .kernel_id + "/interrupt"
306+ url = self .baseurl + "/kernels/" + self .kernel_id + "/interrupt"
302307 req = urlopen (url , data = bytearray (b"" ))
303308 req .read ()
304309
@@ -311,7 +316,7 @@ def get_notebook(self):
311316
312317 @property
313318 def notebook_url (self ):
314- return "http://" + self .baseurl + "/notebooks/" + self .notebook_id
319+ return self .baseurl + "/notebooks/" + self .notebook_id
315320
316321 def save_notebook (self , notebook ):
317322 request = Request (self .notebook_url , str (notebook ).encode (self .encoding ))
@@ -400,15 +405,17 @@ def create_websockets(self):
400405 if self .iopub is not None :
401406 self .iopub .close ()
402407
403- url = "ws://" + self .baseurl + "/kernels/" + self .kernel_id + "/"
408+ url = self .baseurl .replace ('http' , 'ws' ) + "/kernels/" + self .kernel_id + "/"
409+ auth = '' .join ([c .name + '=' + c .value for c in cookies ])
404410 self .shell = websocket .WebSocketApp (url = url + "shell" ,
405411 on_message = lambda ws , msg : self .on_shell_msg (msg ),
406- on_open = lambda ws : ws .send ("" ),
412+ on_open = lambda ws : ws .send (auth ),
407413 on_error = lambda ws , err : print (err ))
408414 self .iopub = websocket .WebSocketApp (url = url + "iopub" ,
409415 on_message = lambda ws , msg : self .on_iopub_msg (msg ),
410- on_open = lambda ws : ws .send ("" ),
411- on_error = lambda ws , err : print (err ))
416+ on_open = lambda ws : ws .send (auth ),
417+ on_error = lambda ws , err : print (err )
418+ )
412419
413420 _thread .start_new_thread (self .shell .run_forever , ())
414421 _thread .start_new_thread (self .iopub .run_forever , ())
0 commit comments