aboutsummaryrefslogtreecommitdiff
path: root/src/hydrilla/builder/local_apt.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/hydrilla/builder/local_apt.py')
-rw-r--r--src/hydrilla/builder/local_apt.py45
1 files changed, 31 insertions, 14 deletions
diff --git a/src/hydrilla/builder/local_apt.py b/src/hydrilla/builder/local_apt.py
index e8a45e8..925fd61 100644
--- a/src/hydrilla/builder/local_apt.py
+++ b/src/hydrilla/builder/local_apt.py
@@ -33,12 +33,13 @@ import shutil
import re
import subprocess
CP = subprocess.CompletedProcess
+import typing as t
+
from pathlib import Path, PurePosixPath
from tempfile import TemporaryDirectory, NamedTemporaryFile
from hashlib import sha256
from urllib.parse import unquote
from contextlib import contextmanager
-from typing import Optional, Iterable, Iterator
from ..translations import smart_gettext as _
from .piggybacking import Piggybacked
@@ -91,10 +92,15 @@ class AptError(SubprocessError):
commands.
"""
-def run(command, **kwargs):
+def run(command: t.Sequence[str], **kwargs) -> CP:
"""A wrapped around subprocess.run that sets some default options."""
- return subprocess.run(command, **kwargs, env={'LANG': 'en_US'},
- capture_output=True, text=True)
+ return subprocess.run(
+ command,
+ **kwargs,
+ env = {'LANG': 'en_US'},
+ capture_output = True,
+ text = True
+ )
class Apt:
"""
@@ -135,8 +141,11 @@ def cache_dir() -> Path:
class SourcesList:
"""Representation of apt's sources.list contents."""
- def __init__(self, list: list[str]=[],
- codename: Optional[str]=None) -> None:
+ def __init__(
+ self,
+ list: list[str] = [],
+ codename: t.Optional[str] = None
+ ) -> None:
"""Initialize this SourcesList."""
self.codename = None
self.list = [*list]
@@ -273,7 +282,7 @@ def setup_local_apt(directory: Path, list: SourcesList, keys: list[str]) -> Apt:
return apt
@contextmanager
-def local_apt(list: SourcesList, keys: list[str]) -> Iterator[Apt]:
+def local_apt(list: SourcesList, keys: list[str]) -> t.Iterator[Apt]:
"""
Create a temporary directory with proper local APT configuration in it.
Yield an Apt object that can be used to issue apt-get commands.
@@ -285,9 +294,13 @@ def local_apt(list: SourcesList, keys: list[str]) -> Iterator[Apt]:
td = Path(td_str)
yield setup_local_apt(td, list, keys)
-def download_apt_packages(list: SourcesList, keys: list[str],
- packages: list[str], destination_dir: Path,
- with_deps: bool) -> list[str]:
+def download_apt_packages(
+ list: SourcesList,
+ keys: list[str],
+ packages: list[str],
+ destination_dir: Path,
+ with_deps: bool
+) -> list[str]:
"""
Set up a local APT, update it using the specified sources.list configuration
and use it to download the specified packages.
@@ -362,8 +375,10 @@ def download_apt_packages(list: SourcesList, keys: list[str],
return downloaded
@contextmanager
-def piggybacked_system(piggyback_def: dict, foreign_packages: Optional[Path]) \
- -> Iterator[Piggybacked]:
+def piggybacked_system(
+ piggyback_def: dict,
+ foreign_packages: t.Optional[Path]
+) -> t.Iterator[Piggybacked]:
"""
Resolve resources from APT. Optionally, use package files (.deb's, etc.)
from a specified directory instead of resolving and downloading them.
@@ -386,8 +401,10 @@ def piggybacked_system(piggyback_def: dict, foreign_packages: Optional[Path]) \
archives.mkdir(exist_ok=True)
if [*archives.glob('*.deb')] == []:
- sources_list = SourcesList(piggyback_def.get('sources_list', []),
- piggyback_def.get('distribution'))
+ sources_list = SourcesList(
+ list = piggyback_def.get('sources_list', []),
+ codename = piggyback_def.get('distribution')
+ )
packages = piggyback_def['packages']
with_deps = piggyback_def['dependencies']
pgp_keys = [