Source code for pydmt.builders.apt
"""
This is a module that will install OS packages for you.
"""
import os
from pydmt.utils.filesystem import unlink_files, mkdir_touch
from pydmt.configs import ConfigSudo, ConfigApt
from pydmt.utils.subprocess import check_call
from pydmt.api.one_source_one_target import OneSourceOneTarget
[docs]
class BuilderApt(OneSourceOneTarget):
def __init__(self, source: str, target: str, packages: list[str], packages_remove: list[str]):
super().__init__(source, target)
self.packages = packages
self.packages_remove = packages_remove
[docs]
def build(self) -> None:
unlink_files([self.target])
if not self.packages:
mkdir_touch(self.target)
return
os.environ["DEBIAN_FRONTEND"] = "noninteractive"
if self.packages_remove is not None:
args = []
if ConfigSudo.sudo:
args.append("sudo")
args.extend([
"apt-get",
])
if ConfigApt.apt_quiet:
args.append("-q=2")
args.extend([
"remove",
])
args.extend(self.packages_remove)
check_call(args)
args = []
if ConfigSudo.sudo:
args.append("sudo")
args.extend([
"apt-get",
])
if ConfigApt.apt_quiet:
args.append("-q=2")
args.extend([
"--yes",
"update",
])
check_call(args)
args = []
if ConfigSudo.sudo:
args.append("sudo")
args.extend([
"apt-get",
])
if ConfigApt.apt_quiet:
args.append("-q=2")
args.extend([
"--yes",
"install",
])
args.extend(self.packages)
check_call(args)
mkdir_touch(self.target)