Пример #1
0
 def debianism_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     # XXX: the same as devel for now
     package.set_flag(PackageFlags.DEVEL, debianism_flag)
Пример #2
0
 def snapshot_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     # XXX: the same as ignored for now
     package.set_flag(PackageFlags.IGNORE, snapshot_flag)
Пример #3
0
 def successor_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     # XXX: the same as devel for now
     package.set_flag(PackageFlags.DEVEL, successor_flag)
Пример #4
0
 def remove_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.REMOVE, remove_flag)
Пример #5
0
 def rolling_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.ROLLING, rolling_flag)
Пример #6
0
 def altver_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.ALTVER, altver_flag)
Пример #7
0
 def vulnerable_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.VULNERABLE, vulnerable_flag)
Пример #8
0
 def outdated_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.OUTDATED, outdated_flag)
Пример #9
0
 def legacy_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.LEGACY, legacy_flag)
Пример #10
0
 def devel_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.DEVEL, devel_flag)
Пример #11
0
 def any_is_patch_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.ANY_IS_PATCH, any_is_patch_flag)
Пример #12
0
 def stable_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.STABLE, stable_flag)
Пример #13
0
 def weak_devel_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     # XXX: currently sets ignore; change to set non-viral variant of devel (#654)
     package.set_flag(PackageFlags.IGNORE, weak_devel_flag)
Пример #14
0
 def ignore_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.IGNORE, ignore_flag)
Пример #15
0
 def generated_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     # XXX: the same as rolling for now
     package.set_flag(PackageFlags.ROLLING, generated_flag)
Пример #16
0
 def incorrect_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.INCORRECT, incorrect_flag)
Пример #17
0
 def trace_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.TRACE, trace_flag)
Пример #18
0
 def untrusted_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.UNTRUSTED, untrusted_flag)
Пример #19
0
 def altscheme_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.ALTSCHEME, altscheme_flag)
Пример #20
0
 def noscheme_action(package: Package, package_context: PackageContext, match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.NOSCHEME, noscheme_flag)
Пример #21
0
class PackageMaker(PackageMakerBase):
    _package: Package
    _ident: Optional[str]
    _itemno: int
    _skipfailed: bool

    def __init__(self, logger: Logger, ident: Optional[str], itemno: int, skipfailed: bool = False) -> None:
        super(PackageMaker, self).__init__(logger)
        self._package = Package()
        self._ident = ident
        self._itemno = itemno
        self._skipfailed = skipfailed

    def _get_ident(self) -> str:
        return self._ident or self._package.extrafields.get('origin', None) or self._package.name or self._package.basename or 'item #{}'.format(self._itemno)

    @PackageMakerBase._simple_setter('origin', str, nzs.strip, nzs.forbid_newlines)
    def set_origin(self, origin: str) -> None:
        # XXX: convert to dedicated field
        self.set_extra_field('origin', origin)

    @PackageMakerBase._simple_setter('name', str, nzs.strip, nzs.forbid_newlines)
    def set_name(self, name: str) -> None:
        self._package.name = name

    @PackageMakerBase._simple_setter('basename', str, nzs.strip, nzs.forbid_newlines)
    def set_basename(self, basename: str) -> None:
        self._package.basename = basename

    def prefix_name(self, prefix: str) -> None:
        self._package.name = prefix + self._package.name

    @PackageMakerBase._simple_setter('version', str, nzs.strip, nzs.forbid_newlines)
    def set_version(self, version: str, version_normalizer: Optional[Callable[[str], str]] = None) -> None:
        self._package.rawversion = version
        self._package.origversion = version if version_normalizer is None else version_normalizer(version)
        self._package.version = self._package.origversion

    @PackageMakerBase._simple_setter('version', str, nzs.strip, nzs.forbid_newlines)
    def set_rawversion(self, rawversion: str) -> None:
        if rawversion != self._package.version:
            self._package.rawversion = rawversion

    def set_name_and_version(self, namever: str, version_normalizer: Optional[Callable[[str], str]] = None) -> None:
        name, version = namever.rsplit('-', 1)
        self.set_name(name)
        self.set_version(version, version_normalizer)

    @PackageMakerBase._simple_setter('arch', str, nzs.strip, nzs.forbid_newlines)
    def set_arch(self, arch: str) -> None:
        self._package.arch = arch

    @PackageMakerBase._simple_setter('summary', str, nzs.strip)
    def set_summary(self, summary: str) -> None:
        self._package.comment = summary

    @PackageMakerBase._omnivorous_setter('maintainer', str, nzs.strip, nzs.forbid_newlines, nzs.tolower)
    def add_maintainers(self, *args: Any) -> None:
        self._package.maintainers.extend(_iter_unique(args, self._package.maintainers))

    @PackageMakerBase._omnivorous_setter('category', str, nzs.strip, nzs.forbid_newlines)
    def add_categories(self, *args: Any) -> None:
        # XXX: convert into array
        if not self._package.category:
            self._package.category = args[0]

    @PackageMakerBase._omnivorous_setter('homepage', str, nzs.strip, nzs.url, nzs.warn_whitespace, nzs.forbid_newlines)
    def add_homepages(self, *args: Any) -> None:
        # XXX: convert into array
        if not self._package.homepage:
            self._package.homepage = args[0]

    @PackageMakerBase._omnivorous_setter('license', str, nzs.strip, nzs.forbid_newlines)
    def add_licenses(self, *args: Any) -> None:
        self._package.licenses.extend(args)

    @PackageMakerBase._omnivorous_setter('download', str, nzs.strip, nzs.url, nzs.warn_whitespace, nzs.forbid_newlines)
    def add_downloads(self, *args: Any) -> None:
        self._package.downloads.extend(_iter_unique(args, self._package.downloads))

    def set_flags(self, mask: int, is_set: bool = True) -> None:
        self._package.set_flag(mask, is_set)

    def set_extra_field(self, key: str, value: str) -> None:
        self._package.extrafields[key] = value

    def unwrap(self) -> Package:
        return self._package

    def clone(self, ident: Optional[str] = None, append_ident: Optional[str] = None) -> 'PackageMaker':
        offspring_ident = self._ident
        if ident is not None:
            offspring_ident = ident
        elif append_ident is not None:
            offspring_ident = (offspring_ident or '') + append_ident

        offspring = PackageMaker(self._logger, offspring_ident, self._itemno)
        offspring._package = deepcopy(self._package)

        return offspring

    def check_sanity(self, require_name: bool = True, require_version: bool = True, verbose: bool = False) -> bool:
        if require_name and not self._package.name:
            if verbose:
                self.log('package with no name', severity=Logger.ERROR)
            return False

        if require_version and not self._package.version:
            if verbose:
                self.log('package with no version', severity=Logger.ERROR)
            return False

        return True

    def __getattr__(self, key: str) -> Any:
        return getattr(self._package, key)

    def __enter__(self) -> 'PackageMaker':
        return self

    def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> Optional[bool]:
        if exc_type:
            self.log('parsing failed ({}): {}: {}'.format(
                'skipped' if self._skipfailed else 'fatal',
                exc_type.__name__,
                exc_value
            ), severity=Logger.ERROR)

            if self._skipfailed:
                return True

        return None
Пример #22
0
 def action(package: Package, package_context: PackageContext,
            match_context: MatchContext) -> None:
     package.set_flag(PackageFlags.SINK, sink_flag)