aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabi Davar <grizzly.nyo@gmail.com>2016-07-30 16:52:11 +0300
committerGabi Davar <grizzly.nyo@gmail.com>2016-08-23 11:58:21 +0300
commit452e13ce06ca0cdebebc61c9326a2db184095353 (patch)
treeaacb9e0df7094b7abe51f4ee195cea1f70b9d698
parent1aa71905fc9bd9a13f2b0c371e869ae8eb27308c (diff)
downloadexternal_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__.py6
-rw-r--r--pkg_resources/tests/test_resources.py18
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([])