add a dict to save spawner's instances, fix user.server with server

This commit is contained in:
Christian Barra
2017-04-19 03:25:26 +02:00
parent ced8e9f874
commit 2aaf82412d
2 changed files with 26 additions and 13 deletions

View File

@@ -350,11 +350,25 @@ class Spawner(LoggingConfigurable):
"""
).tag(config=True)
_instances = {}
def __init__(self, **kwargs):
super(Spawner, self).__init__(**kwargs)
if self.user.state:
self.load_state(self.user.state)
def save_spawner(self, server_name):
Spawner._instances[server_name] = self
self.server_name = server_name
@classmethod
def get_spawners(cls):
return cls._instances
@classmethod
def get_spawner(cls, server_name):
return cls._instances[server_name]
def load_state(self, state):
"""Restore state of spawner from database.
@@ -469,8 +483,8 @@ class Spawner(LoggingConfigurable):
ns (dict): namespace for string formatting.
"""
d = {'username': self.user.name}
if self.user.server:
d['base_url'] = self.server_base_url
if self.server:
d['base_url'] = self.server.base_url
return d
def format_string(self, s):
@@ -495,7 +509,7 @@ class Spawner(LoggingConfigurable):
"""
args = [
'--user="%s"' % self.user.name,
'--base-url="%s"' % self.server_base_url,
'--base-url="%s"' % self.server.base_url,
'--hub-host="%s"' % self.hub.host,
'--hub-prefix="%s"' % self.hub.server.base_url,
'--hub-api-url="%s"' % self.hub.api_url,
@@ -505,9 +519,9 @@ class Spawner(LoggingConfigurable):
if self.port:
args.append('--port=%i' % self.port)
elif self.user.server.port:
elif self.server.port:
self.log.warning("Setting port from user.server is deprecated as of JupyterHub 0.7.")
args.append('--port=%i' % self.user.server.port)
args.append('--port=%i' % self.server.port)
if self.notebook_dir:
notebook_dir = self.format_string(self.notebook_dir)
@@ -861,8 +875,8 @@ class LocalProcessSpawner(Spawner):
# A deprecation warning will be shown if the subclass
# does not return ip, port.
if self.ip:
self.user.server.ip = self.ip
self.user.server.port = self.port
self.server.ip = self.ip
self.server.port = self.port
return (self.ip or '127.0.0.1', self.port)
@gen.coroutine

View File

@@ -166,9 +166,9 @@ class User(HasTraits):
@property
def proxy_path(self):
if self.settings.get('subdomain_host'):
return url_path_join('/' + self.domain, self.server_base_url)
return url_path_join('/' + self.domain, self.base_url)
else:
return self.server_base_url
return self.base_url
@property
def domain(self):
@@ -235,12 +235,11 @@ class User(HasTraits):
api_token = self.new_api_token()
db.commit()
self.server_base_url = base_url
# here you create the instance
spawner = self.spawner
# Passing server_name and base_url to the spawner
spawner.server_base_url = base_url
spawner.server_name = server_name
spawner.save_spawner(server_name)
spawner.server = server
spawner.user_options = options or {}
# we are starting a new server, make sure it doesn't restore state
spawner.clear_state()