--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/utils/itercompat.py Wed Jun 02 18:57:35 2010 +0200
@@ -0,0 +1,39 @@
+"""
+Providing iterator functions that are not in all version of Python we support.
+Where possible, we try to use the system-native version and only fall back to
+these implementations if necessary.
+"""
+
+import itertools
+
+# Fallback for Python 2.4, Python 2.5
+def product(*args, **kwds):
+ """
+ Taken from http://docs.python.org/library/itertools.html#itertools.product
+ """
+ # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
+ # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
+ pools = map(tuple, args) * kwds.get('repeat', 1)
+ result = [[]]
+ for pool in pools:
+ result = [x+[y] for x in result for y in pool]
+ for prod in result:
+ yield tuple(prod)
+
+if hasattr(itertools, 'product'):
+ product = itertools.product
+
+def is_iterable(x):
+ "A implementation independent way of checking for iterables"
+ try:
+ iter(x)
+ except TypeError:
+ return False
+ else:
+ return True
+
+def all(iterable):
+ for item in iterable:
+ if not item:
+ return False
+ return True