From dbe3dc91a30f32c05159f54931159518750fa1cf Mon Sep 17 00:00:00 2001 From: InsanePrawn Date: Wed, 31 Aug 2022 15:36:21 +0200 Subject: [PATCH] distro/package: refactor class PackageInfo into class BinaryPackage(PackageInfo) --- distro/distro.py | 6 +++--- distro/package.py | 9 ++++++--- distro/repo.py | 6 +++--- packages/build.py | 4 ++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/distro/distro.py b/distro/distro.py index 86ca22e..9651d65 100644 --- a/distro/distro.py +++ b/distro/distro.py @@ -4,7 +4,7 @@ from constants import Arch, ARCHES, BASE_DISTROS, REPOSITORIES, KUPFER_HTTPS, CH from generator import generate_pacman_conf_body from config import config -from .package import PackageInfo +from .package import BinaryPackage from .repo import RepoInfo, Repo @@ -25,9 +25,9 @@ class Distro: scan=scan, ) - def get_packages(self) -> dict[str, PackageInfo]: + def get_packages(self) -> dict[str, BinaryPackage]: """ get packages from all repos, semantically overlaying them""" - results = dict[str, PackageInfo]() + results = dict[str, BinaryPackage]() for repo in list(self.repos.values())[::-1]: assert repo.packages is not None results.update(repo.packages) diff --git a/distro/package.py b/distro/package.py index 57a49df..4dfb7a4 100644 --- a/distro/package.py +++ b/distro/package.py @@ -4,6 +4,9 @@ from typing import Optional class PackageInfo: name: str version: str + + +class BinaryPackage(PackageInfo): filename: str resolved_url: Optional[str] @@ -22,12 +25,12 @@ class PackageInfo: def __repr__(self): return f'{self.name}@{self.version}' - @staticmethod - def parse_desc(desc_str: str, resolved_repo_url=None): + @classmethod + def parse_desc(clss, desc_str: str, resolved_repo_url=None): """Parses a desc file, returning a PackageInfo""" pruned_lines = ([line.strip() for line in desc_str.split('%') if line.strip()]) desc = {} for key, value in zip(pruned_lines[0::2], pruned_lines[1::2]): desc[key.strip()] = value.strip() - return PackageInfo(desc['NAME'], desc['VERSION'], desc['FILENAME'], resolved_url='/'.join([resolved_repo_url, desc['FILENAME']])) + return clss(desc['NAME'], desc['VERSION'], desc['FILENAME'], resolved_url='/'.join([resolved_repo_url, desc['FILENAME']])) diff --git a/distro/repo.py b/distro/repo.py index c9d885c..64b53bb 100644 --- a/distro/repo.py +++ b/distro/repo.py @@ -5,7 +5,7 @@ import tarfile import tempfile import urllib.request -from .package import PackageInfo +from .package import BinaryPackage def resolve_url(url_template, repo_name: str, arch: str): @@ -28,7 +28,7 @@ class Repo(RepoInfo): name: str resolved_url: str arch: str - packages: dict[str, PackageInfo] + packages: dict[str, BinaryPackage] remote: bool scanned: bool = False @@ -53,7 +53,7 @@ class Repo(RepoInfo): for node in index.getmembers(): if os.path.basename(node.name) == 'desc': logging.debug(f'Parsing desc file for {os.path.dirname(node.name)}') - pkg = PackageInfo.parse_desc(index.extractfile(node).read().decode(), self.resolved_url) + pkg = BinaryPackage.parse_desc(index.extractfile(node).read().decode(), self.resolved_url) self.packages[pkg.name] = pkg self.scanned = True diff --git a/packages/build.py b/packages/build.py index 83cf748..8f8ae6f 100644 --- a/packages/build.py +++ b/packages/build.py @@ -16,7 +16,7 @@ from config import config from exec.cmd import run_cmd, run_root_cmd from exec.file import makedir, remove_file from chroot.build import get_build_chroot, BuildChroot -from distro.distro import PackageInfo, get_kupfer_https, get_kupfer_local +from distro.distro import BinaryPackage, get_kupfer_https, get_kupfer_local from wrapper import check_programs_wrap, wrap_if_foreign_arch from .pkgbuild import discover_pkgbuilds, filter_pkgbuilds, Pkgbuild @@ -275,7 +275,7 @@ def try_download_package(dest_file_path: str, package: Pkgbuild, arch: Arch) -> if pkgname not in repo.packages: logging.warning(f"Package {pkgname} not found in remote repos, building instead.") return False - repo_pkg: PackageInfo = repo.packages[pkgname] + repo_pkg: BinaryPackage = repo.packages[pkgname] if repo_pkg.version != package.version: logging.debug(f"Package {pkgname} versions differ: local: {package.version}, remote: {repo_pkg.version}. Building instead.") return False