add default_server_name, change spawn start

This commit is contained in:
Christian Barra
2017-01-21 14:56:36 +01:00
parent 5b85d1e248
commit f4a7e28aa5
2 changed files with 23 additions and 6 deletions

View File

@@ -12,7 +12,7 @@ from tornado.log import app_log
from sqlalchemy import inspect from sqlalchemy import inspect
from .utils import url_path_join from .utils import url_path_join, default_server_name
from . import orm from . import orm
from traitlets import HasTraits, Any, Dict, observe, default from traitlets import HasTraits, Any, Dict, observe, default
@@ -204,18 +204,20 @@ class User(HasTraits):
"""Start the user's spawner """Start the user's spawner
Because there could be more then one server per user Because there could be more then one server per user
each server has to have a unique reference (UUID4) each server has to have a unique name between the servers of a given user
base_url is built using user's base url and adding /server/{name} base_url is built using user's base url and adding /server/{name}
where name is the server uuid urlsafed where name is the server uuid urlsafed
""" """
db = self.db db = self.db
server_uuid = uuid4() if server_name in options:
server_url = urlsafe_b64encode(server_uuid.bytes).decode() server_name = options['server_name']
else:
server_name = default_server_name(self)
server = orm.Server( server = orm.Server(
name = server_uuid.hex, name = server_name,
cookie_name=self.cookie_name, cookie_name=self.cookie_name,
base_url=url_path_join(self.base_url, 'server', server_url[:10]), base_url=url_path_join(self.base_url, 'server', server_name),
) )
self.servers.append(server) self.servers.append(server)
db.add(self) db.add(self)

View File

@@ -214,3 +214,18 @@ def url_path_join(*pieces):
result = '/' result = '/'
return result return result
def default_server_name(user):
"""Return the default name for a new server for a given user.
Will be the first available integer string, e.g. '1' or '2'.
"""
existing_names = { server.name for server in user.servers }
# if there are 5 servers, count from 1 to 6
for n in range(1, len(existing_names) + 2):
name = str(n)
if name not in existing_names:
return name
raise RuntimeError("It should be impossible to get here")