diff --git a/src/glicid_spawner/micromamba.py b/src/glicid_spawner/micromamba.py index e72d328..0f62bb4 100644 --- a/src/glicid_spawner/micromamba.py +++ b/src/glicid_spawner/micromamba.py @@ -7,7 +7,6 @@ from pathlib import Path MICROMAMBA_ROOT = Path('/micromamba') # default micromamba root location GLOBAL_USER = 'operator' -GLOBAL_EXCLUDED = 'glicid-jupyterhub' @dataclass @@ -19,15 +18,9 @@ class MicromambaEnv: path: str -def _envs(folder, excluded=None) -> list: - """List micromamba environments.""" - # Convert excluded as as list - if excluded is None: - excluded = [] - elif isinstance(excluded, str): - excluded = [excluded] - - # Get micromamba envs as pathlib.Path +def _envs(folder) -> list: + """List micromamba environments with jupyter kernel(s).""" + # Get micromamba environments as pathlib.Path folders envs = MICROMAMBA_ROOT / folder / 'envs' if not envs.exists(): @@ -37,7 +30,7 @@ def _envs(folder, excluded=None) -> list: [ (env.name, str(env)) for env in envs.iterdir() - if env.is_dir() and env.name not in excluded + if env.is_dir() and any(env.glob('share/jupyter/kernels/*/kernel.json')) ], key=itemgetter(0), ) @@ -64,10 +57,7 @@ def _envs_team(username: str) -> list: def _envs_global() -> list: """Micromamba environment(s) available globally.""" - return [ - MicromambaEnv('GLOBAL', name, path) - for name, path in _envs(GLOBAL_USER, excluded=GLOBAL_EXCLUDED) - ] + return [MicromambaEnv('GLOBAL', name, path) for name, path in _envs(GLOBAL_USER)] def get_envs(username: str) -> list: diff --git a/tests/data/micromamba/global/envs/baz/.gitkeep b/tests/data/micromamba/global/envs/baz/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/tests/data/micromamba/global/envs/baz/share/jupyter/kernels/python3/kernel.json b/tests/data/micromamba/global/envs/baz/share/jupyter/kernels/python3/kernel.json new file mode 100644 index 0000000..f336126 --- /dev/null +++ b/tests/data/micromamba/global/envs/baz/share/jupyter/kernels/python3/kernel.json @@ -0,0 +1,14 @@ +{ + "argv": [ + "/micromamba/global/envs/baz/bin/python", + "-m", + "ipykernel_launcher", + "-f", + "{connection_file}" + ], + "display_name": "Baz (GLOBAL)", + "language": "python", + "metadata": { + "debugger": true + } +} diff --git a/tests/data/micromamba/john-doe/envs/bar/.gitkeep b/tests/data/micromamba/john-doe/envs/bar/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/tests/data/micromamba/john-doe/envs/bar/share/jupyter/kernels/python3/kernel.json b/tests/data/micromamba/john-doe/envs/bar/share/jupyter/kernels/python3/kernel.json new file mode 100644 index 0000000..8f2c6c8 --- /dev/null +++ b/tests/data/micromamba/john-doe/envs/bar/share/jupyter/kernels/python3/kernel.json @@ -0,0 +1,14 @@ +{ + "argv": [ + "/micromamba/john-doe/envs/bar/bin/python", + "-m", + "ipykernel_launcher", + "-f", + "{connection_file}" + ], + "display_name": "Bar (USER)", + "language": "python", + "metadata": { + "debugger": true + } +} diff --git a/tests/data/micromamba/john-doe/envs/foo/.gitkeep b/tests/data/micromamba/john-doe/envs/foo/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/tests/data/micromamba/john-doe/envs/foo/share/jupyter/kernels/foo/kernel.json b/tests/data/micromamba/john-doe/envs/foo/share/jupyter/kernels/foo/kernel.json new file mode 100644 index 0000000..1a5806c --- /dev/null +++ b/tests/data/micromamba/john-doe/envs/foo/share/jupyter/kernels/foo/kernel.json @@ -0,0 +1,14 @@ +{ + "argv": [ + "/micromamba/john-doe/envs/foo/bin/python", + "-m", + "ipykernel_launcher", + "-f", + "{connection_file}" + ], + "display_name": "Custom Foo (USER)", + "language": "python", + "metadata": { + "debugger": true + } +} diff --git a/tests/test_micromamba.py b/tests/test_micromamba.py index 2229abd..60e6a37 100644 --- a/tests/test_micromamba.py +++ b/tests/test_micromamba.py @@ -11,15 +11,15 @@ def test_micromamba_envs_getter(monkeypatch): """Test micromamba envs getter.""" monkeypatch.setattr(micromamba, 'MICROMAMBA_ROOT', MICROMAMBA_ROOT) monkeypatch.setattr(micromamba, 'GLOBAL_USER', 'global') - monkeypatch.setattr(micromamba, 'GLOBAL_EXCLUDED', 'qux') # User with micromamba envs envs = micromamba.get_envs('john-doe') assert len(envs) == 3 assert [env.scope for env in envs] == ['USER', 'USER', 'GLOBAL'] - assert [env.name for env in envs] == ['bar', 'foo', 'baz'] + assert [env.name for env in envs] == ['bar', 'foo', 'baz'] # `qux` doesn't have `kernel.json` assert [env.path for env in envs] == [ + # Sorted by groups (user > team > global) str(MICROMAMBA_ROOT / 'john-doe' / 'envs' / 'bar'), str(MICROMAMBA_ROOT / 'john-doe' / 'envs' / 'foo'), str(MICROMAMBA_ROOT / 'global' / 'envs' / 'baz'),