distro/package: fix DESC parser
This commit is contained in:
parent
272d55b735
commit
9f5bafab57
1 changed files with 19 additions and 11 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue