packages/flavour: implement flavourinfo.json parsing

This commit is contained in:
InsanePrawn 2022-09-20 16:36:58 +02:00
parent 3c91abd175
commit eebca29c55
2 changed files with 31 additions and 2 deletions

View file

@ -200,3 +200,5 @@ MAKEPKG_CMD = [
SRCINFO_FILE = 'SRCINFO'
SRCINFO_METADATA_FILE = 'srcinfo_meta.json'
FLAVOUR_INFO_FILE = 'flavourinfo.json'

View file

@ -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