From eebca29c554dba7c18fb3787c6fbb06d32a7818a Mon Sep 17 00:00:00 2001 From: InsanePrawn Date: Tue, 20 Sep 2022 16:36:58 +0200 Subject: [PATCH] packages/flavour: implement flavourinfo.json parsing --- constants.py | 2 ++ packages/flavour.py | 31 +++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/constants.py b/constants.py index a2531a5..8ddae3c 100644 --- a/constants.py +++ b/constants.py @@ -200,3 +200,5 @@ MAKEPKG_CMD = [ SRCINFO_FILE = 'SRCINFO' SRCINFO_METADATA_FILE = 'srcinfo_meta.json' + +FLAVOUR_INFO_FILE = 'flavourinfo.json' diff --git a/packages/flavour.py b/packages/flavour.py index 75acfc2..d7cca05 100644 --- a/packages/flavour.py +++ b/packages/flavour.py @@ -1,23 +1,35 @@ from __future__ import annotations import click +import json import logging +import os from dataclasses import dataclass from typing import Optional from config import config +from constants import FLAVOUR_INFO_FILE from .pkgbuild import discover_pkgbuilds, get_pkgbuild_by_name, init_pkgbuilds, Pkgbuild profile_option = click.option('-p', '--profile', help="name of the profile to use", required=False, default=None) +@dataclass +class FlavourInfo: + rootfs_size: int # rootfs size in GB + + def __repr__(self): + return f'rootfs_size: {self.rootfs_size}' + + @dataclass class Flavour: name: str pkgbuild: Pkgbuild description: str + flavour_info: Optional[FlavourInfo] @staticmethod def from_pkgbuild(pkgbuild: Pkgbuild) -> Flavour: @@ -27,10 +39,25 @@ class Flavour: if name.endswith('-common'): raise Exception(f'Flavour package "{name}" ends with "-common": "{name}"') name = name[8:] # split off 'flavour-' - return Flavour(name=name, pkgbuild=pkgbuild, description=pkgbuild.description) + return Flavour(name=name, pkgbuild=pkgbuild, description=pkgbuild.description, flavour_info=None) def __repr__(self): - return f'Flavour "{self.name}": "{self.description}", package: {self.pkgbuild.name if self.pkgbuild else "??? PROBABLY A BUG!"}' + return f'Flavour "{self.name}": "{self.description}", package: {self.pkgbuild.name if self.pkgbuild else "??? PROBABLY A BUG!"}{f", {self.flavour_info}" if self.flavour_info else ""}' + + def parse_flavourinfo(self, lazy: bool = True): + if lazy and self.flavour_info is not None: + return self.flavour_info + infopath = os.path.join(config.get_path('pkgbuilds'), self.pkgbuild.path, FLAVOUR_INFO_FILE) + if not os.path.exists(infopath): + raise Exception(f"Error parsing flavour info for flavour {self.name}: file doesn't exist: {infopath}") + try: + with open(infopath, 'r') as fd: + infodict = json.load(fd) + i = FlavourInfo(**infodict) + except Exception as ex: + raise Exception(f"Error parsing {FLAVOUR_INFO_FILE} for flavour {self.name}: {ex}") + self.flavour_info = i + return i _flavours_discovered: bool = False