List only micromamba environments with jupyter kernel(s)
This commit is contained in:
parent
c4c8fa33aa
commit
1a7f5f102f
8 changed files with 49 additions and 17 deletions
|
@ -7,7 +7,6 @@ from pathlib import Path
|
||||||
MICROMAMBA_ROOT = Path('/micromamba') # default micromamba root location
|
MICROMAMBA_ROOT = Path('/micromamba') # default micromamba root location
|
||||||
|
|
||||||
GLOBAL_USER = 'operator'
|
GLOBAL_USER = 'operator'
|
||||||
GLOBAL_EXCLUDED = 'glicid-jupyterhub'
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
@ -19,15 +18,9 @@ class MicromambaEnv:
|
||||||
path: str
|
path: str
|
||||||
|
|
||||||
|
|
||||||
def _envs(folder, excluded=None) -> list:
|
def _envs(folder) -> list:
|
||||||
"""List micromamba environments."""
|
"""List micromamba environments with jupyter kernel(s)."""
|
||||||
# Convert excluded as as list
|
# Get micromamba environments as pathlib.Path folders
|
||||||
if excluded is None:
|
|
||||||
excluded = []
|
|
||||||
elif isinstance(excluded, str):
|
|
||||||
excluded = [excluded]
|
|
||||||
|
|
||||||
# Get micromamba envs as pathlib.Path
|
|
||||||
envs = MICROMAMBA_ROOT / folder / 'envs'
|
envs = MICROMAMBA_ROOT / folder / 'envs'
|
||||||
|
|
||||||
if not envs.exists():
|
if not envs.exists():
|
||||||
|
@ -37,7 +30,7 @@ def _envs(folder, excluded=None) -> list:
|
||||||
[
|
[
|
||||||
(env.name, str(env))
|
(env.name, str(env))
|
||||||
for env in envs.iterdir()
|
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),
|
key=itemgetter(0),
|
||||||
)
|
)
|
||||||
|
@ -64,10 +57,7 @@ def _envs_team(username: str) -> list:
|
||||||
|
|
||||||
def _envs_global() -> list:
|
def _envs_global() -> list:
|
||||||
"""Micromamba environment(s) available globally."""
|
"""Micromamba environment(s) available globally."""
|
||||||
return [
|
return [MicromambaEnv('GLOBAL', name, path) for name, path in _envs(GLOBAL_USER)]
|
||||||
MicromambaEnv('GLOBAL', name, path)
|
|
||||||
for name, path in _envs(GLOBAL_USER, excluded=GLOBAL_EXCLUDED)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
def get_envs(username: str) -> list:
|
def get_envs(username: str) -> list:
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,15 +11,15 @@ def test_micromamba_envs_getter(monkeypatch):
|
||||||
"""Test micromamba envs getter."""
|
"""Test micromamba envs getter."""
|
||||||
monkeypatch.setattr(micromamba, 'MICROMAMBA_ROOT', MICROMAMBA_ROOT)
|
monkeypatch.setattr(micromamba, 'MICROMAMBA_ROOT', MICROMAMBA_ROOT)
|
||||||
monkeypatch.setattr(micromamba, 'GLOBAL_USER', 'global')
|
monkeypatch.setattr(micromamba, 'GLOBAL_USER', 'global')
|
||||||
monkeypatch.setattr(micromamba, 'GLOBAL_EXCLUDED', 'qux')
|
|
||||||
|
|
||||||
# User with micromamba envs
|
# User with micromamba envs
|
||||||
envs = micromamba.get_envs('john-doe')
|
envs = micromamba.get_envs('john-doe')
|
||||||
|
|
||||||
assert len(envs) == 3
|
assert len(envs) == 3
|
||||||
assert [env.scope for env in envs] == ['USER', 'USER', 'GLOBAL']
|
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] == [
|
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' / 'bar'),
|
||||||
str(MICROMAMBA_ROOT / 'john-doe' / 'envs' / 'foo'),
|
str(MICROMAMBA_ROOT / 'john-doe' / 'envs' / 'foo'),
|
||||||
str(MICROMAMBA_ROOT / 'global' / 'envs' / 'baz'),
|
str(MICROMAMBA_ROOT / 'global' / 'envs' / 'baz'),
|
||||||
|
|
Loading…
Add table
Reference in a new issue