dairiki / humpty

Convert Python wheels to eggs
https://pypi.python.org/pypi/humpty
Other
15 stars 5 forks source link

humpty cannot convert 2.1 metadata #5

Open tardyp opened 6 years ago

tardyp commented 6 years ago

We start to see wheels with 2.1 metadata in wheels.

ex: https://pypi.org/project/python-dateutil/2.7.3/#files

traceback, with some debug info added.

Traceback (most recent call last):
  File "[...]/site-packages/distlib/metadata.py", line 709, in __init__
    self._data = json.loads(data)
  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/az02096/dev/nestor/reposyncer/.venv/bin/humpty", line 11, in <module>
    sys.exit(main())
  File "[...]/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "[...]/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "[...]/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "[...]/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "[...]/site-packages/humpty.py", line 665, in main
    EggWriter(wheel).build_egg(dist_dir)
  File "[...]/site-packages/humpty.py", line 546, in build_egg
    egg_info = egg_metadata(wheel)
  File "[...]/site-packages/humpty.py", line 441, in egg_metadata
    wheel.metadata,
  File "[...]/site-packages/distlib/util.py", line 446, in __get__
    value = self.func(obj)
  File "[...]/site-packages/distlib/wheel.py", line 234, in metadata
    result = Metadata(fileobj=wf)
  File "[...]/site-packages/distlib/metadata.py", line 719, in __init__
    scheme=scheme)
  File "[...]/site-packages/distlib/metadata.py", line 263, in __init__
    self.read_file(fileobj)
  File "[...]/site-packages/distlib/metadata.py", line 362, in read_file
    self.set_metadata_version()
  File "[...]/site-packages/distlib/metadata.py", line 269, in set_metadata_version
    self._fields['Metadata-Version'] = _best_version(self._fields)
  File "[...]/site-packages/distlib/metadata.py", line 149, in _best_version
    raise MetadataConflictError('Unknown metadata set' + str(fields) + str(keys))
distlib.metadata.MetadataConflictError: Unknown metadata set{'Metadata-Version': '2.1', 'Summary': 'Extensions to the standard Python datetime module', 'Maintainer': 'Paul Ganssle', 'Classifier': ['Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Topic :: Software Development :: Libraries'], 'Author-email': 'gustavo@niemeyer.net', 'Maintainer-email': 'dateutil@python.org', 'Platform': ['UNKNOWN'], 'Name': 'python-dateutil', 'Requires-Dist': ['six (>=1.5)'], 'License': 'Dual License', 'Author': 'Gustavo Niemeyer', 'Version': '2.7.3', 'Requires': ['six'], 'Requires-Python': '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*', 'Home-page': 'https://dateutil.readthedocs.io'}['Metadata-Version', 'Summary', 'Maintainer', 'Classifier', 'Author-email', 'Maintainer-email', 'Platform', 'Name', 'Requires-Dist', 'License', 'Author', 'Version', 'Requires', 'Requires-Python', 'Home-page']

I think the problem is probably in distlib, but probably you want to be more reliant on unknown metadata versions

tardyp commented 6 years ago

wheel 0.3.1 introduces 2.1 metadata

https://github.com/pypa/wheel/blob/master/CHANGES.txt