88from textwrap import dedent
99from urllib .parse import urlparse , urlunparse
1010
11- def get_env_value (env_var_name ):
12- '''
13- Get the value of os.environ[env_var_name] if it is set, else return the default.
14- Currently, defaults provdied are:
15- RSERVER_FRAME_ORIGIN: 'same'
16- NB_USER: getpass.getuser(),
17- RSERVER_TIMEOUT: 15.0,
18- RSESSION_TIMEOUT: 15.0
19- Returns: the value of the environment variable if present; the default value
20- if not. Returns None if the environment variable is not present and
21- env_var_name is not a key of the default dictionary. Returns the default
22- if the variable is expected to be numeric and the provided value in the
23- environment is non-numeric
24- '''
25- env_var_defaults = {
26- 'RSERVER_FRAME_ORIGIN' : 'some' ,
27- 'NB_USER' : getpass .getuser (),
28- 'RSERVER_TIMEOUT' : 15.0 ,
29- 'RSESSION_TIMEOUT' : 15.0
30- }
31- numeric_values = {'RSERVER_TIMEOUT' , 'RSESSION_TIMEOUT' }
32- default_value = env_var_defaults [env_var_name ] if env_var_name in env_var_defaults else None
33- value = os .environ .get (env_var_name , default_value )
34- if env_var_name in numeric_values :
35- # Make sure we return a numeric value
36- try :
37- return float (value )
38- except Exception :
39- return default_value
40- else :
41- return value
4211
4312def get_rstudio_executable (prog ):
4413 # Find prog in known locations
@@ -78,14 +47,12 @@ def get_system_user():
7847 try :
7948 user = pwd .getpwuid (os .getuid ())[0 ]
8049 except :
81- user = get_env_value ('NB_USER' )
50+ user = os . getenv ('NB_USER' , getpass . getuser () )
8251 return (user )
8352
8453def setup_rserver ():
8554 def _get_env (port ):
8655 return dict (USER = get_system_user ())
87-
88-
8956
9057 def db_config (db_dir ):
9158 '''
@@ -110,6 +77,12 @@ def _support_arg(arg):
11077 ret = subprocess .check_output ([get_rstudio_executable ('rserver' ), '--help' ])
11178 return ret .decode ().find (arg ) != - 1
11279
80+ def _get_www_frame_origin (default = "same" ):
81+ try :
82+ return os .getenv ('JUPYTER_RSESSION_PROXY_WWW_FRAME_ORIGIN' , default )
83+ except Exception :
84+ return default
85+
11386 def _get_cmd (port ):
11487 ntf = tempfile .NamedTemporaryFile ()
11588
@@ -121,7 +94,7 @@ def _get_cmd(port):
12194 cmd = [
12295 get_rstudio_executable ('rserver' ),
12396 '--auth-none=1' ,
124- f '--www-frame-origin={ get_env_value ( "RSERVER_FRAME_ORIGIN" ) } ' ,
97+ '--www-frame-origin=' + _get_www_frame_origin () ,
12598 '--www-port=' + str (port ),
12699 '--www-verify-user-agent=0' ,
127100 '--secure-cookie-key-file=' + ntf .name ,
@@ -138,10 +111,15 @@ def _get_cmd(port):
138111
139112 return cmd
140113
114+ def _get_timeout (default = 15 ):
115+ try :
116+ return float (os .getenv ('RSERVER_TIMEOUT' , default ))
117+ except Exception :
118+ return default
141119
142120 server_process = {
143121 'command' : _get_cmd ,
144- 'timeout' : get_env_value ( 'RSERVER_TIMEOUT' ),
122+ 'timeout' : _get_timeout ( ),
145123 'environment' : _get_env ,
146124 'rewrite_response' : rewrite_netloc ,
147125 'launcher_entry' : {
@@ -190,7 +168,7 @@ def _get_timeout(default=15):
190168
191169 return {
192170 'command' : _get_cmd ,
193- 'timeout' : get_env_value ( 'RSESSION_TIMEOUT' ),
171+ 'timeout' : _get_timeout ( ),
194172 'environment' : _get_env ,
195173 'launcher_entry' : {
196174 'title' : 'RStudio' ,
0 commit comments