diff -r 8d941af65caf -r 77b6da96e6f1 web/lib/django/utils/itercompat.py --- /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