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 <jan@janware.com>
This commit is contained in:
Jan Lindemann 2026-03-04 09:51:59 +01:00
commit 3e9ec1f6c5

View file

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