aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2013-05-24 10:36:51 -0400
committerJason R. Coombs <jaraco@jaraco.com>2013-05-24 10:36:51 -0400
commitb8327d7f646141415beb30acd39ce8840ebc708b (patch)
tree0b65a0e6dcefef3d7182009eddf7dc05c4337b6c
parent4a45583a15586a574c857826c3807d9123ef4418 (diff)
downloadexternal_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-xsetuptools/package_index.py19
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