Index: third_party/jinja2/tests.py |
diff --git a/third_party/jinja2/tests.py b/third_party/jinja2/tests.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..50510b0d353791c5dd3c3fd213cfc1545a9576cc |
--- /dev/null |
+++ b/third_party/jinja2/tests.py |
@@ -0,0 +1,161 @@ |
+# -*- coding: utf-8 -*- |
+""" |
+ jinja2.tests |
+ ~~~~~~~~~~~~ |
+ |
+ Jinja test functions. Used with the "is" operator. |
+ |
+ :copyright: (c) 2010 by the Jinja Team. |
+ :license: BSD, see LICENSE for more details. |
+""" |
+import re |
+from jinja2.runtime import Undefined |
+ |
+try: |
+ from collections import Mapping as MappingType |
+except ImportError: |
+ import UserDict |
+ MappingType = (UserDict.UserDict, UserDict.DictMixin, dict) |
+ |
+# nose, nothing here to test |
+__test__ = False |
+ |
+ |
+number_re = re.compile(r'^-?\d+(\.\d+)?$') |
+regex_type = type(number_re) |
+ |
+ |
+try: |
+ test_callable = callable |
+except NameError: |
+ def test_callable(x): |
+ return hasattr(x, '__call__') |
+ |
+ |
+def test_odd(value): |
+ """Return true if the variable is odd.""" |
+ return value % 2 == 1 |
+ |
+ |
+def test_even(value): |
+ """Return true if the variable is even.""" |
+ return value % 2 == 0 |
+ |
+ |
+def test_divisibleby(value, num): |
+ """Check if a variable is divisible by a number.""" |
+ return value % num == 0 |
+ |
+ |
+def test_defined(value): |
+ """Return true if the variable is defined: |
+ |
+ .. sourcecode:: jinja |
+ |
+ {% if variable is defined %} |
+ value of variable: {{ variable }} |
+ {% else %} |
+ variable is not defined |
+ {% endif %} |
+ |
+ See the :func:`default` filter for a simple way to set undefined |
+ variables. |
+ """ |
+ return not isinstance(value, Undefined) |
+ |
+ |
+def test_undefined(value): |
+ """Like :func:`defined` but the other way round.""" |
+ return isinstance(value, Undefined) |
+ |
+ |
+def test_none(value): |
+ """Return true if the variable is none.""" |
+ return value is None |
+ |
+ |
+def test_lower(value): |
+ """Return true if the variable is lowercased.""" |
+ return unicode(value).islower() |
+ |
+ |
+def test_upper(value): |
+ """Return true if the variable is uppercased.""" |
+ return unicode(value).isupper() |
+ |
+ |
+def test_string(value): |
+ """Return true if the object is a string.""" |
+ return isinstance(value, basestring) |
+ |
+ |
+def test_mapping(value): |
+ """Return true if the object is a mapping (dict etc.). |
+ |
+ .. versionadded:: 2.6 |
+ """ |
+ return isinstance(value, MappingType) |
+ |
+ |
+def test_number(value): |
+ """Return true if the variable is a number.""" |
+ return isinstance(value, (int, long, float, complex)) |
+ |
+ |
+def test_sequence(value): |
+ """Return true if the variable is a sequence. Sequences are variables |
+ that are iterable. |
+ """ |
+ try: |
+ len(value) |
+ value.__getitem__ |
+ except: |
+ return False |
+ return True |
+ |
+ |
+def test_sameas(value, other): |
+ """Check if an object points to the same memory address than another |
+ object: |
+ |
+ .. sourcecode:: jinja |
+ |
+ {% if foo.attribute is sameas false %} |
+ the foo attribute really is the `False` singleton |
+ {% endif %} |
+ """ |
+ return value is other |
+ |
+ |
+def test_iterable(value): |
+ """Check if it's possible to iterate over an object.""" |
+ try: |
+ iter(value) |
+ except TypeError: |
+ return False |
+ return True |
+ |
+ |
+def test_escaped(value): |
+ """Check if the value is escaped.""" |
+ return hasattr(value, '__html__') |
+ |
+ |
+TESTS = { |
+ 'odd': test_odd, |
+ 'even': test_even, |
+ 'divisibleby': test_divisibleby, |
+ 'defined': test_defined, |
+ 'undefined': test_undefined, |
+ 'none': test_none, |
+ 'lower': test_lower, |
+ 'upper': test_upper, |
+ 'string': test_string, |
+ 'mapping': test_mapping, |
+ 'number': test_number, |
+ 'sequence': test_sequence, |
+ 'iterable': test_iterable, |
+ 'callable': test_callable, |
+ 'sameas': test_sameas, |
+ 'escaped': test_escaped |
+} |