From 3e9ec1f6c521e89c07c82f97123713f538ff5f11 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Wed, 4 Mar 2026 09:51:59 +0100 Subject: [PATCH] cmds.distro.lib.Package: Add more methods Add more methods, to make Package more useful: - __repr__() - Class-mMethods to help with parsing of strings gathered from the OS-tools' output: parse_spec_str() parse_specs_str() order_tags() - Add field maintainer Signed-off-by: Jan Lindemann --- src/python/jw/pkg/cmds/distro/lib/Package.py | 39 +++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/python/jw/pkg/cmds/distro/lib/Package.py b/src/python/jw/pkg/cmds/distro/lib/Package.py index 1672114b..922ceae4 100644 --- a/src/python/jw/pkg/cmds/distro/lib/Package.py +++ b/src/python/jw/pkg/cmds/distro/lib/Package.py @@ -1,14 +1,51 @@ # -*- coding: utf-8 -*- +from typing import Any + +meta_tags = [ + "name", + "vendor", + "packager", + "url", + "maintainer", +] + class Package: name: str = None vendor: str|None = None packager: str|None = None url: str|None = None + maintainer: str|None = None - def __init__(self, name: str, vendor: str|None=None, packager: str|None=None, url: str|None=None): + @classmethod + def parse_spec_str(cls, spec: str, delimiter='|'): + tags = spec.split(delimiter) + if len(tags) != 5: + raise ValueError(f'Invalid package spec string \"{spec}\"') + return cls(name=tags[0], vendor=tags[1], packager=tags[2], url=tags[3], maintainer=tags[4]) + + @classmethod + def parse_specs_str(cls, specs: str, delimiter='|'): + ret: list[Package] = [] + for spec in specs.splitlines(): + ret.append(cls.parse_spec_str(spec)) + return ret + + @classmethod + def order_tags(cls, mapping: dict[str, Any]): + ret: dict[str, Any] = {} + for tag in meta_tags: + ret[tag] = mapping.get(tag, '') + return ret + + def __init__(self, name: str, vendor: str|None=None, packager: str|None=None, url: str|None=None, maintainer: str|None=None): self.name = name self.vendor = vendor self.packager = packager self.url = url + self.maintainer = maintainer + + def __repr__(self) -> str: + global meta_tags + return '\n'.join([f'{key:<15}: {getattr(self, key)}' for key in meta_tags])