509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
sÝ¨\Æ  ã               @   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mZm	Z	 ddl
mZ ddlmZmZ dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdd„ Zd.dd„Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ ZG d(d)„ d)eƒZG d*d+„ d+e ƒZ!d/d,d-„Z"dS )0zú
    jinja2.asyncsupport
    ~~~~~~~~~~~~~~~~~~~

    Has all the code for async support which is implemented as a patch
    for supported Python versions.

    :copyright: (c) 2017 by the Jinja Team.
    :license: BSD, see LICENSE for more details.
é    N)Úupdate_wrapper)ÚconcatÚinternalcodeÚMarkup)ÚTemplateModule)ÚLoopContextBaseÚ_last_iterationc             ƒ   s&   g ‰‡ ‡fdd„}|ƒ I d H  t ˆƒS )Nc              “   s>   x8ˆ 2 d H y3 d H } W n
 t k
s.X ˆj| ƒ q
   Y  W d S )N)ÚStopAsyncIterationÚappend)Úevent)Ú	async_genÚrv© ú"/usr/lib/python3.6/asyncsupport.pyÚcollect   s    "zconcat_async.<locals>.collect)r   )r   r   r   )r   r   r   Úconcat_async   s    r   c             O  s†   t ||Ž}yFx@| j| j|ƒƒ2 d H y3 d H }W n
 tk
sBX |V  q"   Y  W W n tk
rl   tjƒ }Y nX d S | jj|dƒV  d S )NT)	ÚdictÚroot_render_funcÚnew_contextr	   Ú	ExceptionÚsysÚexc_infoÚenvironmentÚhandle_exception)ÚselfÚargsÚkwargsÚvarsr   r   r   r   r   Úgenerate_async   s    
.r   c                s    dd„ ‰ ‡ ‡fdd„}t |ˆƒS )Nc             s   s@   | j ||Ž}yx|j|jƒ ƒV  qW W n tk
r:   Y nX d S )N)r   Úrun_until_completeÚ	__anext__r	   )r   Úloopr   r   r   r   r   r   Ú_convert_generator,   s    z.wrap_generate_func.<locals>._convert_generatorc                s*   | j jsˆ| f|ž|ŽS ˆ | tjƒ ||ƒS )N)r   Úis_asyncÚasyncioÚget_event_loop)r   r   r   )r"   Úoriginal_generater   r   Úgenerate3   s    z$wrap_generate_func.<locals>.generate)r   )r&   r'   r   )r"   r&   r   Úwrap_generate_func+   s    r(   c             Ï   sd   | j jstdƒ‚t||Ž}| j|ƒ}yt| j|ƒƒI d H S  tk
rT   tj	ƒ }Y nX | j j
|dƒS )Nz8The environment was not created with async mode enabled.T)r   r#   ÚRuntimeErrorr   r   r   r   r   r   r   r   )r   r   r   r   Úctxr   r   r   r   Úrender_async:   s    

r+   c                s   ‡ fdd„}t |ˆ ƒS )Nc                s2   | j jsˆ | f|ž|ŽS tjƒ }|j| j||ŽƒS )N)r   r#   r$   r%   r   r+   )r   r   r   r!   )Úoriginal_renderr   r   ÚrenderJ   s    z wrap_render_func.<locals>.render)r   )r,   r-   r   )r,   r   Úwrap_render_funcI   s    r.   c                s(   t dd„ ƒ‰ t ‡ ‡fdd„ƒ}t|ˆƒS )Nc             Ó   s2   t | j| j | jƒƒI d H }| jjjr.t|ƒ}|S )N)r   Z_stackZ_depthÚ_contextZeval_ctxÚ
autoescaper   )r   r   r   r   r   Ú
async_callS   s    
z-wrap_block_reference_call.<locals>.async_callc                s   | j jjsˆ| ƒS ˆ | ƒS )N)r/   r   r#   )r   )r1   Úoriginal_callr   r   Ú__call__Z   s    
z+wrap_block_reference_call.<locals>.__call__)r   r   )r2   r3   r   )r1   r2   r   Úwrap_block_reference_callR   s    r4   c                s(   t dd„ ƒ‰ t ‡ ‡fdd„ƒ}t|ˆƒS )Nc             Ó   s    | j |Ž I d H }|rt|ƒ}|S )N)Z_funcr   )r   Ú	argumentsr0   r   r   r   r   Úasync_invoked   s    z'wrap_macro_invoke.<locals>.async_invokec                s    | j jsˆ| ||ƒS ˆ | ||ƒS )N)Z_environmentr#   )r   r5   r0   )r6   Úoriginal_invoker   r   Ú_invokek   s    z"wrap_macro_invoke.<locals>._invoke)r   r   )r7   r8   r   )r6   r7   r   Úwrap_macro_invokec   s    r9   c             Ã   s(   | j d k	r| j S | jƒ I d H  | _ }|S )N)Ú_moduleÚmake_module_async)r   r   r   r   r   Úget_default_module_asyncs   s    
r<   c                s   t ‡ fdd„ƒ}|S )Nc                s   | j jrtdƒ‚ˆ | ƒS )Nz6Template module attribute is unavailable in async mode)r   r#   r)   )r   )Úoriginal_default_moduler   r   Ú_get_default_module|   s    z0wrap_default_module.<locals>._get_default_module)r   )r=   r>   r   )r=   r   Úwrap_default_module{   s    r?   Fc             Ã   s^   | j |||ƒ}g }x>| j|ƒ2 d H y3 d H }W n
 tk
sFX |j|ƒ q"   Y  W t| ||ƒS )N)r   r   r	   r
   r   )r   r   ZsharedÚlocalsÚcontextZbody_streamÚitemr   r   r   r;   …   s
    (r;   c              C   sd   ddl m}  t| jƒ| _tt| jƒ| _tt| jƒ| _t| jƒ| _t	| j
ƒ| _
t| _tt| jƒ| _d S )Nr   )ÚTemplate)Zjinja2rC   r(   r'   r   r   r+   r.   r-   r?   r>   r<   Z_get_default_module_asyncr;   )rC   r   r   r   Úpatch_template�   s    
rD   c              C   s,   ddl m} m} t| jƒ| _t|jƒ|_d S )Nr   )ÚBlockReferenceÚMacro)Újinja2.runtimerE   rF   r4   r3   r9   r8   )rE   rF   r   r   r   Úpatch_runtimeœ   s    
rH   c              C   s&   ddl m}  ddlm} | j|ƒ d S )Nr   )ÚFILTERS)ÚASYNC_FILTERS)Zjinja2.filtersrI   Zjinja2.asyncfiltersrJ   Úupdate)rI   rJ   r   r   r   Úpatch_filters£   s    rL   c               C   s   t ƒ  tƒ  tƒ  d S )N)rD   rH   rL   r   r   r   r   Ú	patch_all©   s    rM   c             Ã   s   t j| ƒr| I d H S | S )N)ÚinspectZisawaitable)Úvaluer   r   r   Ú
auto_await¯   s    

rP   c             C  s\   t | dƒrDx4| 2 d H y3 d H }W n
 tk
s4X |V  q   Y  W d S x| D ]
}|V  qJW d S )NÚ	__aiter__)Úhasattrr	   )ÚiterablerB   r   r   r   Ú
auto_aiterµ   s    
"
rT   c               @   s*   e Zd Zd	dd„Zedd„ ƒZdd„ ZdS )
ÚAsyncLoopContextNr   c             C   s&   t j| |||ƒ || _|| _|| _d S )N)r   Ú__init__Ú_async_iteratorÚ_afterÚ_length)r   Úasync_iteratorÚ	undefinedÚafterÚlengthÚrecurseÚdepth0r   r   r   rV   À   s    zAsyncLoopContext.__init__c             C   s   | j d krtdƒ‚| j S )NzHLoop length for some iterators cannot be lazily calculated in async mode)rY   Ú	TypeError)r   r   r   r   r]   Ç   s    
zAsyncLoopContext.lengthc             C   s   t | ƒS )N)ÚAsyncLoopContextIterator)r   r   r   r   rQ   Î   s    zAsyncLoopContext.__aiter__)Nr   )Ú__name__Ú
__module__Ú__qualname__rV   Úpropertyr]   rQ   r   r   r   r   rU   ¾   s    
rU   c               @   s(   e Zd Zd	Zdd„ Zdd„ Zdd„ ZdS )
ra   rA   c             C   s
   || _ d S )N)rA   )r   rA   r   r   r   rV   Õ   s    z!AsyncLoopContextIterator.__init__c             C   s   | S )Nr   )r   r   r   r   rQ   Ø   s    z"AsyncLoopContextIterator.__aiter__c             Ã   sp   | j }| jd7  _|jtkr$tƒ ‚|j|_|j|_y|jjƒ I d H |_W n tk
rd   t|_Y nX |j|fS )Né   )	rA   Zindex0rX   r   r	   Z_currentZ_beforerW   r    )r   r*   r   r   r   r    Û   s    
z"AsyncLoopContextIterator.__anext__N)rA   )rb   rc   rd   Ú	__slots__rV   rQ   r    r   r   r   r   ra   Ò   s   ra   c             Ã   sŒ   yt | ƒ}W n8 ttfk
rD   t| dƒs<t| ƒ} t | ƒ}nd }Y nX t| ƒ}y|jƒ I d H }W n tk
rx   t}Y nX t	||||||ƒS )NrQ   )
Úlenr`   ÚAttributeErrorrR   ÚtuplerT   r    r	   r   rU   )rS   r[   r^   r_   r]   rZ   r\   r   r   r   Úmake_async_loop_contexté   s    	



rk   )NFN)Nr   )#Ú__doc__r   r$   rN   Ú	functoolsr   Zjinja2.utilsr   r   r   Zjinja2.environmentr   rG   r   r   r   r   r(   r+   r.   r4   r9   r<   r?   r;   rD   rH   rL   rM   rP   rT   rU   Úobjectra   rk   r   r   r   r   Ú<module>   s4   		

	