3
¥Yði  ã            (   @   sr  d 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 ejrVddlmZ eed	œd
d„Zeed	œdd„Zeeedœdd„Zejed	œdd„Zejed	œdd„Zedeedœdd„ƒZedeedœdd„ƒZejed	œdd„Zejed	œdd„Zejed	œdd „Zejed	œd!d"„Zejed	œd#d$„Zejed	œd%d&„Zeed	œd'd(„Z eed	œd)d*„Z!ejed	œd+d,„Z"ejed	œd-d.„Z#ejed	œd/d0„Z$ejed	œd1d2„Z%ejejed3œd4d5„Z&ejed	œd6d7„Z'ejed	œd8d9„Z(ejej)ed:œd;d<„Z*ee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j0ej0ej0ej1ej1d=œ'Z2dS )>z6Built-in template tests used with the ``is`` operator.é    N)Úabc)ÚNumberé   )Ú	Undefined)Úpass_environment)ÚEnvironment)ÚvalueÚreturnc             C   s   | d dkS )z#Return true if the variable is odd.é   r   © )r   r   r   ú./tmp/pip-build-8om4l6ph/Jinja2/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   )r   Únumr	   c             C   s   | | dkS )z-Check if a variable is divisible by a number.r   r   )r   r   r   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   r   Útest_undefined.   s    r   r   )Úenvr   r	   c             C   s
   || j kS )a  Check if a filter exists by name. Useful if a filter may be
    optionally available.

    .. code-block:: jinja

        {% if 'markdown' is filter %}
            {{ value | markdown }}
        {% else %}
            {{ value }}
        {% endif %}

    .. versionadded:: 3.0
    )Úfilters)r   r   r   r   r   Útest_filter3   s    r   c             C   s
   || j kS )a‚  Check if a test exists by name. Useful if a test may be
    optionally available.

    .. code-block:: jinja

        {% if 'loud' is test %}
            {% if value is loud %}
                {{ value|upper }}
            {% else %}
                {{ value|lower }}
            {% endif %}
        {% else %}
            {{ value }}
        {% endif %}

    .. versionadded:: 3.0
    )Útests)r   r   r   r   r   Ú	test_testE   s    r   c             C   s   | dkS )z$Return true if the variable is none.Nr   )r   r   r   r   Ú	test_none[   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_falseh   s    r   c             C   s   | dkS )zCReturn true if the object is True.

    .. versionadded:: 2.11
    Tr   )r   r   r   r   Ú	test_truep   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   Úint)r   r   r   r   Útest_integery   s    r   c             C   s
   t | tƒS )zFReturn true if the object is a float.

    .. versionadded:: 2.11
    )r   Úfloat)r   r   r   r   Ú
test_float‚   s    r    c             C   s   t | ƒjƒ S )z*Return true if the variable is lowercased.)ÚstrÚislower)r   r   r   r   Ú
test_lowerŠ   s    r#   c             C   s   t | ƒjƒ S )z*Return true if the variable is uppercased.)r!   Úisupper)r   r   r   r   Ú
test_upper�   s    r%   c             C   s
   t | tƒS )z&Return true if the object is a string.)r   r!   )r   r   r   r   Útest_string”   s    r&   c             C   s   t | tjƒS )zSReturn true if the object is a mapping (dict etc.).

    .. versionadded:: 2.6
    )r   r   ÚMapping)r   r   r   r   Útest_mapping™   s    r(   c             C   s
   t | tƒS )z(Return true if the variable is a number.)r   r   )r   r   r   r   Útest_number¡   s    r)   c             C   s,   yt | ƒ | j W n tk
r&   dS X dS )z^Return true if the variable is a sequence. Sequences are variables
    that are iterable.
    FT)ÚlenÚ__getitem__Ú	Exception)r   r   r   r   Útest_sequence¦   s    
r-   )r   Úotherr	   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   r.   r   r   r   Útest_sameas³   s    
r/   c             C   s&   yt | ƒ W n tk
r    dS X dS )z1Check if it's possible to iterate over an object.FT)ÚiterÚ	TypeError)r   r   r   r   Útest_iterableÀ   s
    r2   c             C   s
   t | dƒS )zCheck if the value is escaped.Z__html__)Úhasattr)r   r   r   r   Útest_escapedÊ   s    r4   )r   Úseqr	   c             C   s   | |kS )z:Check if value is in seq.

    .. versionadded:: 2.10
    r   )r   r5   r   r   r   Útest_inÏ   s    r6   )'ZoddZevenZdivisiblebyZdefinedZ	undefinedÚfilterÚtestÚ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)3Ú__doc__ÚoperatorÚtypingÚtÚcollectionsr   Znumbersr   Zruntimer   Úutilsr   ZTYPE_CHECKINGÚenvironmentr   r   Úboolr   r   r   ZAnyr   r   r!   r   r   r   r   r   r   r   r    r#   r%   r&   r(   r)   r-   r/   r2   r4   Ú	Containerr6   rE   rH   rI   rK   rL   rN   rO   ZTESTSr   r   r   r   Ú<module>   s�   		
	