o
    Ye                     @  s   d Z ddlm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 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f edeef f Zd)ddZd*ddZd+d'd(ZdS ),z
Call loop machinery
    )annotationsN)cast)	Generator)Mapping)NoReturn)Sequence)Tuple)Union   )HookImpl)HookCallError)Result)PluggyTeardownRaisedWarningwrap_controllerGGenerator[None, Result[object], None] | Generator[None, object, object]msgstrreturnr   c                 C  s    | j }td|j|j|j|f )Nzwrap_controller at %r %s:%d %s)gi_codeRuntimeErrorco_nameco_filenameco_firstlineno)r   r   co r   3usr/lib/python3.10/site-packages/pluggy/_callers.py_raise_wrapfail   s   r   	hook_name	hook_implr   eBaseExceptionNonec                 C  sT   d}|d|j  d|  d7 }|t|j d| d7 }|d7 }tjt|dd d S )	NzGA plugin raised an exception during an old-style hookwrapper teardown.
zPlugin: z, Hook: 
z: zvFor more information see https://pluggy.readthedocs.io/en/stable/api_reference.html#pluggy.PluggyTeardownRaisedWarning   )
stacklevel)Zplugin_nametype__name__warningswarnr   )r   r   r   r   r   r   r   _warn_teardown_exception*   s
   r)   
hook_implsSequence[HookImpl]caller_kwargsMapping[str, object]firstresultbool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rld}z|	j|
 }ttdtt	 df |}t
| |||	f W q tyk   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|r8|d nd|}nt||}t |D ]}t|trz	|d | W n  tyb   Y qF tyw } z	t| |d
 |  d}~ww t|d d	 qFz|jdur||j n||j |  W n2 ty } z||j W Y d}~qFd}~w ty } z|| W Y d}~qFd}~ww t|d	 qF| S |rO|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y4 } z	|}W Y d}~qd}~ww t|d	 q|durG||j|     Y S |r_t|rZ|d nd|}nt||}t |D ]}t|trz	|d | W n  ty   Y qh ty } z	t| |d
 |  d}~ww t|d d	 qhz|jdur||j n||j |  W n2 ty } z||j W Y d}~qhd}~w ty } z|| W Y d}~qhd}~ww t|d	 qh|      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   r   ).0argnamer,   r   r   
<listcomp>H   s    z_multicall.<locals>.<listcomp>z hook call must provide argument Fzdid not yieldr   zhas second yieldr
   )reversedargnamesKeyErrorr   Zhookwrapperfunctionr   r   r   objectnextappendStopIterationr   wrapperr    throwsendclosevaluewith_traceback__traceback__
isinstancetupler)   Z
_exception_resultZforce_resultZforce_exceptionZ
get_result)r   r*   r,   r.   Z__tracebackhide__results	exceptionZonly_new_style_wrappersZ	teardownsr   argsr2   resZwrapper_genZfunction_genexcresultZteardownsir   Zoutcomer   r3   r   
_multicall4   sF  













rN   )r   r   r   r   r   r   )r   r   r   r   r   r    r   r!   )
r   r   r*   r+   r,   r-   r.   r/   r   r0   )__doc__
__future__r   r'   typingr   r   r   r   r   r   r	   Z_hooksr   rF   r   r   	_warningsr   r9   ZTeardownr   r)   rN   r   r   r   r   <module>   s,    


