U
    42i                     @  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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dddZdddddddZdddddd d!d"Zd
S )#z
Call loop machinery
    )annotations)cast)	Generator)Mapping)NoReturn)Sequence)Tuple)UnionN   )HookImpl)HookCallError)Result)PluggyTeardownRaisedWarningzGGenerator[None, Result[object], None] | Generator[None, object, object]strr   )wrap_controllermsgreturnc                 C  s$   | j }td|j|j|j|f d S )Nzwrap_controller at %r %s:%d %s)gi_codeRuntimeErrorco_nameco_filenameco_firstlineno)r   r   co r   3/tmp/pip-unpacked-wheel-c7483y97/pluggy/_callers.py_raise_wrapfail   s    r   r   BaseExceptionNone)	hook_name	hook_impler   c                 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(   zSequence[HookImpl]zMapping[str, object]boolzobject | list[object])r   
hook_implscaller_kwargsfirstresultr   c                   s  d}g }d}d}dzg }	zRt |D ]B}z fdd|jD }W n6 tk
rz   |jD ]}| krZtd|qZY nX |jrd	}z<|j| }ttdt
t df |}t| |	||f W n tk
r   t|d
 Y nX q&|jrDz4|j| }ttdttf |}t| |	| W n  tk
r@   t|d
 Y nX q&|j| }|dk	r&|| |r& qlq&W n( tk
r } z|}W 5 d}~X Y nX W 5 |r|r|r|d nd}n|}t |	D ]}
z,|dk	r|
| n
|
| |
  W nh tk
r0 } z|j}d}W Y qW 5 d}~X Y n2 tk
r` } z|}W Y qW 5 d}~X Y nX t|
d q|dk	r||j	n
|  S nr|rt
|r|d nd|}n
t
||}t |	D ].}
t|
trHz|
d | W nJ tk
r   Y nD tk
r6 } zt| |
d |  W 5 d}~X Y nX t|
d d nz2|jdk	rd|
|j n|
|j |
  W np tk
r } z||j W Y qW 5 d}~X Y n8 tk
r } z|| W Y qW 5 d}~X Y nX t|
d q|   S X  dS )zExecute a call into multiple python functions/methods and return the
    result(s).

    ``caller_kwargs`` comes from HookCaller.__call__().
    TNr   zhas second yieldr
   c                   s   g | ]} | qS r   r   ).0argnamer+   r   r   
<listcomp>I   s     z_multicall.<locals>.<listcomp>z hook call must provide argument Fzdid not yield)reversedthrowsendcloseStopIterationvaluer   r   with_traceback__traceback__r   
isinstancetupler(   
_exception_resultZforce_resultZforce_exceptionZ
get_resultargnamesKeyErrorr   Zhookwrapperfunctionr   r   objectnextappendwrapper)r   r*   r+   r,   Z__tracebackhide__results	exceptionZonly_new_style_wrappersresultZ	teardownsZteardownsir    Zoutcomer   argsr.   resZwrapper_genZfunction_genexcr   r/   r   
_multicall5   s    







 

rK   )__doc__
__future__r   typingr   r   r   r   r   r   r	   r&   Z_hooksr   r<   r   r   	_warningsr   r@   ZTeardownr   r(   rK   r   r   r   r   <module>   s*   
