Parse user micromamba environments
This commit is contained in:
parent
1d1db793b9
commit
92059ce826
1 changed files with 24 additions and 14 deletions
|
@ -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()
|
||||||
|
|
Loading…
Add table
Reference in a new issue