def _check_transformer(self, rulestext: str,
                           *samples: PackageSample) -> None:
        transformer = PackageTransformer(repomgr, rulestext=rulestext)

        for sample in samples:
            transformer.process(sample.package)
            sample.check(self)
Exemple #2
0
def check_transformer(rulestext: str, *samples: PackageSample) -> None:
    __tracebackhide__ = True

    ruleset = Ruleset(YamlConfig.from_text(rulestext))

    sample_by_repo = defaultdict(list)

    for sample in samples:
        sample_by_repo[sample.package.repo].append(sample)

    for repo, repo_samples in sample_by_repo.items():
        transformer = PackageTransformer(ruleset, repo, {repo})
        for sample in repo_samples:
            transformer.process(sample.package)
            sample.check_pytest()
    def check_transformer(self, rulestext: str, *packages: Dict[str, Any]) -> None:
        transformer = PackageTransformer(repomgr, rulestext=rulestext)
        for packagedict in packages:
            create_params = {}
            expected_params = {}
            for field, value in packagedict.items():
                if field.startswith('expect_'):
                    expected_params[field[7:]] = value
                else:
                    create_params[field] = value

            package = Package(**create_params)
            transformer.process(package)

            for field, value in expected_params.items():
                self.assertEqual(package.__dict__[field], value)
Exemple #4
0
    def iter_parse(
        self, path: str, factory: PackageFactory,
        transformer: PackageTransformer
    ) -> Generator[PackageMaker, None, None]:
        for packagedata in _iter_packages(path):
            entity = packagedata['project'].rsplit(
                '/', 1)[-1]  # this is URL, take only the ID from it

            pkg = factory.begin(entity)
            pkg.set_extra_field('entity', entity)

            # generate a package for each version
            for version in sorted(packagedata['versions'].split(', ')):
                version, *flags = version.split('|')

                verpkg = pkg.clone(append_ident=' ' + version)

                is_devel = 'U' in flags
                is_foreign_os_release = 'o' in flags and 'O' not in flags
                is_foreign_platform_release = 'p' in flags and 'P' not in flags

                if is_foreign_os_release:
                    verpkg.log(
                        'version {} skipped due to bad OS'.format(version),
                        severity=Logger.NOTICE)
                    continue

                if is_foreign_platform_release:
                    verpkg.log('version {} skipped due to bad Platform'.format(
                        version),
                               severity=Logger.NOTICE)
                    continue

                verpkg.set_flags(PackageFlags.devel, is_devel)
                verpkg.set_version(version)
                verpkg.set_name(packagedata['projectLabel'])

                if 'projectDescription' in packagedata:
                    verpkg.set_summary(packagedata['projectDescription'])

                if packagedata['licenses']:
                    verpkg.add_licenses(packagedata['licenses'].split(', '))

                if packagedata['websites']:
                    verpkg.add_homepages(packagedata['websites'].split(', '))

                # extract project name(s) from packages information
                names = set()
                for fieldname, fakerepo in _DONOR_REPOS:
                    for name in packagedata[fieldname].split(', '):
                        if name:
                            fakepkgmaker = verpkg.clone()
                            fakepkgmaker.set_name(name)
                            fakepkg = fakepkgmaker.unwrap()
                            fakepkg.repo = fakerepo
                            transformer.process(fakepkg)
                            names.add(fakepkg.effname)

                    if names:
                        break

                if not names:
                    verpkg.log(
                        'could not guess project name (no Arch/AUR packages defined?)',
                        severity=Logger.ERROR)

                if len(names) > 1:
                    verpkg.log(
                        'multiple project names extracted (from {}): {}'.
                        format(fakerepo, ','.join(names)),
                        severity=Logger.WARNING)

                # generate package for each guessed name; it most cases, these will be merged anyway
                for name in names:
                    namepkg = verpkg.clone()
                    namepkg.set_basename(name)
                    yield namepkg