diff options
-rwxr-xr-x | api_tests.txt | 1 | ||||
-rw-r--r-- | pkg_resources.py | 46 |
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` |