From 1cd88f3ef8a611e3768d1a8d8e747dde5d9cd54f Mon Sep 17 00:00:00 2001 From: Benoit Seignovert Date: Mon, 29 Jan 2024 17:47:47 +0100 Subject: [PATCH] Add dummy spawner config --- pyproject.toml | 3 ++ src/glicid_spawner/__init__.py | 6 +++- src/glicid_spawner/spawner.py | 51 ++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/glicid_spawner/spawner.py diff --git a/pyproject.toml b/pyproject.toml index 755aaab..fd709a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,6 +8,9 @@ readme = "README.md" repository = "https://gitlab.univ-nantes.fr/glicid/jupyter/spawner" packages = [{ include = "glicid_spawner", from = "src"}] +[tool.poetry.plugins."jupyterhub.spawners"] +glicid-spawner = 'glicid_spawner:GlicidSpawner' + [tool.poetry.dependencies] python = "^3.10" jupyterhub = "^4.0" diff --git a/src/glicid_spawner/__init__.py b/src/glicid_spawner/__init__.py index 8b6606c..c298340 100644 --- a/src/glicid_spawner/__init__.py +++ b/src/glicid_spawner/__init__.py @@ -2,6 +2,10 @@ from importlib.metadata import version -__all__ = [] +from .spawner import GlicidSpawner + +__all__ = [ + 'GlicidSpawner', +] __version__ = version('glicid-spawner') diff --git a/src/glicid_spawner/spawner.py b/src/glicid_spawner/spawner.py new file mode 100644 index 0000000..ffed7f5 --- /dev/null +++ b/src/glicid_spawner/spawner.py @@ -0,0 +1,51 @@ +"""GLiCID spawner module.""" + +import shlex + +from batchspawner import SlurmSpawner + + +class GlicidSpawner(SlurmSpawner): + """Glicid SLURM Spawner.""" + + def _options_form_default(self): + default_env = f'YOURNAME={self.user.name}\n' + return f""" +
+ + +
+
+ + +
+ """ + + def options_from_form(self, formdata): + options = {} + options['env'] = env = {} + + env_lines = formdata.get('env', ['']) + for line in env_lines[0].splitlines(): + if line: + key, value = line.split('=', 1) + env[key.strip()] = value.strip() + + arg_s = formdata.get('args', [''])[0].strip() + if arg_s: + options['argv'] = shlex.split(arg_s) + return options + + def get_args(self): + """Return arguments to pass to the notebook server""" + argv = super().get_args() + if self.user_options.get('argv'): + argv.extend(self.user_options['argv']) + return argv + + def get_env(self): + env = super().get_env() + if self.user_options.get('env'): + env.update(self.user_options['env']) + return env