o
    ]fh                     @   s@   d Z ddlmZ ddlmZ ddlmZ dZG dd deZdS )	a  
    flask_caching.jinja2ext
    ~~~~~~~~~~~~~~~~~~~~~~~

    Jinja2 extension that adds support for caching template fragments.

    Usage::

        {% cache timeout key1[, [key2, ...]] %}
        ...
        {% endcache %}

    By default, the value of "path to template file" + "block start line"
    is used as the cache key. Also, the key name can be set manually.
    Keys are concatenated together into a single string, that can be used
    to avoid the same block evaluating in different templates.

    Set the timeout to ``None`` for no timeout, but with custom keys::

        {% cache None "key" %}
        ...
        {% endcache %}

    Set timeout to ``del`` to delete cached value::

        {% cache 'del' key1 %}
        ...
        {% endcache %}

    Considering we have ``render_form_field`` and ``render_submit`` macros::

        {% cache 60*5 'myform' %}
        <div>
            <form>
            {% render_form_field(form.username) %}
            {% render_submit() %}
            </form>
        </div>
        {% endcache %}

    :copyright: (c) 2010 by Thadeus Burgess.
    :license: BSD, see LICENSE for more details.
    )nodes)	Extension)make_template_fragment_key_template_fragment_cachec                   @   s"   e Zd ZdhZdd Zdd ZdS )CacheExtensioncachec                 C   s   t |jj}| g}|jdr||  n|t|j |  g }|jdr;||  |jds.|rF|t	| n|tg  |j
dgdd}t| d|g g ||S )Ncommazname:endcacheT)drop_needle_cache)nextstreamlinenoparse_expressionskip_ifappendr   ConstfilenameListparse_statements	CallBlockcall_method
set_lineno)selfparserr   argsvary_onbody r   P/home/ubuntu/webapp/venv/lib/python3.10/site-packages/flask_caching/jinja2ext.pyparse8   s$   
zCacheExtension.parsec           	   
   C   s|   zt | jt}W n ty } z|d }~ww t||d}|dkr)|| | S ||}|d u r<| }|||| |S )N)r   del)getattrenvironmentJINJA_CACHE_ATTR_NAMEAttributeErrorr   deletegetset)	r   timeoutfragment_namer   callerr   ekeyrvr   r   r   r
   V   s   

zCacheExtension._cacheN)__name__
__module____qualname__tagsr   r
   r   r   r   r   r   5   s    r   N)	__doc__jinja2r   
jinja2.extr   flask_cachingr   r#   r   r   r   r   r   <module>   s    ,