Parse user micromamba environments

This commit is contained in:
Benoît Seignovert 2024-01-31 18:10:41 +01:00
parent 1d1db793b9
commit 92059ce826
Signed by: Benoît Seignovert
GPG key ID: F5D8895227D18A0B

View file

@ -1,5 +1,7 @@
"""Python environment module.""" """Python environment module."""
import shlex
import subprocess
from dataclasses import dataclass from dataclasses import dataclass
@ -32,34 +34,42 @@ class GlobalPyEnv(PyEnv):
scope = 'GLOBAL' scope = 'GLOBAL'
def _micromamba_env_list(root_prefix='', base=False):
"""List micromamba environment list."""
env_list = subprocess.run(
shlex.split('/usr/local/bin/micromamba env list --quiet'), # noqa: S603 (FIXME)
env={'MAMBA_ROOT_PREFIX': root_prefix},
capture_output=True,
text=True,
check=False,
)
return [map(str.strip, env.split()) for env in env_list.stdout.splitlines()[2 if base else 3 :]]
def get_pyenv_user(username: str) -> list: def get_pyenv_user(username: str) -> list:
"""List of python environment available to the user.""" """List of python environment available to the user."""
return [ return [
# Dummy values UserPyEnv(*env)
UserPyEnv('base', f'/micromamba/{username}'), for env in _micromamba_env_list(root_prefix=f'/micromamba/{username}/', base=True)
UserPyEnv('pytorch', f'/micromamba/{username}/envs/pytorch'),
] ]
def get_pyenv_team() -> list: def get_pyenv_team(username: str) -> list:
"""List of python environment available to the user's team.""" """List of python environment available to the user's team."""
teams = [] # FIXME: pull user teams list from groups
return [ return [
# Dummy values TeamPyEnv(*env)
TeamPyEnv( for team in teams
'nuts-workshop', '/micromamba/operator/share/nuts-workshop-team/env/envs/nuts-workshop' for env in _micromamba_env_list(root_prefix=f'/micromamba/teams/{team}')
),
] ]
def get_pyenv_global() -> list: def get_pyenv_global() -> list:
"""List of python environment available globally.""" """List of python environment available globally."""
return [ return [GlobalPyEnv(*env) for env in _micromamba_env_list(root_prefix='/micromamba/operator/')]
# Dummy values
GlobalPyEnv('base', '/micromamba/operator/envs/base'),
GlobalPyEnv('data-science', '/micromamba/operator/envs/data-science'),
]
def get_pyenv(username: str) -> list: def get_pyenv(username: str) -> list:
"""List of all the python environment available to a user.""" """List of all the python environment available to a user."""
return get_pyenv_user(username) + get_pyenv_team() + get_pyenv_global() return get_pyenv_user(username) + get_pyenv_team(username) + get_pyenv_global()