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) ).tag(config=True)
_instances = {}
def __init__(self, **kwargs): def __init__(self, **kwargs):
super(Spawner, self).__init__(**kwargs) super(Spawner, self).__init__(**kwargs)
if self.user.state: if self.user.state:
self.load_state(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): def load_state(self, state):
"""Restore state of spawner from database. """Restore state of spawner from database.
@@ -469,8 +483,8 @@ class Spawner(LoggingConfigurable):
ns (dict): namespace for string formatting. ns (dict): namespace for string formatting.
""" """
d = {'username': self.user.name} d = {'username': self.user.name}
if self.user.server: if self.server:
d['base_url'] = self.server_base_url d['base_url'] = self.server.base_url
return d return d
def format_string(self, s): def format_string(self, s):
@@ -495,7 +509,7 @@ class Spawner(LoggingConfigurable):
""" """
args = [ args = [
'--user="%s"' % self.user.name, '--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-host="%s"' % self.hub.host,
'--hub-prefix="%s"' % self.hub.server.base_url, '--hub-prefix="%s"' % self.hub.server.base_url,
'--hub-api-url="%s"' % self.hub.api_url, '--hub-api-url="%s"' % self.hub.api_url,
@@ -505,9 +519,9 @@ class Spawner(LoggingConfigurable):
if self.port: if self.port:
args.append('--port=%i' % 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.") 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: if self.notebook_dir:
notebook_dir = self.format_string(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 # A deprecation warning will be shown if the subclass
# does not return ip, port. # does not return ip, port.
if self.ip: if self.ip:
self.user.server.ip = self.ip self.server.ip = self.ip
self.user.server.port = self.port self.server.port = self.port
return (self.ip or '127.0.0.1', self.port) return (self.ip or '127.0.0.1', self.port)
@gen.coroutine @gen.coroutine

View File

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