diff options
author | Gabi Davar <grizzly.nyo@gmail.com> | 2016-07-30 16:52:11 +0300 |
---|---|---|
committer | Gabi Davar <grizzly.nyo@gmail.com> | 2016-08-23 11:58:21 +0300 |
commit | 452e13ce06ca0cdebebc61c9326a2db184095353 (patch) | |
tree | aacb9e0df7094b7abe51f4ee195cea1f70b9d698 | |
parent | 1aa71905fc9bd9a13f2b0c371e869ae8eb27308c (diff) | |
download | external_python_setuptools-452e13ce06ca0cdebebc61c9326a2db184095353.tar.gz external_python_setuptools-452e13ce06ca0cdebebc61c9326a2db184095353.tar.bz2 external_python_setuptools-452e13ce06ca0cdebebc61c9326a2db184095353.zip |
fix for extra names containing '-'
-rw-r--r-- | pkg_resources/__init__.py | 6 | ||||
-rw-r--r-- | pkg_resources/tests/test_resources.py | 18 |
2 files changed, 21 insertions, 3 deletions
diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py index 27d70a60..80da5c18 100644 --- a/pkg_resources/__init__.py +++ b/pkg_resources/__init__.py @@ -1428,7 +1428,7 @@ def safe_extra(extra): Any runs of non-alphanumeric characters are replaced with a single '_', and the result is always lowercased. """ - return re.sub('[^A-Za-z0-9.]+', '_', extra).lower() + return re.sub('[^A-Za-z0-9.-]+', '_', extra).lower() def to_filename(name): @@ -2807,8 +2807,8 @@ class DistInfoDistribution(Distribution): dm[None].extend(common) for extra in self._parsed_pkg_info.get_all('Provides-Extra') or []: - extra = safe_extra(extra.strip()) - dm[extra] = list(frozenset(reqs_for_extra(extra)) - common) + s_extra = safe_extra(extra.strip()) + dm[s_extra] = list(frozenset(reqs_for_extra(extra)) - common) return dm diff --git a/pkg_resources/tests/test_resources.py b/pkg_resources/tests/test_resources.py index 2ed56233..3b13884b 100644 --- a/pkg_resources/tests/test_resources.py +++ b/pkg_resources/tests/test_resources.py @@ -221,6 +221,24 @@ class TestDistro: res = list(ws.resolve(parse_requirements("Foo[baz]"), ad)) assert res == [Foo, quux] + def test_marker_evaluation_with_extras_normlized(self): + """Extras are also evaluated as markers at resolution time.""" + ad = pkg_resources.Environment([]) + ws = WorkingSet([]) + # Metadata needs to be native strings due to cStringIO behaviour in + # 2.6, so use str(). + Foo = Distribution.from_filename( + "/foo_dir/Foo-1.2.dist-info", + metadata=Metadata(("METADATA", str("Provides-Extra: baz-lightyear\n" + "Requires-Dist: quux; extra=='baz-lightyear'"))) + ) + ad.add(Foo) + assert list(ws.resolve(parse_requirements("Foo"), ad)) == [Foo] + quux = Distribution.from_filename("/foo_dir/quux-1.0.dist-info") + ad.add(quux) + res = list(ws.resolve(parse_requirements("Foo[baz-lightyear]"), ad)) + assert res == [Foo, quux] + def test_marker_evaluation_with_multiple_extras(self): ad = pkg_resources.Environment([]) ws = WorkingSet([]) |