summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/django/utils/itercompat.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/django/utils/itercompat.py')
-rw-r--r--lib/python2.7/site-packages/django/utils/itercompat.py36
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)