From 6af885f148dd3f2bec5ee66f90706b07c39ffd56 Mon Sep 17 00:00:00 2001 From: Benoit Seignovert Date: Mon, 18 Mar 2024 17:57:20 +0100 Subject: [PATCH] Add explicit path to spawner and singleuser commands --- src/glicid_spawner/spawner.py | 18 ++++++++++++++++++ tests/test_spawner.py | 11 ++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/glicid_spawner/spawner.py b/src/glicid_spawner/spawner.py index 65ccbf7..12f8339 100644 --- a/src/glicid_spawner/spawner.py +++ b/src/glicid_spawner/spawner.py @@ -2,6 +2,8 @@ import asyncio import re +import sys +from pathlib import Path from batchspawner import JobStatus, SlurmSpawner from traitlets import Bool, Integer, Unicode, default @@ -11,6 +13,8 @@ from .micromamba import MAMBA_EXE, MAMBA_ROOT_PREFIX from .progress import ElapseTime, get_progress from .templates import get_template_src +SPAWNER_BIN = Path(sys.exec_prefix) / 'bin' + class GlicidSpawner(SlurmSpawner): """Glicid SLURM Spawner.""" @@ -60,6 +64,20 @@ class GlicidSpawner(SlurmSpawner): """The URL the single-user server should start in.""" return '/lab/tree' + self.user_options.get('workdir', '/home/{username}') + '?reset' + def cmd_formatted_for_batch(self): + """The command which is substituted inside of the batch script. + + Here we need the absolute path to the spawner and singleuser commands. + + """ + return ' '.join( + [ + str(SPAWNER_BIN / self.batchspawner_singleuser_cmd), + str(SPAWNER_BIN / self.cmd[0]), + *self.get_args(), + ] + ) + slurm_job_id_re = Unicode(r'(\d+)(?:;(\w+))?').tag(config=True) def parse_job_id(self, output): diff --git a/tests/test_spawner.py b/tests/test_spawner.py index 9dc2a4e..e6e430e 100644 --- a/tests/test_spawner.py +++ b/tests/test_spawner.py @@ -1,5 +1,6 @@ """Test GLiCID spawner module.""" +import re from collections import namedtuple from itertools import repeat @@ -22,6 +23,10 @@ def test_spawner_config(): assert spawner.batchspawner_singleuser_cmd == 'glicid-spawner-singleuser' + cmd = spawner.cmd_formatted_for_batch() + assert 'bin/glicid-spawner-singleuser' in cmd + assert 'bin/jupyterhub-singleuser' in cmd + assert spawner.req_mamba_root_prefix == '/micromamba/operator' assert spawner.req_mamba_exe == '/micromamba/operator/bin/micromamba' assert spawner.req_job_name == 'jupyterhub_glicid' @@ -49,7 +54,9 @@ def test_spawner_batch_script(monkeypatch): ) script = format_template( - spawner.batch_script, **(spawner.get_req_subvars() | spawner.user_options) + spawner.batch_script, + cmd=spawner.cmd_formatted_for_batch(), + **(spawner.get_req_subvars() | spawner.user_options), ) assert '#SBATCH --job-name=jupyterhub_glicid' in script @@ -65,6 +72,8 @@ def test_spawner_batch_script(monkeypatch): assert 'export MAMBA_ROOT_PREFIX=/micromamba/operator;' in script assert 'micromamba activate /micromamba/john-doe/envs/foo;' in script + assert re.search(r'.*/bin/glicid-spawner-singleuser .*/bin/jupyterhub-singleuser', script) + def test_spawner_parse_job_id(): """Test spawner job id parser."""