Skip to content

Commit 153b186

Browse files
committed
Remove support for wheel archives.
1 parent eab5036 commit 153b186

9 files changed

Lines changed: 33 additions & 253 deletions

pyp2rpm/archive.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,6 @@ def is_tar(self):
9696
def is_egg(self):
9797
return self.suffix == '.egg'
9898

99-
@property
100-
def is_wheel(self):
101-
return self.suffix == '.whl'
102-
10399
def open(self):
104100
try:
105101
if self.extractor_cls == ZipFile:
@@ -284,30 +280,6 @@ def top_directory(self):
284280
if self.handle:
285281
return os.path.commonprefix(self.handle.getnames()).rstrip('/')
286282

287-
@property
288-
def json_wheel_metadata(self):
289-
"""Simple getter that get content of metadata.json file in .whl archive
290-
Returns:
291-
metadata from metadata.json or pydist.json in json format
292-
"""
293-
for meta_file in ("metadata.json", "pydist.json"):
294-
try:
295-
return json.loads(self.get_content_of_file(meta_file))
296-
except TypeError as err:
297-
logger.warning(
298-
'Could not extract metadata from {}.'
299-
' Error: {}'.format(meta_file, err))
300-
sys.exit(
301-
'Unable to extract package metadata from .whl archive. '
302-
'This might be caused by an old .whl format version. '
303-
'You may ask the upstream to upload fresh wheels created '
304-
'with wheel >= 0.17.0 or to upload an sdist as well to '
305-
'workaround this problem.')
306-
307-
def wheel_description(self):
308-
"""Get content of DESCRIPTION file in .whl archive"""
309-
return self.get_content_of_file('DESCRIPTION.rst')
310-
311283
@property
312284
def record(self):
313285
"""Getter that get content of RECORD file in .whl archive

pyp2rpm/convertor.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -253,14 +253,9 @@ def metadata_extractor(self):
253253
raise AttributeError("local_file attribute must be set before "
254254
"calling metadata_extractor")
255255
if not hasattr(self, '_metadata_extractor'):
256-
if self.local_file.endswith('.whl'):
257-
logger.info("Getting metadata from wheel using "
258-
"WheelMetadataExtractor.")
259-
extractor_cls = metadata_extractors.WheelMetadataExtractor
260-
else:
261-
logger.info("Getting metadata from setup.py using "
262-
"SetupPyMetadataExtractor.")
263-
extractor_cls = metadata_extractors.SetupPyMetadataExtractor
256+
logger.info("Getting metadata from setup.py using "
257+
"SetupPyMetadataExtractor.")
258+
extractor_cls = metadata_extractors.SetupPyMetadataExtractor
264259

265260
base_python_version = (
266261
self.base_python_version or self.template_base_py_ver)

pyp2rpm/metadata_extractors.py

Lines changed: 0 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -534,90 +534,3 @@ def data_from_archive(self):
534534
"sphinx", self.base_python_version)])
535535

536536
return archive_data
537-
538-
539-
class WheelMetadataExtractor(LocalMetadataExtractor):
540-
"""Class to extract metadata from wheel archive"""
541-
542-
@property
543-
def json_metadata(self):
544-
if not hasattr(self, '_json_metadata'):
545-
self._json_metadata = self.archive.json_wheel_metadata
546-
return self._json_metadata
547-
548-
def get_requires(self, requires_types):
549-
"""Extracts requires of given types from metadata file, filter windows
550-
specific requires.
551-
"""
552-
if not isinstance(requires_types, list):
553-
requires_types = list(requires_types)
554-
extracted_requires = []
555-
for requires_name in requires_types:
556-
for requires in self.json_metadata.get(requires_name, []):
557-
if 'win' in requires.get('environment', {}):
558-
continue
559-
extracted_requires.extend(requires['requires'])
560-
return extracted_requires
561-
562-
@property
563-
def runtime_deps(self):
564-
run_requires = self.get_requires(['run_requires', 'meta_requires'])
565-
if 'setuptools' not in run_requires:
566-
run_requires.append('setuptools')
567-
return self.name_convert_deps_list(deps_from_pydit_json(run_requires))
568-
569-
@property
570-
def build_deps(self):
571-
build_requires = self.get_requires(['build_requires'])
572-
if self.has_test_suite:
573-
build_requires += self.get_requires([
574-
'test_requires', 'run_requires'])
575-
if 'setuptools' not in build_requires:
576-
build_requires.append('setuptools')
577-
return self.name_convert_deps_list(deps_from_pydit_json(
578-
build_requires, runtime=False))
579-
580-
@property
581-
def py_modules(self):
582-
return self.archive.record.get('modules')
583-
584-
@property
585-
def scripts(self):
586-
return self.archive.record.get('scripts', [])
587-
588-
@property
589-
def home_page(self):
590-
urls = [url for url in self.json_metadata.get('extensions', {})
591-
.get('python.details', {})
592-
.get('project_urls', {}).values()]
593-
if urls:
594-
return urls[0]
595-
596-
@property
597-
@process_description
598-
def description(self):
599-
return self.archive.wheel_description()
600-
601-
@property
602-
def summary(self):
603-
return self.json_metadata.get('summary', None)
604-
605-
@property
606-
def classifiers(self):
607-
return self.json_metadata.get('classifiers', [])
608-
609-
@property
610-
def license(self):
611-
return self.json_metadata.get('license', None)
612-
613-
@property
614-
def has_test_suite(self):
615-
return self.has_test_files or self.json_metadata.get(
616-
'test_requires', False) is not False
617-
618-
@property
619-
def doc_files(self):
620-
return (self.json_metadata.get('extensions', {})
621-
.get('python.details', {})
622-
.get('document_names', {})
623-
.values())

pyp2rpm/package_getters.py

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
logger = logger = logging.getLogger(__name__)
2323

2424

25-
def get_url(client, name, version, wheel=False, hashed_format=False):
25+
def get_url(client, name, version, hashed_format=False):
2626
"""Retrieves list of package URLs using PyPI's XML-RPC. Chooses URL
2727
of prefered archive and md5_digest.
2828
"""
@@ -39,29 +39,21 @@ def get_url(client, name, version, wheel=False, hashed_format=False):
3939
url = ''
4040
md5_digest = None
4141

42-
if not wheel:
43-
# Prefered archive is tar.gz
44-
if len(release_urls):
45-
zip_url = zip_md5 = ''
46-
for release_url in release_urls:
47-
if release_url['url'].endswith("tar.gz"):
48-
url = release_url['url']
49-
md5_digest = release_url['md5_digest']
50-
if release_url['url'].endswith(".zip"):
51-
zip_url = release_url['url']
52-
zip_md5 = release_url['md5_digest']
53-
if url == '':
54-
url = zip_url or release_urls[0]['url']
55-
md5_digest = zip_md5 or release_urls[0]['md5_digest']
56-
elif release_data:
57-
url = release_data['download_url']
58-
else:
59-
# Only wheel is acceptable
42+
# Prefered archive is tar.gz
43+
if len(release_urls):
44+
zip_url = zip_md5 = ''
6045
for release_url in release_urls:
61-
if release_url['url'].endswith("none-any.whl"):
46+
if release_url['url'].endswith("tar.gz"):
6247
url = release_url['url']
6348
md5_digest = release_url['md5_digest']
64-
break
49+
if release_url['url'].endswith(".zip"):
50+
zip_url = release_url['url']
51+
zip_md5 = release_url['md5_digest']
52+
if url == '':
53+
url = zip_url or release_urls[0]['url']
54+
md5_digest = zip_md5 or release_urls[0]['md5_digest']
55+
elif release_data:
56+
url = release_data['download_url']
6557
if not url:
6658
raise exceptions.MissingUrlException(
6759
"Url of source archive not found.")
@@ -149,7 +141,7 @@ def __init__(self, client, name, version=None, save_dir=None):
149141
'found on PyPI.'.format(name, version))
150142
self.save_dir_init(save_dir)
151143

152-
def get(self, wheel=False):
144+
def get(self):
153145
"""Downloads the package from PyPI.
154146
Returns:
155147
Full path of the downloaded file.
@@ -158,14 +150,10 @@ def get(self, wheel=False):
158150
"""
159151
try:
160152
url = get_url(self.client, self.name, self.version,
161-
wheel, hashed_format=True)[0]
153+
hashed_format=True)[0]
162154
except exceptions.MissingUrlException as e:
163155
raise SystemExit(e)
164-
if wheel:
165-
self.temp_dir = tempfile.mkdtemp()
166-
save_dir = self.temp_dir
167-
else:
168-
save_dir = self.save_dir
156+
save_dir = self.save_dir
169157

170158
save_file = '{0}/{1}'.format(save_dir, url.split('/')[-1])
171159
request.urlretrieve(url, save_file)

tests/test_convertor.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55

66
from pyp2rpm.convertor import Convertor
77
from pyp2rpm.exceptions import NoSuchPackageException
8-
from pyp2rpm.metadata_extractors import (SetupPyMetadataExtractor,
9-
WheelMetadataExtractor)
8+
from pyp2rpm.metadata_extractors import SetupPyMetadataExtractor
109
from pyp2rpm.package_getters import PypiDownloader, LocalFileGetter
1110
from pyp2rpm.package_data import PackageData
1211

@@ -37,8 +36,6 @@ def test_getter_bad_data(self, sf, expected):
3736

3837
@pytest.mark.parametrize(('sf', 'expected'), [
3938
('{0}plumbum-0.9.0.tar.gz'.format(td_dir), SetupPyMetadataExtractor),
40-
('{0}setuptools-19.6-py2.py3-none-any.whl'.format(td_dir),
41-
WheelMetadataExtractor)
4239
])
4340
def test_get_metadata_extractor(self, sf, expected):
4441
c = Convertor(package=sf)
-264 KB
Binary file not shown.
-461 KB
Binary file not shown.

tests/test_metadata_extractors.py

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -350,75 +350,3 @@ def test_doc_files(self, doc_files, license, other):
350350
data = self.e[0].extract_data()
351351
assert data.data['doc_license'] == license
352352
assert data.data['doc_files'] == other
353-
354-
355-
class TestWheelMetadataExtractor(object):
356-
td_dir = '{0}/test_data/'.format(tests_dir)
357-
358-
def setup_method(self, method):
359-
self.nc = NameConvertor('fedora')
360-
self.e = []
361-
for archive, name, version in [
362-
('setuptools-19.6-py2.py3-none-any.whl',
363-
'setuptools', '19.6.2'),
364-
('py2exe-0.9.2.2-py33.py34-none-any.whl',
365-
'py2exe', '0.9.2.2')]:
366-
self.e.append(me.WheelMetadataExtractor('{0}{1}'.format(
367-
self.td_dir, archive), name, self.nc, version, venv=False))
368-
369-
@pytest.mark.parametrize(('i', 'what', 'expected'), [
370-
(0, 'runtime_deps', [['Requires', 'python-certifi', '==', '2015.11.20'],
371-
['Requires', 'python-setuptools']]),
372-
(0, 'build_deps', [['BuildRequires', 'python2-devel'],
373-
['BuildRequires', 'python-pytest', '>=', '2.8'],
374-
['BuildRequires', 'python-setuptools[ssl]'],
375-
['BuildRequires', 'python-certifi', '==',
376-
'2015.11.20'],
377-
['BuildRequires', 'python-setuptools']]),
378-
379-
(0, 'py_modules', ['_markerlib', 'pkg_resources', 'setuptools']),
380-
(0, 'packages', ['setuptools']),
381-
(0, 'scripts', []),
382-
(0, 'home_page', 'https://bitbucket.org/pypa/setuptools'),
383-
(0, 'summary', 'Easily download, build, install, upgrade, and uninstall Python packages'),
384-
(0, 'license', 'TODO:'),
385-
(0, 'has_pth', False),
386-
(0, 'has_extension', False),
387-
(0, 'has_test_suite', True),
388-
(0, 'doc_files', ['DESCRIPTION.rst']),
389-
(0, 'doc_license', []),
390-
(0, 'sphinx_dir', None),
391-
(0, 'python_versions', ['2', '3']),
392-
(1, 'runtime_deps', [['Requires', 'python-setuptools']]),
393-
(1, 'build_deps', [['BuildRequires', 'python2-devel'],
394-
['BuildRequires', 'python-setuptools']]),
395-
(1, 'py_modules', ['py2exe']),
396-
(1, 'packages', ['py2exe']),
397-
(1, 'scripts', ['build_exe-script.py', 'build_exe.exe']),
398-
(1, 'home_page', 'TODO:'),
399-
(1, 'summary', 'Build standalone executables for Windows (python 3 version)'),
400-
(1, 'license', 'MIT/X11'),
401-
(1, 'has_pth', False),
402-
(1, 'has_extension', False),
403-
(1, 'has_test_suite', False),
404-
(1, 'doc_files', []),
405-
(1, 'doc_license', []),
406-
(1, 'sphinx_dir', None),
407-
(1, 'python_versions', ['3']),
408-
409-
])
410-
def test_extract(self, i, what, expected):
411-
data = self.e[i].extract_data()
412-
assert getattr(data, what) == expected
413-
414-
@pytest.mark.parametrize(("input", "expected"), [
415-
([], ""),
416-
(['License :: OSI Approved :: Python Software Foundation License'],
417-
'Python'),
418-
(['Classifier: License :: OSI Approved :: Python Software Foundation License'],
419-
'Python'),
420-
(['License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)',
421-
'License :: OSI Approved :: MIT License'], 'GPLv2+ and MIT'),
422-
])
423-
def test_license_from_trove(self, input, expected):
424-
assert me.license_from_trove(input) == expected

0 commit comments

Comments
 (0)