U
    Ha                     @   s   d dl Z d dlZd dlmZ ddlmZ ddlmZ edZ	dd Z
ejejd df dd	d
dZdddddZdejd d	ddZdS )    N)wraps   )_PassArg)pass_eval_contextVc                    s    fdd}|S )Nc                    sr   t }|d k|t jkr0tjtdddntjtdddt fdd}rht|}d|_|S )N)argsreturnc                 S   s   t t| d jS Nr   )tcastboolis_asyncr    r   6/tmp/pip-unpacked-wheel-7mx3_2sv/jinja2/async_utils.pyr      s    z2async_variant.<locals>.decorator.<locals>.is_asyncc                 S   s   t t| d jjS r	   )r
   r   r   environmentr   r   r   r   r   r      s    c                     s0   | }r| dd  } |r& | |S | |S )Nr   r   )r   kwargsb)
async_funcr   need_eval_contextnormal_funcr   r   wrapper   s    
z1async_variant.<locals>.decorator.<locals>.wrapperT)	r   Zfrom_objr   r
   Anyr   r   r   Zjinja_async_variant)r   Zpass_argr   r   )r   r   r   r   	decorator   s    

z async_variant.<locals>.decoratorr   )r   r   r   r   r   async_variant   s     r   )valuer   c                    s(   t | rtd| I d H S td| S )Nzt.Awaitable[V]r   )inspectisawaitabler
   r   r   r   r   r   
auto_await/   s    
r    z*t.Union[t.AsyncIterable[V], t.Iterable[V]]zt.AsyncIterator[V])iterabler   c                 C  sJ   t | dr.td| 2 z3 d H W }|V  q6 ntd| D ]
}|V  q:d S )N	__aiter__zt.AsyncIterable[V]zt.Iterable[V])hasattrr
   r   )r!   itemr   r   r   
auto_aiter6   s
    
r%   c                    s   dd t | 2 I d H S )Nc                    s   g | z3 d H W }|q6 S )Nr   ).0xr   r   r   
<listcomp>D   s     z auto_to_list.<locals>.<listcomp>)r%   r   r   r   r   auto_to_listA   s    r)   )r   typingr
   	functoolsr   utilsr   r   TypeVarr   r   Union	Awaitabler    r%   Listr)   r   r   r   r   <module>   s   
$ 