summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xapi_tests.txt1
-rw-r--r--pkg_resources.py46
2 files changed, 24 insertions, 23 deletions
diff --git a/api_tests.txt b/api_tests.txt
index ad5ea819..24f3adea 100755
--- a/api_tests.txt
+++ b/api_tests.txt
@@ -192,6 +192,7 @@ optional second parameter to ``add()``
But even if a distribution is found under multiple path entries, it still only
shows up once when iterating the working set:
+ >>> ws.add_entry(ws.entries[0])
>>> list(ws)
[Bar 0.9 (http://example.com/something)]
diff --git a/pkg_resources.py b/pkg_resources.py
index 6e040d08..ffc31319 100644
--- a/pkg_resources.py
+++ b/pkg_resources.py
@@ -367,16 +367,6 @@ class WorkingSet(object):
- def __iter__(self):
- """Yield distributions for non-duplicate projects in the working set
-
- The yield order is the order in which the items' path entries were
- added to the working set.
- """
- for item in self.entries:
- for key in self.entry_keys[item]:
- yield self.by_key[key]
-
def find(self, req):
"""Find a distribution matching requirement `req`
@@ -408,6 +398,29 @@ class WorkingSet(object):
elif name in entries:
yield entries[name]
+
+
+
+
+
+
+
+
+
+
+ def __iter__(self):
+ """Yield distributions for non-duplicate projects in the working set
+
+ The yield order is the order in which the items' path entries were
+ added to the working set.
+ """
+ seen = {}
+ for item in self.entries:
+ for key in self.entry_keys[item]:
+ if key not in seen:
+ seen[key]=1
+ yield self.by_key[key]
+
def add(self, dist, entry=None):
"""Add `dist` to working set, associated with `entry`
@@ -431,24 +444,11 @@ class WorkingSet(object):
self.by_key[dist.key] = dist
keys = self.entry_keys[entry]
-
if dist.key not in keys:
keys.append(dist.key)
self._added_new(dist)
-
-
-
-
-
-
-
-
-
-
-
-
def resolve(self, requirements, env=None, installer=None):
"""List all distributions needed to (recursively) meet `requirements`