@@ -31,11 +31,20 @@ def get_nestdesktop_executable(prog):
31
31
32
32
raise FileNotFoundError (f'Could not find { prog } in PATH' )
33
33
34
+
34
35
def _nestdesktop_urlparams ():
35
36
36
- url_params = '?' + '&' .join ([
37
- 'token=' + _nestsrv_token ,
38
- ])
37
+ nestsrv_urlparam = None
38
+ if _nestsrv_url :
39
+ nestsrv_urlparam = 'nest_server_url=' + _nestsrv_url
40
+ nestsrv_tokenparam = None
41
+ if _nestsrv_token :
42
+ nestsrv_tokenparam = 'nest_server_access_token=' + _nestsrv_token
43
+
44
+ url_params = ''
45
+ url_paramlist = [param for param in (nestsrv_urlparam , nestsrv_tokenparam ) if param is not None ]
46
+ if url_paramlist :
47
+ url_params = '?' + '&' .join (url_paramlist )
39
48
40
49
return url_params
41
50
@@ -53,13 +62,22 @@ def setup_nestdesktop():
53
62
""" Setup commands and and return a dictionary compatible
54
63
with jupyter-server-proxy.
55
64
"""
65
+ from re import sub
56
66
from tempfile import mkstemp
57
67
from random import choice
58
68
from string import ascii_letters , digits
69
+ from urllib .parse import urlparse
59
70
60
71
global _nestsrv_url , _nestsrv_token
61
72
62
- # password generator
73
+ # check for a free port
74
+ import socket
75
+ s = socket .socket ()
76
+ s .bind (("" , 0 ))
77
+ nestsrv_port = s .getsockname ()[1 ]
78
+ s .close ()
79
+
80
+ # token generator
63
81
def _get_random_alphanumeric_string (length ):
64
82
letters_and_digits = ascii_letters + digits
65
83
return ('' .join ((choice (letters_and_digits ) for i in range (length ))))
@@ -76,17 +94,25 @@ def _get_random_alphanumeric_string(length):
76
94
logger .error ("Passwd generation in temp file FAILED" )
77
95
raise FileNotFoundError ("Passwd generation in temp file FAILED" )
78
96
97
+ # generate nest-server url
98
+ jhub_apiurl = os .environ .get ('JUPYTERHUB_API_URL' )
99
+ jlab_urlprefix = os .environ .get ('JUPYTERHUB_SERVICE_PREFIX' )
100
+ if jhub_apiurl and jlab_urlprefix :
101
+ parsed_url = urlparse (jhub_apiurl )
102
+ _nestsrv_url = (
103
+ f"{ parsed_url .scheme } ://{ parsed_url .netloc } " +
104
+ sub (r'/+' , '/' , '/' .join ([
105
+ jlab_urlprefix ,
106
+ 'proxy' ,
107
+ str (nestsrv_port )
108
+ ]))
109
+ )
110
+ else :
111
+ _nestsrv_url = 'http://localhost:' + str (nestsrv_port )
112
+
79
113
# launchers url file including url parameters
80
114
path_info = 'nestdesktop/index.html' + _nestdesktop_urlparams ()
81
115
82
- # check for a free port
83
- #import socket
84
- #s=socket.socket()
85
- #s.bind(("", 0))
86
- #nestsrv_port = s.getsockname()[1]
87
- #s.close()
88
- nestsrv_port = 52425
89
-
90
116
# create command
91
117
cmd = [
92
118
get_nestdesktop_executable ('nest-desktop' ),
0 commit comments