U
    @Þ«^¿  ã                &   @   sˆ  d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 e d	¡ZeeƒZeZd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Z d*d+„ Z!d,d-„ Z"d.d/„ Z#d0d1„ Z$d2d3„ Z%eeeeeeeeeeeeeeee e!e#ee"e$e%ej&ej&ej&ej'ej'ej(ej(ej(ej)ej)ej*ej*ej*ej+ej+d4œ%Z,dS )5z6Built-in template tests used with the ``is`` operator.é    Né   )Úabc)Úinteger_types)Ústring_types)Ú	text_type)Ú	Undefinedz^-?\d+(\.\d+)?$c                 C   s   | d dkS )z#Return true if the variable is odd.é   r   © ©Úvaluer	   r	   ú0/tmp/pip-unpacked-wheel-o736f1kv/jinja2/tests.pyÚtest_odd   s    r   c                 C   s   | d dkS )z$Return true if the variable is even.r   r   r	   r
   r	   r	   r   Ú	test_even   s    r   c                 C   s   | | dkS )z-Check if a variable is divisible by a number.r   r	   )r   Únumr	   r	   r   Útest_divisibleby   s    r   c                 C   s   t | tƒ S )a;  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.
    ©Ú
isinstancer   r
   r	   r	   r   Útest_defined!   s    r   c                 C   s
   t | tƒS )z-Like :func:`defined` but the other way round.r   r
   r	   r	   r   Útest_undefined2   s    r   c                 C   s   | dkS )z$Return true if the variable is none.Nr	   r
   r	   r	   r   Ú	test_none7   s    r   c                 C   s   | dkp| dkS )zNReturn true if the object is a boolean value.

    .. versionadded:: 2.11
    TFr	   r
   r	   r	   r   Útest_boolean<   s    r   c                 C   s   | dkS )zDReturn true if the object is False.

    .. versionadded:: 2.11
    Fr	   r
   r	   r	   r   Ú
test_falseD   s    r   c                 C   s   | dkS )zCReturn true if the object is True.

    .. versionadded:: 2.11
    Tr	   r
   r	   r	   r   Ú	test_trueL   s    r   c                 C   s   t | tƒo| dk	o| dk	S )zIReturn true if the object is an integer.

    .. versionadded:: 2.11
    TF)r   r   r
   r	   r	   r   Útest_integerU   s    r   c                 C   s
   t | tƒS )zFReturn true if the object is a float.

    .. versionadded:: 2.11
    )r   Úfloatr
   r	   r	   r   Ú
test_float^   s    r   c                 C   s   t | ƒ ¡ S )z*Return true if the variable is lowercased.)r   Úislowerr
   r	   r	   r   Ú
test_lowerf   s    r   c                 C   s   t | ƒ ¡ S )z*Return true if the variable is uppercased.)r   Úisupperr
   r	   r	   r   Ú
test_upperk   s    r   c                 C   s
   t | tƒS )z&Return true if the object is a string.)r   r   r
   r	   r	   r   Útest_stringp   s    r    c                 C   s   t | tjƒS )zSReturn true if the object is a mapping (dict etc.).

    .. versionadded:: 2.6
    )r   r   ÚMappingr
   r	   r	   r   Útest_mappingu   s    r"   c                 C   s   t | ttttjf ƒS )z(Return true if the variable is a number.)r   r   r   ÚcomplexÚdecimalÚDecimalr
   r	   r	   r   Útest_number}   s    r&   c                 C   s.   zt | ƒ | j W n tk
r(   Y dS X dS )z^Return true if the variable is a sequence. Sequences are variables
    that are iterable.
    FT)ÚlenÚ__getitem__Ú	Exceptionr
   r	   r	   r   Útest_sequence‚   s    
r*   c                 C   s   | |kS )zï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 %}
    r	   )r   Úotherr	   r	   r   Útest_sameasŽ   s    
r,   c                 C   s(   zt | ƒ W n tk
r"   Y dS X dS )z1Check if it's possible to iterate over an object.FT)ÚiterÚ	TypeErrorr
   r	   r	   r   Útest_iterable›   s
    r/   c                 C   s
   t | dƒS )zCheck if the value is escaped.Z__html__)Úhasattrr
   r	   r	   r   Útest_escaped¤   s    r1   c                 C   s   | |kS )z:Check if value is in seq.

    .. versionadded:: 2.10
    r	   )r   Úseqr	   r	   r   Útest_in©   s    r3   )%ZoddZevenZdivisiblebyZdefinedZ	undefinedÚnoneÚbooleanÚfalseÚtrueÚintegerr   ÚlowerÚupperÚstringÚmappingÚnumberÚsequenceÚiterableÚcallableZsameasÚescapedÚinz==ÚeqZequaltoz!=Úneú>ÚgtZgreaterthanÚgez>=ú<ÚltZlessthanz<=Úle)-Ú__doc__r$   ÚoperatorÚreÚ_compatr   r   r   r   Zruntimer   ÚcompileZ	number_reÚtypeZ
regex_typer@   Ztest_callabler   r   r   r   r   r   r   r   r   r   r   r   r   r    r"   r&   r*   r,   r/   r1   r3   rC   rD   rF   rG   rI   rJ   ZTESTSr	   r	   r	   r   Ú<module>   sŒ   
				Û