diff options
Diffstat (limited to 'lib/python2.7/site-packages/django/utils/itercompat.py')
-rw-r--r-- | lib/python2.7/site-packages/django/utils/itercompat.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/django/utils/itercompat.py b/lib/python2.7/site-packages/django/utils/itercompat.py new file mode 100644 index 0000000..c50dcfb --- /dev/null +++ b/lib/python2.7/site-packages/django/utils/itercompat.py @@ -0,0 +1,36 @@ +""" +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 collections +import itertools +import sys +import warnings + + +def is_iterable(x): + "A implementation independent way of checking for iterables" + try: + iter(x) + except TypeError: + return False + else: + return True + +def is_iterator(x): + """An implementation independent way of checking for iterators + + Python 2.6 has a different implementation of collections.Iterator which + accepts anything with a `next` method. 2.7+ requires and `__iter__` method + as well. + """ + if sys.version_info >= (2, 7): + return isinstance(x, collections.Iterator) + return isinstance(x, collections.Iterator) and hasattr(x, '__iter__') + +def product(*args, **kwds): + warnings.warn("django.utils.itercompat.product is deprecated; use the native version instead", + DeprecationWarning, stacklevel=2) + return itertools.product(*args, **kwds) |