mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-13 04:53:01 +00:00
add default_server_name, change spawn start
This commit is contained in:
@@ -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)
|
||||||
|
@@ -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")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user