Skip to content

Commit c0c15de

Browse files
committed
Remove support for wheel archives.
1 parent 7f2d9a0 commit c0c15de

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
@@ -251,14 +251,9 @@ def metadata_extractor(self):
251251
raise AttributeError("local_file attribute must be set before "
252252
"calling metadata_extractor")
253253
if not hasattr(self, '_metadata_extractor'):
254-
if self.local_file.endswith('.whl'):
255-
logger.info("Getting metadata from wheel using "
256-
"WheelMetadataExtractor.")
257-
extractor_cls = metadata_extractors.WheelMetadataExtractor
258-
else:
259-
logger.info("Getting metadata from setup.py using "
260-
"SetupPyMetadataExtractor.")
261-
extractor_cls = metadata_extractors.SetupPyMetadataExtractor
254+
logger.info("Getting metadata from setup.py using "
255+
"SetupPyMetadataExtractor.")
256+
extractor_cls = metadata_extractors.SetupPyMetadataExtractor
262257

263258
base_python_version = (
264259
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
@@ -531,90 +531,3 @@ def data_from_archive(self):
531531
"sphinx", self.base_python_version)])
532532

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