package_checks: output dep lists with proper offset

**Summary**

Change loader/dumper to ruamel to enable putting out dependency lists with proper offset.
This way the output can directly be copied and pasted into the recipe.

Resolves https://github.com/getsolus/packages/issues/3924

Signed-off-by: Thomas Staudinger <Staudi.Kaos@gmail.com>
This commit is contained in:
Thomas Staudinger 2024-09-26 12:25:21 +02:00
parent 0e04a2d586
commit f70e318ad8
No known key found for this signature in database

View file

@ -10,12 +10,12 @@ import sys
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime, timezone from datetime import datetime, timezone
from enum import Enum from enum import Enum
from ruamel.yaml import YAML
from ruamel.yaml.compat import StringIO
from typing import Any, Callable, Dict, List, Optional, TextIO, Tuple, Union from typing import Any, Callable, Dict, List, Optional, TextIO, Tuple, Union
from urllib import request from urllib import request
from xml.etree import ElementTree from xml.etree import ElementTree
import yaml
"""Package is either a Package YML file or Pspec XML file.""" """Package is either a Package YML file or Pspec XML file."""
Package = Union['PackageYML', 'PspecXML'] Package = Union['PackageYML', 'PspecXML']
@ -29,7 +29,9 @@ class PackageYML:
"""Represents a Package YML file.""" """Represents a Package YML file."""
def __init__(self, stream: Any): def __init__(self, stream: Any):
self._data = dict(yaml.safe_load(stream)) yaml = YAML(typ='safe', pure=True)
yaml.default_flow_style = False
self._data = dict(yaml.load(stream))
@property @property
def name(self) -> str: def name(self) -> str:
@ -92,7 +94,8 @@ class Config:
@staticmethod @staticmethod
def load(stream: Any) -> 'Config': def load(stream: Any) -> 'Config':
return Config(**yaml.safe_load(stream)) yaml = YAML(typ='safe', pure=True)
return Config(**yaml.load(stream))
def __post_init__(self) -> None: def __post_init__(self) -> None:
self.freeze = FreezeConfig(**self.freeze) # type: ignore self.freeze = FreezeConfig(**self.freeze) # type: ignore
@ -395,7 +398,9 @@ class Homepage(PullRequestCheck):
def _includes_homepage(self, file: str) -> bool: def _includes_homepage(self, file: str) -> bool:
with self._open(file) as f: with self._open(file) as f:
return 'homepage' in yaml.safe_load(f) yaml = YAML(typ='safe', pure=True)
yaml.default_flow_style = False
return 'homepage' in yaml.load(f)
class PackageBumped(PullRequestCheck): class PackageBumped(PullRequestCheck):
@ -453,8 +458,18 @@ class PackageDependenciesOrder(PullRequestCheck):
exp = self._sorted(cur) exp = self._sorted(cur)
if cur != exp: if cur != exp:
class Dumper(YAML):
def dump(self, data: Any, stream: Optional[StringIO] = None, **kw: int) -> Any:
self.default_flow_style = False
self.indent(offset=4, sequence=4)
self.prefix_colon = ' ' # type: ignore[assignment]
stream = StringIO()
YAML.dump(self, data, stream, **kw)
return stream.getvalue()
yaml = Dumper(typ='safe', pure=True)
return Result(file=file, level=self._level, line=self.file_line(file, '^' + deps + r'\s*:'), return Result(file=file, level=self._level, line=self.file_line(file, '^' + deps + r'\s*:'),
message=f'{deps} are not in order, expected: \n' + yaml.safe_dump(exp)) message=f'{deps} are not in order, expected: \n' + yaml.dump(exp))
return None return None