o
    'a                     @   s  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	 ddlm
Z
 dd	lmZ dd
lmZ ejrCddlmZ ddlmZ dejeejf fddZG dd deZG dd deZdededddefddZdejeeje f dejdefddZdedejdefddZdS )     N)
BaseLoader)Environment)Template)TemplateNotFound   )_app_ctx_stack)_request_ctx_stack)before_render_template)template_rendered)Flask)Scaffoldreturnc                  C   sB   t j} tj}i }|dur|j|d< | dur| j|d< | j|d< |S )zSDefault template context processor.  Injects `request`,
    `session` and `g`.
    Ngrequestsession)r   topr   r   r   r   )ZreqctxZappctxrv r   ^/home/rieder/labs.polsys.net/tools/diffstream/lib/python3.10/site-packages/flask/templating.py_default_template_ctx_processor   s   


r   c                   @   s(   e Zd ZdZdddejddfddZdS )	r   zWorks like a regular Jinja2 environment but has some additional
    knowledge of how Flask's blueprint works so that it can prepend the
    name of the blueprint to referenced templates if necessary.
    appr   optionsr   Nc                 K   s0   d|vr
|  |d< tj| fi | || _d S )Nloader)Zcreate_global_jinja_loaderBaseEnvironment__init__r   )selfr   r   r   r   r   r   '   s   
zEnvironment.__init__)__name__
__module____qualname____doc__tAnyr   r   r   r   r   r   !   s    r   c                
   @   s   e Zd ZdZdddZded	edejeej	e ej	ej
 f fd
dZded	edejeej	e ej	ej
 f fddZded	edejeej	e ej	ej
 f fddZd	edejejdef ddf fddZdeje fddZdS )DispatchingJinjaLoaderz\A loader that looks for templates in the application and all
    the blueprint folders.
    r   r   r   Nc                 C   s
   || _ d S N)r   )r   r   r   r   r   r   3   s   
zDispatchingJinjaLoader.__init__environmenttemplatec                 C   s$   | j jd r| ||S | ||S )NZEXPLAIN_TEMPLATE_LOADING)r   config_get_source_explained_get_source_fast)r   r$   r%   r   r   r   
get_source6   s   z!DispatchingJinjaLoader.get_sourcec           	   	   C   s   g }d }|  |D ]&\}}z|||}|d u r|}W n ty&   d }Y nw ||||f q	ddlm} || j|| |d urC|S t|)Nr   )!explain_template_loading_attempts)_iter_loadersr)   r   appendZdebughelpersr*   r   )	r   r$   r%   ZattemptsZtrvsrcobjr   r   r*   r   r   r   r'   =   s$   z,DispatchingJinjaLoader._get_source_explainedc              	   C   s@   |  |D ]\}}z	|||W   S  ty   Y qw t|r#   )r+   r)   r   )r   r$   r%   Z_srcobjr   r   r   r   r(   W   s   z'DispatchingJinjaLoader._get_source_fastr   c                 c   sJ    | j j}|d ur| j |fV  | j  D ]}|j}|d ur"||fV  qd S r#   )r   jinja_loaderiter_blueprints)r   r%   r   	blueprintr   r   r   r+   a   s   
z$DispatchingJinjaLoader._iter_loadersc                 C   sb   t  }| jj}|d ur||  | j D ]}|j}|d ur,| D ]}|| q$qt|S r#   )setr   r.   updatelist_templatesr/   addlist)r   resultr   r0   r%   r   r   r   r3   m   s   z%DispatchingJinjaLoader.list_templates)r   r   r   N)r   r   r   r   r   r   strr    TupleOptionalCallabler)   r'   r(   	Generatorr   r+   Listr3   r   r   r   r   r"   .   s<    





r"   r%   contextr   r   c                 C   s.   t j|| |d | |}tj|| |d |S )z)Renders the template and fires the signal)r%   r=   )r	   sendrenderr
   )r%   r=   r   r   r   r   r   _render|   s   
r@   template_name_or_listc                 K   *   t j}|j| t|jj| ||jS )a  Renders a template from the template folder with the given
    context.

    :param template_name_or_list: the name of the template to be
                                  rendered, or an iterable with template names
                                  the first one existing will be rendered
    :param context: the variables that should be available in the
                    context of the template.
    )r   r   r   update_template_contextr@   	jinja_envZget_or_select_template)rA   r=   ctxr   r   r   render_template   s   rF   sourcec                 K   rB   )aF  Renders a template from the given template source string
    with the given context. Template variables will be autoescaped.

    :param source: the source code of the template to be
                   rendered
    :param context: the variables that should be available in the
                    context of the template.
    )r   r   r   rC   r@   rD   Zfrom_string)rG   r=   rE   r   r   r   render_template_string   s   	rH   )typingr    Zjinja2r   r   r   r   r   globalsr   r   Zsignalsr	   r
   TYPE_CHECKINGr   r   Zscaffoldr   Dictr7   r!   r   r"   dictr@   Unionr<   rF   rH   r   r   r   r   <module>   s0    N	
