o
    eY                     @  s   d 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 d	dlmZ d	dlmZ d	dlmZ e	eedee df  edeef f ZdddZdS )z
Call loop machinery
    )annotations)cast)	Generator)Mapping)Sequence)Tuple)Union   )HookImpl)_raise_wrapfail)HookCallError)ResultN	hook_namestr
hook_implsSequence[HookImpl]caller_kwargsMapping[str, object]firstresultboolreturnobject | list[object]c                   s  d}g }d}d}zg }zt |D ]}	z fdd|	jD }
W n ty9   |	jD ]}| vr6td|q)Y nw |	jrkd}z|	j|
 }ttdtt	 df |}t
| ||f W q tyj   t|d Y qw |	jrz|	j|
 }ttdt	t	f |}t
| || W q ty   t|d Y qw |	j|
 }|dur|| |r nqW n ty } z|}W Y d}~nd}~ww W |r,|r|r|d nd}n|}t |D ]I}z|dur|| n|| |  W n, ty } z|j}d}W Y d}~qd}~w ty } z|}W Y d}~qd}~ww t|d	 q|dur*||j|S |r<t|r7|d nd|}nt||}t |D ]w}t|trjz|d | t|d d	 W qE tyi   Y qEw z|jdurx||j n||j |  W n2 ty } z||j W Y d}~qEd}~w ty } z|| W Y d}~qEd}~ww t|d	 qE| S |r8|r|r|d nd}n|}t |D ]M}z|dur|| n|| |  W n. ty } z|j}d}W Y d}~qd}~w ty } z	|}W Y d}~qd}~ww t|d	 q|dur0||j|     Y S |rHt|rC|d nd|}nt||}t |D ]w}t|trvz|d | t|d d	 W qQ tyu   Y qQw z|jdur||j n||j |  W n2 ty } z||j W Y d}~qQd}~w ty } z|| W Y d}~qQd}~ww t|d	 qQ|      Y S )
zExecute a call into multiple python functions/methods and return the
    result(s).

    ``caller_kwargs`` comes from HookCaller.__call__().
    TNc                   s   g | ]} | qS  r   ).0argnamer   r   ?D:\Projects\ConvertPro\env\Lib\site-packages\pluggy/_callers.py
<listcomp>/   s    z_multicall.<locals>.<listcomp>z hook call must provide argument Fzdid not yieldr   zhas second yield)reversedargnamesKeyErrorr   Zhookwrapperfunctionr   r   r   objectnextappendStopIterationr   wrapperBaseExceptionthrowsendclosevaluewith_traceback__traceback__
isinstancetuple
_exception_resultZforce_resultZforce_exceptionZ
get_result)r   r   r   r   Z__tracebackhide__results	exceptionZonly_new_style_wrappersZ	teardownsZ	hook_implargsr   resZwrapper_genZfunction_genexcresultZteardownsieoutcomer   r   r   
_multicall   s6  













r;   )
r   r   r   r   r   r   r   r   r   r   )__doc__
__future__r   typingr   r   r   r   r   r   Z_hooksr
   r1   r   r   r   r"   ZTeardownr;   r   r   r   r   <module>   s$    