def test_bad_versions(self, self_bv, self_pv): c = Convertor(package='pkg', base_python_version=self_bv, python_versions=self_pv, template='epel6.spec') data = PackageData('pkg.tar.gz', 'pkg', 'pkg', '0.1') with pytest.raises(SystemExit): c.merge_versions(data)
def test_merge_versions_fedora(self, self_bv, self_pv, data_pv, expected_bv, expected_pv): c = Convertor(package='pkg', base_python_version=self_bv, python_versions=self_pv, template='fedora.spec') data = PackageData('pkg.tar.gz', 'pkg', 'pkg', '0.1') data.python_versions = data_pv c.merge_versions(data) assert data.base_python_version == expected_bv assert data.python_versions == expected_pv
def test_versions_epel6(self, self_bv, self_pv, data_bv, data_pv, expected_bv, expected_pv): c = Convertor(package='pkg', base_python_version=self_bv, python_versions=self_pv, template='epel6.spec') data = PackageData('pkg.tar.gz', 'pkg', 'pkg', '0.1') data.base_python_version = data_bv data.python_versions = data_pv c.merge_versions(data) assert data.base_python_version == expected_bv assert data.python_versions == expected_pv
def main(package, v, d, s, r, proxy, srpm, p, b, o, t, venv): """Convert PyPI package to RPM specfile or SRPM. \b \b\bArguments: PACKAGE Provide PyPI name of the package or path to compressed source file.""" register_file_log_handler('/tmp/pyp2rpm-{0}.log'.format(getpass.getuser())) if srpm or s: register_console_log_handler() distro = o if t in settings.KNOWN_DISTROS: distro = t logger = logging.getLogger(__name__) logger.info('Pyp2rpm initialized.') convertor = Convertor(package=package, version=v, save_dir=d, template=t or settings.DEFAULT_TEMPLATE, distro=distro, base_python_version=b, python_versions=p, rpm_name=r, proxy=proxy, venv=venv) logger.debug('Convertor: {0} created. Trying to convert.'.format(convertor)) converted = convertor.convert() logger.debug('Convertor: {0} succesfully converted.'.format(convertor)) if srpm or s: if r: spec_name = r + '.spec' else: spec_name = 'python-' + convertor.name + '.spec' logger.info('Using name: {0} for specfile.'.format(spec_name)) if d == settings.DEFAULT_PKG_SAVE_PATH: # default save_path is rpmbuild tree so we want to save spec # in rpmbuild/SPECS/ spec_path = d + '/SPECS/' + spec_name else: # if user provide save_path then save spec in provided path spec_path = d + '/' + spec_name spec_dir = os.path.dirname(spec_path) if not os.path.exists(spec_dir): os.makedirs(spec_dir) logger.debug('Opening specfile: {0}.'.format(spec_path)) if not utils.PY3: converted = converted.encode('utf-8') with open(spec_path, 'w') as f: f.write(converted) logger.info('Specfile saved at: {0}.'.format(spec_path)) if srpm: msg = utils.build_srpm(spec_path, d) if utils.PY3: logger.info(msg.decode('utf-8')) else: logger.info(msg) else: logger.debug('Printing specfile to stdout.') if utils.PY3: print(converted) else: print(converted.encode('utf-8')) logger.debug('Specfile printed.') logger.info("That's all folks!")
def main(package, v, d, s, r, proxy, srpm, p, b, o, t, venv, autonc, sclize, **scl_kwargs): """Convert PyPI package to RPM specfile or SRPM. \b \b\bArguments: PACKAGE Provide PyPI name of the package or path to compressed source file. """ register_file_log_handler('/tmp/pyp2rpm-{0}.log'.format(getpass.getuser())) if srpm or s: register_console_log_handler() distro = o if t and os.path.splitext(t)[0] in settings.KNOWN_DISTROS: distro = t if not distro and not (b or p): raise click.UsageError("Default python versions for template {0} are " "missing in settings, add them or use flags " "-b/-p to set python versions.".format(t)) logger = logging.getLogger(__name__) logger.info('Pyp2rpm initialized.') convertor = Convertor(package=package, version=v, save_dir=d, template=t or settings.DEFAULT_TEMPLATE, distro=distro, base_python_version=b, python_versions=p, rpm_name=r, proxy=proxy, venv=venv, autonc=autonc) logger.debug( 'Convertor: {0} created. Trying to convert.'.format(convertor)) converted = convertor.convert() logger.debug('Convertor: {0} succesfully converted.'.format(convertor)) if sclize: converted = convert_to_scl(converted, scl_kwargs) if srpm or s: if r: spec_name = r + '.spec' else: prefix = 'python-' if not convertor.name.startswith( 'python-') else '' spec_name = prefix + convertor.name + '.spec' logger.info('Using name: {0} for specfile.'.format(spec_name)) if d == settings.DEFAULT_PKG_SAVE_PATH: # default save_path is rpmbuild tree so we want to save spec # in rpmbuild/SPECS/ spec_path = d + '/SPECS/' + spec_name else: # if user provide save_path then save spec in provided path spec_path = d + '/' + spec_name spec_dir = os.path.dirname(spec_path) if not os.path.exists(spec_dir): os.makedirs(spec_dir) logger.debug('Opening specfile: {0}.'.format(spec_path)) if not utils.PY3: converted = converted.encode('utf-8') with open(spec_path, 'w') as f: f.write(converted) logger.info('Specfile saved at: {0}.'.format(spec_path)) if srpm: msg = utils.build_srpm(spec_path, d) logger.info(msg) else: logger.debug('Printing specfile to stdout.') if utils.PY3: print(converted) else: print(converted.encode('utf-8')) logger.debug('Specfile printed.') logger.info("That's all folks!")
def test_get_metadata_extractor(self, sf, expected): c = Convertor(package=sf) c.local_file = sf c.name = 'plumbum' assert isinstance(c.metadata_extractor, expected)
def test_getter_bad_data(self, sf, expected): with pytest.raises(expected): c = Convertor(package=sf) c.getter
def test_getter_good_data(self, sf, g): c = Convertor(package=sf) assert isinstance(c.getter, g)
def test_get_metadata_extractor(self, sf, n, mf, expected): c = Convertor(source_from = sf, name = n, metadata_from = mf) assert isinstance(c.get_metadata_extractor('spamfile'), expected)
def test_getter_bad_data(self, sf, n, expected): with pytest.raises(expected): c = Convertor(source_from = sf, name = n) c.get_getter()
def test_getter_good_data(self, sf, n, g): c = Convertor(source_from = sf, name = n) assert isinstance(c.get_getter(), g)
def main(): parser = argparse.ArgumentParser(description = 'Convert PyPI package to RPM specfile.') parser.add_argument('-n', required = False, help = 'Name of the package on PyPI (ignored for local files).', metavar = 'PYPI_NAME') parser.add_argument('-v', required = False, help = 'Version of the package to download (ignored for local files).', metavar = 'VERSION') parser.add_argument('-m', required = False, help = 'Where to get metadata from ("pypi" or "local", default: "{0}").'.format(settings.DEFAULT_METADATA_SOURCE), metavar = 'METADATA_SOURCE', choices = ['pypi', 'local'], default = settings.DEFAULT_METADATA_SOURCE) parser.add_argument('-s', required = False, help = 'Where to get package from ("pypi" or "/full/path/to/local/file", default: "{0}").'.format(settings.DEFAULT_PKG_SOURCE), metavar = 'PACKAGE_SOURCE', default = settings.DEFAULT_PKG_SOURCE) parser.add_argument('-d', required = False, help = 'Where to save the package file (default: "{0}")'.format(settings.DEFAULT_PKG_SAVE_PATH), metavar = 'SAVE_DIR', default = settings.DEFAULT_PKG_SAVE_PATH) parser.add_argument('-r', required = False, help = 'Name of rpm package (overrides calculated name)', metavar = 'RPM_NAME', default = None) parser.add_argument('-t', required = False, help = 'Template file (jinja2 format) to render (default: "{0}"). Search order is 1) filesystem, 2) default templates.'.format(settings.DEFAULT_TEMPLATE), metavar = 'TEMPLATE') # no default, because we need to know, whether this was specified or not parser.add_argument('-o', required = False, help = 'Default distro whose conversion rules to use (default: "{0}"). Default templates have their rules associated and ignore this.'.format(settings.DEFAULT_DISTRO), metavar = 'DISTRO', default = settings.DEFAULT_DISTRO, choices = settings.KNOWN_DISTROS) parser.add_argument('-b', required = False, help = 'Base Python version to package for (default: "{0}").'.format(settings.DEFAULT_PYTHON_VERSION), metavar = 'BASE_PYTHON', default = settings.DEFAULT_PYTHON_VERSION) parser.add_argument('-p', required = False, help = 'Additional Python versions to include in the specfile (e.g -p3 for %%{?with_python3}). Can be specified multiple times.', metavar = 'PYTHON_VERSION', default = [], action = 'append') ns = parser.parse_args() if ns.__dict__['n'] == None and not os.path.exists(ns.__dict__['s']): parser.error('You must specify name of the package (-n) or full path (-s).') distro = ns.__dict__['o'] if ns.__dict__['t'] in settings.KNOWN_DISTROS: distro = ns.__dict__['t'] convertor = Convertor(name = ns.__dict__['n'], version = ns.__dict__['v'], metadata_from = ns.__dict__['m'], source_from = ns.__dict__['s'], save_dir = ns.__dict__['d'], template = ns.__dict__['t'] or settings.DEFAULT_TEMPLATE, distro = distro, base_python_version = ns.__dict__['b'], python_versions = ns.__dict__['p'], rpm_name = ns.__dict__['r']) converted = convertor.convert() if isinstance(converted, str): # python 3 print(converted) else: # python 2 print(converted.encode(locale.getpreferredencoding()))