U
    Á½„b¨	  ã                	   @   s´   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 	d¡Z
dd	„ Zeeeeeeeedƒh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)ÚWRAPPER_ASSIGNMENTS)Úwrapsé   )Ú_PassArg)Úpass_eval_contextÚVc                    s   ‡ fdd„}|S )Nc                    sš   t  ˆ¡}|d k‰|t jkr0tjtdœdd„‰ntjtdœdd„‰d}tttƒ 	|¡ƒ}t
ˆ|d�t
ˆ |dd�‡ ‡‡‡fd	d
„ƒƒ}ˆr�t|ƒ}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-p3mw61s5/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    )Ú
__module__Ú__name__Ú__qualname__)Úassignedr   )r   Úupdatedc                     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   ÚtupleÚsetr   Ú
differencer   r   Zjinja_async_variant)r   Zpass_argZasync_func_attrsZnormal_func_attrsr   ©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 | ƒtkrt d| ¡S t | ¡r4t d| ¡I d H S t d| ¡S )Nr   zt.Awaitable[V])ÚtypeÚ_common_primitivesr   r   ÚinspectÚisawaitable©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_aiterF   s
    
r0   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>T   s     z auto_to_list.<locals>.<listcomp>)r0   r*   r   r   r   Úauto_to_listQ   s    r4   )r(   Útypingr   Ú	functoolsr   r   Úutilsr   r   ÚTypeVarr   r$   ÚintÚfloatr   ÚstrÚlistÚdictr   r&   r'   ÚUnionÚ	Awaitabler+   r0   ÚListr4   r   r   r   r   Ú<module>   s   
, þþ