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_FILE = 'SRCINFO'
SRCINFO_METADATA_FILE = 'srcinfo_meta.json' SRCINFO_METADATA_FILE = 'srcinfo_meta.json'
FLAVOUR_INFO_FILE = 'flavourinfo.json'

View file

@ -1,23 +1,35 @@
from __future__ import annotations from __future__ import annotations
import click import click
import json
import logging import logging
import os
from dataclasses import dataclass from dataclasses import dataclass
from typing import Optional from typing import Optional
from config import config from config import config
from constants import FLAVOUR_INFO_FILE
from .pkgbuild import discover_pkgbuilds, get_pkgbuild_by_name, init_pkgbuilds, Pkgbuild 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) 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 @dataclass
class Flavour: class Flavour:
name: str name: str
pkgbuild: Pkgbuild pkgbuild: Pkgbuild
description: str description: str
flavour_info: Optional[FlavourInfo]
@staticmethod @staticmethod
def from_pkgbuild(pkgbuild: Pkgbuild) -> Flavour: def from_pkgbuild(pkgbuild: Pkgbuild) -> Flavour:
@ -27,10 +39,25 @@ class Flavour:
if name.endswith('-common'): if name.endswith('-common'):
raise Exception(f'Flavour package "{name}" ends with "-common": "{name}"') raise Exception(f'Flavour package "{name}" ends with "-common": "{name}"')
name = name[8:] # split off 'flavour-' 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): 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 _flavours_discovered: bool = False