comparison venv/lib/python2.7/site-packages/jinja2/tests.py @ 0:d67268158946 draft

planemo upload commit a3f181f5f126803c654b3a66dd4e83a48f7e203b
author bcclaywell
date Mon, 12 Oct 2015 17:43:33 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:d67268158946
1 # -*- coding: utf-8 -*-
2 """
3 jinja2.tests
4 ~~~~~~~~~~~~
5
6 Jinja test functions. Used with the "is" operator.
7
8 :copyright: (c) 2010 by the Jinja Team.
9 :license: BSD, see LICENSE for more details.
10 """
11 import re
12 from collections import Mapping
13 from jinja2.runtime import Undefined
14 from jinja2._compat import text_type, string_types, integer_types
15 import decimal
16
17 number_re = re.compile(r'^-?\d+(\.\d+)?$')
18 regex_type = type(number_re)
19
20
21 test_callable = callable
22
23
24 def test_odd(value):
25 """Return true if the variable is odd."""
26 return value % 2 == 1
27
28
29 def test_even(value):
30 """Return true if the variable is even."""
31 return value % 2 == 0
32
33
34 def test_divisibleby(value, num):
35 """Check if a variable is divisible by a number."""
36 return value % num == 0
37
38
39 def test_defined(value):
40 """Return true if the variable is defined:
41
42 .. sourcecode:: jinja
43
44 {% if variable is defined %}
45 value of variable: {{ variable }}
46 {% else %}
47 variable is not defined
48 {% endif %}
49
50 See the :func:`default` filter for a simple way to set undefined
51 variables.
52 """
53 return not isinstance(value, Undefined)
54
55
56 def test_undefined(value):
57 """Like :func:`defined` but the other way round."""
58 return isinstance(value, Undefined)
59
60
61 def test_none(value):
62 """Return true if the variable is none."""
63 return value is None
64
65
66 def test_lower(value):
67 """Return true if the variable is lowercased."""
68 return text_type(value).islower()
69
70
71 def test_upper(value):
72 """Return true if the variable is uppercased."""
73 return text_type(value).isupper()
74
75
76 def test_string(value):
77 """Return true if the object is a string."""
78 return isinstance(value, string_types)
79
80
81 def test_mapping(value):
82 """Return true if the object is a mapping (dict etc.).
83
84 .. versionadded:: 2.6
85 """
86 return isinstance(value, Mapping)
87
88
89 def test_number(value):
90 """Return true if the variable is a number."""
91 return isinstance(value, integer_types + (float, complex, decimal.Decimal))
92
93
94 def test_sequence(value):
95 """Return true if the variable is a sequence. Sequences are variables
96 that are iterable.
97 """
98 try:
99 len(value)
100 value.__getitem__
101 except:
102 return False
103 return True
104
105
106 def test_equalto(value, other):
107 """Check if an object has the same value as another object:
108
109 .. sourcecode:: jinja
110
111 {% if foo.expression is equalto 42 %}
112 the foo attribute evaluates to the constant 42
113 {% endif %}
114
115 This appears to be a useless test as it does exactly the same as the
116 ``==`` operator, but it can be useful when used together with the
117 `selectattr` function:
118
119 .. sourcecode:: jinja
120
121 {{ users|selectattr("email", "equalto", "foo@bar.invalid") }}
122
123 .. versionadded:: 2.8
124 """
125 return value == other
126
127
128 def test_sameas(value, other):
129 """Check if an object points to the same memory address than another
130 object:
131
132 .. sourcecode:: jinja
133
134 {% if foo.attribute is sameas false %}
135 the foo attribute really is the `False` singleton
136 {% endif %}
137 """
138 return value is other
139
140
141 def test_iterable(value):
142 """Check if it's possible to iterate over an object."""
143 try:
144 iter(value)
145 except TypeError:
146 return False
147 return True
148
149
150 def test_escaped(value):
151 """Check if the value is escaped."""
152 return hasattr(value, '__html__')
153
154
155 TESTS = {
156 'odd': test_odd,
157 'even': test_even,
158 'divisibleby': test_divisibleby,
159 'defined': test_defined,
160 'undefined': test_undefined,
161 'none': test_none,
162 'lower': test_lower,
163 'upper': test_upper,
164 'string': test_string,
165 'mapping': test_mapping,
166 'number': test_number,
167 'sequence': test_sequence,
168 'iterable': test_iterable,
169 'callable': test_callable,
170 'sameas': test_sameas,
171 'equalto': test_equalto,
172 'escaped': test_escaped
173 }