From 04f0cad43cce7007c2e0b90c8505c8647bb4c5c9 Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Mon, 11 Nov 2019 15:36:58 +0100 Subject: [PATCH 1/3] allow skipping extras_requires from (Build)Requires sometimes one wants to generate a "minimal" RPM, with no extra dependencies, which this should help with. --- pyp2rpm/bin.py | 9 +++++++-- pyp2rpm/command/extract_dist.py | 6 ++++-- pyp2rpm/convertor.py | 5 ++++- pyp2rpm/metadata_extractors.py | 10 ++++++++++ 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/pyp2rpm/bin.py b/pyp2rpm/bin.py index 1940c766..e502f80e 100644 --- a/pyp2rpm/bin.py +++ b/pyp2rpm/bin.py @@ -131,6 +131,10 @@ def get_scl_help_record(self, ctx): help='Enable / disable metadata extraction from virtualenv ' '(default: enabled).', default=True) +@click.option('--include-extras / --no-include-extras', + help='Enable / disable including extras_require as dependencies ' + '(default: enabled).', + default=True) @click.option('--autonc/ --no-autonc', help='Enable / disable using automatic provides with ' 'a standardized name in dependencies declaration (' @@ -171,7 +175,7 @@ def get_scl_help_record(self, ctx): default=None, metavar='FILE_NAME') @click.argument('package', nargs=1) -def main(package, v, prerelease, d, s, r, proxy, srpm, p, b, o, t, venv, autonc, +def main(package, v, prerelease, d, s, r, proxy, srpm, p, b, o, t, venv, include_extras, autonc, sclize, **scl_kwargs): """Convert PyPI package to RPM specfile or SRPM. @@ -208,7 +212,8 @@ def main(package, v, prerelease, d, s, r, proxy, srpm, p, b, o, t, venv, autonc, rpm_name=r, proxy=proxy, venv=venv, - autonc=autonc) + autonc=autonc, + include_extras=include_extras) logger.debug( 'Convertor: {0} created. Trying to convert.'.format(convertor)) diff --git a/pyp2rpm/command/extract_dist.py b/pyp2rpm/command/extract_dist.py index cdfb693c..4b7cd10e 100644 --- a/pyp2rpm/command/extract_dist.py +++ b/pyp2rpm/command/extract_dist.py @@ -25,12 +25,14 @@ def __init__(self, *args, **kwargs): self.metadata[attr] = to_list(getattr(self.distribution, attr, [])) try: + self.metadata['setup_requires_extras'] = [] + self.metadata['install_requires_extras'] = [] for k, v in getattr( self.distribution, 'extras_require', {}).items(): if k in ['test, docs', 'doc', 'dev']: - attr = 'setup_requires' + attr = 'setup_requires_extras' else: - attr = 'install_requires' + attr = 'install_requires_extras' self.metadata[attr] += to_list(v) except (AttributeError, ValueError): # extras require are skipped in case of wrong data format diff --git a/pyp2rpm/convertor.py b/pyp2rpm/convertor.py index d00fdfd9..3b8a3fef 100644 --- a/pyp2rpm/convertor.py +++ b/pyp2rpm/convertor.py @@ -45,7 +45,8 @@ def __init__(self, package=None, version=None, prerelease=False, distro=settings.DEFAULT_DISTRO, base_python_version=settings.DEFAULT_PYTHON_VERSION, python_versions=[], - rpm_name=None, proxy=None, venv=True, autonc=False): + rpm_name=None, proxy=None, venv=True, autonc=False, + include_extras=True): self.package = package self.version = version self.prerelease = prerelease @@ -60,6 +61,7 @@ def __init__(self, package=None, version=None, prerelease=False, self.proxy = proxy self.venv = venv self.autonc = autonc + self.include_extras = include_extras self.pypi = True suffix = os.path.splitext(self.package)[1] if (os.path.exists(self.package) @@ -275,6 +277,7 @@ def metadata_extractor(self): self.rpm_name, self.venv, self.distro, + self.include_extras, base_python_version) return self._metadata_extractor diff --git a/pyp2rpm/metadata_extractors.py b/pyp2rpm/metadata_extractors.py index aa0892e4..21072ebf 100644 --- a/pyp2rpm/metadata_extractors.py +++ b/pyp2rpm/metadata_extractors.py @@ -179,6 +179,7 @@ class LocalMetadataExtractor(object): def __init__(self, local_file, name, name_convertor, version, rpm_name=None, venv=True, distro=None, + include_extras_require=True, base_python_version=None, metadata_extension=False): self.local_file = local_file @@ -189,6 +190,7 @@ def __init__(self, local_file, name, name_convertor, version, self.rpm_name = rpm_name self.venv = venv self.distro = distro + self.include_extras_require = include_extras_require self.base_python_version = base_python_version self.metadata_extension = metadata_extension self.unsupported_version = None @@ -385,6 +387,10 @@ def runtime_deps(self): # install_requires """ use_rich_deps = self.distro not in settings.RPM_RICH_DEP_BLACKLIST install_requires = self.metadata['install_requires'] + + if self.include_extras_require: + install_requires += self.metadata['install_requires_extras'] + if self.metadata[ 'entry_points'] and 'setuptools' not in install_requires: install_requires.append('setuptools') # entrypoints @@ -410,6 +416,10 @@ def build_deps(self): # setup_requires [tests_require, install_requires] if 'setuptools' not in build_requires: build_requires.append('setuptools') + + if self.include_extras_require: + build_requires += self.metadata['setup_requires_extras'] + return sorted(self.name_convert_deps_list(deps_from_pyp_format( build_requires, runtime=False, use_rich_deps=use_rich_deps))) From 26aefbe51a169e9dd2f57084b27d1a928790bb6f Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Tue, 12 Nov 2019 10:47:50 +0100 Subject: [PATCH 2/3] add tests for include_extras --- tests/test_data/obal-0.5.1.tar.gz | Bin 0 -> 31403 bytes tests/test_metadata_extractors.py | 17 +++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 tests/test_data/obal-0.5.1.tar.gz diff --git a/tests/test_data/obal-0.5.1.tar.gz b/tests/test_data/obal-0.5.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..28cdf2fa7e3b616685a4b53ab5a025a45c33781a GIT binary patch literal 31403 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 Q;1^gMo;wrB0Tk%}1Bn$)UjP6A literal 0 HcmV?d00001 diff --git a/tests/test_metadata_extractors.py b/tests/test_metadata_extractors.py index 151d3cae..aa435c7a 100644 --- a/tests/test_metadata_extractors.py +++ b/tests/test_metadata_extractors.py @@ -355,6 +355,23 @@ def test_doc_files(self, doc_files, license, other): assert data.data['doc_license'] == license assert data.data['doc_files'] == other + @pytest.mark.parametrize(('archive', 'include_extras', 'expected_build', 'expected_runtime'), [ + ('obal-0.5.1.tar.gz', True, + [['BuildRequires', 'python2-devel'], ['BuildRequires', 'python-setuptools']], + [['Requires', 'python-ansible', '>=', '2.5'], ['Requires', 'python-argcomplete'], ['Requires', 'python-setuptools']]), + ('obal-0.5.1.tar.gz', False, + [['BuildRequires', 'python2-devel'], ['BuildRequires', 'python-setuptools']], + [['Requires', 'python-ansible', '>=', '2.5'], ['Requires', 'python-setuptools']]), + ]) + def test_extras_require(self, archive, include_extras, expected_build, expected_runtime): + name, version = archive.split('-') + extractor = me.SetupPyMetadataExtractor('{0}{1}'.format( + self.td_dir, archive), name, self.nc, version[:5], + include_extras_require=include_extras) + data = extractor.extract_data() + assert data.build_deps == expected_build + assert data.runtime_deps == expected_runtime + class TestWheelMetadataExtractor(object): td_dir = '{0}/test_data/'.format(tests_dir) From 1e55551c88a2335a8c5079fcfc64412d26794512 Mon Sep 17 00:00:00 2001 From: Evgeni Golov Date: Tue, 12 Nov 2019 11:14:03 +0100 Subject: [PATCH 3/3] also add tests for build_dep --- .../djangorestframework-queryfields-1.0.0.tar.gz | Bin 0 -> 3902 bytes tests/test_metadata_extractors.py | 10 +++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 tests/test_data/djangorestframework-queryfields-1.0.0.tar.gz diff --git a/tests/test_data/djangorestframework-queryfields-1.0.0.tar.gz b/tests/test_data/djangorestframework-queryfields-1.0.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..442036aad10d740136f9c559e17f32559f58c717 GIT binary patch literal 3902 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', '2.5'], ['Requires', 'python-setuptools']]), + ('djangorestframework-queryfields-1.0.0.tar.gz', True, + [['BuildRequires', 'python2-devel'], ['BuildRequires', 'python-django'], ['BuildRequires', 'python-djangorestframework'], + ['BuildRequires', 'python-mock-django'], ['BuildRequires', 'python-pytest-django'], ['BuildRequires', 'python-setuptools'], + ['BuildRequires', 'python-setuptools'], ['BuildRequires', 'python-wheel']], + []), + ('djangorestframework-queryfields-1.0.0.tar.gz', False, + [['BuildRequires', 'python2-devel'], ['BuildRequires', 'python-setuptools']], + []), ]) def test_extras_require(self, archive, include_extras, expected_build, expected_runtime): - name, version = archive.split('-') + name, version = archive.rsplit('-', 1) extractor = me.SetupPyMetadataExtractor('{0}{1}'.format( self.td_dir, archive), name, self.nc, version[:5], include_extras_require=include_extras)