1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# -*- coding: utf-8 -*- 2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez""" 3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez jinja2.tests 4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez ~~~~~~~~~~~~ 5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Jinja test functions. Used with the "is" operator. 7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez :copyright: (c) 2010 by the Jinja Team. 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez :license: BSD, see LICENSE for more details. 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez""" 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport re 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom jinja2.runtime import Undefined 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom jinja2._compat import text_type, string_types, mapping_types 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveznumber_re = re.compile(r'^-?\d+(\.\d+)?$') 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezregex_type = type(number_re) 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chaveztest_callable = callable 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_odd(value): 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the variable is odd.""" 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value % 2 == 1 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_even(value): 29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the variable is even.""" 30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value % 2 == 0 31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_divisibleby(value, num): 34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Check if a variable is divisible by a number.""" 35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value % num == 0 36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_defined(value): 39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the variable is defined: 40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez .. sourcecode:: jinja 42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez {% if variable is defined %} 44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez value of variable: {{ variable }} 45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez {% else %} 46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez variable is not defined 47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez {% endif %} 48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez See the :func:`default` filter for a simple way to set undefined 50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez variables. 51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """ 52645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return not isinstance(value, Undefined) 53645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 54645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 55645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_undefined(value): 56645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Like :func:`defined` but the other way round.""" 57645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return isinstance(value, Undefined) 58645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 59645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 60645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_none(value): 61645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the variable is none.""" 62645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value is None 63645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 64645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 65645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_lower(value): 66645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the variable is lowercased.""" 67645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return text_type(value).islower() 68645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 69645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 70645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_upper(value): 71645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the variable is uppercased.""" 72645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return text_type(value).isupper() 73645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 74645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 75645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_string(value): 76645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the object is a string.""" 77645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return isinstance(value, string_types) 78645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 79645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 80645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_mapping(value): 81645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the object is a mapping (dict etc.). 82645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 83645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez .. versionadded:: 2.6 84645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """ 85645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return isinstance(value, mapping_types) 86645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 87645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 88645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_number(value): 89645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the variable is a number.""" 90645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return isinstance(value, (int, float, complex)) 91645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 92645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 93645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_sequence(value): 94645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Return true if the variable is a sequence. Sequences are variables 95645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez that are iterable. 96645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """ 97645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez try: 98645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez len(value) 99645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez value.__getitem__ 100645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez except: 101645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return False 102645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return True 103645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 104645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 105645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_sameas(value, other): 106645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Check if an object points to the same memory address than another 107645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez object: 108645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 109645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez .. sourcecode:: jinja 110645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 111645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez {% if foo.attribute is sameas false %} 112645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez the foo attribute really is the `False` singleton 113645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez {% endif %} 114645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """ 115645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return value is other 116645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 117645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 118645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_iterable(value): 119645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Check if it's possible to iterate over an object.""" 120645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez try: 121645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez iter(value) 122645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez except TypeError: 123645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return False 124645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return True 125645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 126645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 127645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef test_escaped(value): 128645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Check if the value is escaped.""" 129645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return hasattr(value, '__html__') 130645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 131645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 132645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector ChavezTESTS = { 133645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'odd': test_odd, 134645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'even': test_even, 135645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'divisibleby': test_divisibleby, 136645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'defined': test_defined, 137645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'undefined': test_undefined, 138645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'none': test_none, 139645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'lower': test_lower, 140645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'upper': test_upper, 141645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'string': test_string, 142645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'mapping': test_mapping, 143645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'number': test_number, 144645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'sequence': test_sequence, 145645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'iterable': test_iterable, 146645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'callable': test_callable, 147645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'sameas': test_sameas, 148645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 'escaped': test_escaped 149645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez} 150