Repository URL to install this package:
|
Version:
0.10.7 ▾
|
bauh-reloaded
/
opt
/
bauh-reloaded
/
usr
/
lib
/
python3.9
/
site-packages
/
bauh
/
gems
/
snap
/
snap.py
|
|---|
import os
import shutil
import subprocess
from io import StringIO
from typing import Tuple, Optional
from bauh.commons.system import SimpleProcess
def is_installed() -> bool:
return bool(shutil.which('snap'))
def uninstall_and_stream(app_name: str, root_password: Optional[str]) -> SimpleProcess:
return SimpleProcess(cmd=('snap', 'remove', app_name),
root_password=root_password,
lang=None,
shell=True)
def install_and_stream(app_name: str, confinement: str, root_password: Optional[str], channel: Optional[str] = None) -> SimpleProcess:
install_cmd = ['snap', 'install', app_name] # default
if confinement == 'classic':
install_cmd.append('--classic')
if channel:
install_cmd.append(f'--channel={channel}')
return SimpleProcess(install_cmd, root_password=root_password, shell=True, lang=None)
def downgrade_and_stream(app_name: str, root_password: Optional[str]) -> SimpleProcess:
return SimpleProcess(cmd=('snap', 'revert', app_name),
root_password=root_password,
shell=True,
lang=None)
def refresh_and_stream(app_name: str, root_password: Optional[str], channel: Optional[str] = None) -> SimpleProcess:
cmd = ['snap', 'refresh', app_name]
if channel:
cmd.append(f'--channel={channel}')
return SimpleProcess(cmd=cmd,
root_password=root_password,
lang=None,
shell=True)
def run(cmd: str):
subprocess.Popen((f'snap run {cmd}',), shell=True, env={**os.environ})
def is_api_available() -> Tuple[bool, str]:
output = StringIO()
for o in SimpleProcess(('snap', 'search'), lang=None).instance.stdout:
if o:
output.write(o.decode())
output.seek(0)
output = output.read()
return 'error:' not in output, output