distro/package: fix DESC parser

This commit is contained in:
InsanePrawn 2023-01-09 03:18:03 +01:00
parent 272d55b735
commit 9f5bafab57

View file

@ -17,7 +17,7 @@ class BinaryPackage(PackageInfo):
arch: str arch: str
filename: str filename: str
resolved_url: Optional[str] resolved_url: Optional[str]
_desc: Optional[dict[str, str]] _desc: Optional[dict[str, str | list[str]]]
def __init__( def __init__(
self, self,
@ -39,17 +39,25 @@ class BinaryPackage(PackageInfo):
@classmethod @classmethod
def parse_desc(clss, desc_str: str, resolved_repo_url=None): def parse_desc(clss, desc_str: str, resolved_repo_url=None):
"""Parses a desc file, returning a PackageInfo""" """Parses a desc file, returning a PackageInfo"""
desc: dict[str, str | list[str]] = {}
pruned_lines = ([line.strip() for line in desc_str.split('%') if line.strip()]) for segment in f'\n{desc_str}'.split('\n%'):
desc = {} if not segment.strip():
for key, value in zip(pruned_lines[0::2], pruned_lines[1::2]): continue
desc[key.strip()] = value.strip() key, elements = (e.strip() for e in segment.strip().split('%\n', 1))
elements_split = elements.split('\n')
desc[key] = elements if len(elements_split) == 1 else elements_split
validated: dict[str, str] = {}
for key in ['NAME', 'VERSION', 'ARCH', 'FILENAME']:
assert key in desc
value = desc[key]
assert isinstance(value, str)
validated[key] = value
p = clss( p = clss(
name=desc['NAME'], name=validated['NAME'],
version=desc['VERSION'], version=validated['VERSION'],
arch=desc['ARCH'], arch=validated['ARCH'],
filename=desc['FILENAME'], filename=validated['FILENAME'],
resolved_url='/'.join([resolved_repo_url, desc['FILENAME']]), resolved_url='/'.join([resolved_repo_url, validated['FILENAME']]),
) )
p._desc = desc p._desc = desc
return p return p