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)
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)
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