Skip to content

distlib should not crash on bad metadata #153

@vsajip

Description

@vsajip

Original report by Michał Górny (Bitbucket: mgorny, GitHub: mgorny).


distlib currently crashes upon meeting invalid package metadata, e.g.:grinning:

$ python3.8 -c "import distlib.database; list(distlib.database.DistributionPath(include_egg=True).get_distributions())"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/tmp/distlib/distlib/database.py", line 213, in get_distributions
    self._generate_cache()
  File "/tmp/distlib/distlib/database.py", line 167, in _generate_cache
    for dist in self._yield_distributions():
  File "/tmp/distlib/distlib/database.py", line 157, in _yield_distributions
    yield old_dist_class(r.path, self)
  File "/tmp/distlib/distlib/database.py", line 878, in __init__
    metadata = self._get_metadata(path)
  File "/tmp/distlib/distlib/database.py", line 964, in _get_metadata
    metadata.add_requirements(requires)
  File "/tmp/distlib/distlib/metadata.py", line 1039, in add_requirements
    self._legacy.add_requirements(requirements)
  File "/tmp/distlib/distlib/metadata.py", line 575, in add_requirements
    self['Requires-Dist'] += requirements
  File "/tmp/distlib/distlib/metadata.py", line 276, in __setitem__
    return self.set(name, value)
  File "/tmp/distlib/distlib/metadata.py", line 453, in set
    if not scheme.is_valid_matcher(v.split(';')[0]):
  File "/tmp/distlib/distlib/version.py", line 703, in is_valid_matcher
    self.matcher(s)
  File "/tmp/distlib/distlib/version.py", line 115, in __init__
    raise ValueError('\'.*\' not allowed for '
ValueError: '.*' not allowed for '>=' constraints

Unfortunately, bad metadata occurs occasionally in the wild, and crashing because one “broken” package exists is far from useful behavior. Could you please make distlib handle this gracefully and emit warnings instead?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingmajor

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions