diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2013-05-24 10:36:51 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2013-05-24 10:36:51 -0400 |
commit | b8327d7f646141415beb30acd39ce8840ebc708b (patch) | |
tree | 0b65a0e6dcefef3d7182009eddf7dc05c4337b6c | |
parent | 4a45583a15586a574c857826c3807d9123ef4418 (diff) | |
download | external_python_setuptools-b8327d7f646141415beb30acd39ce8840ebc708b.tar.gz external_python_setuptools-b8327d7f646141415beb30acd39ce8840ebc708b.tar.bz2 external_python_setuptools-b8327d7f646141415beb30acd39ce8840ebc708b.zip |
Add unique_everseen from Python 2.7 docs
--HG--
branch : distribute
-rwxr-xr-x | setuptools/package_index.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/setuptools/package_index.py b/setuptools/package_index.py index 8974a647..e542f586 100755 --- a/setuptools/package_index.py +++ b/setuptools/package_index.py @@ -1,5 +1,6 @@ """PyPI and direct package downloading""" import sys, os.path, re, urlparse, urllib, urllib2, shutil, random, socket, cStringIO +import itertools import base64 import httplib from pkg_resources import * @@ -134,6 +135,24 @@ def interpret_distro_name(location, basename, metadata, platform = platform ) +# From Python 2.7 docs +def unique_everseen(iterable, key=None): + "List unique elements, preserving order. Remember all elements ever seen." + # unique_everseen('AAAABBBCCDAABBB') --> A B C D + # unique_everseen('ABBCcAD', str.lower) --> A B C D + seen = set() + seen_add = seen.add + if key is None: + for element in itertools.ifilterfalse(seen.__contains__, iterable): + seen_add(element) + yield element + else: + for element in iterable: + k = key(element) + if k not in seen: + seen_add(k) + yield element + REL = re.compile("""<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>""", re.I) # this line is here to fix emacs' cruddy broken syntax highlighting |