o
    >ce                     @   s|  	 d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 g dZ
G dd de jZG dd	 d	e jZG d
d deZG dd deZG dd dZG dd deeeZG dd deeeZdd Zdd ZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%ZG d&d' d'eeZG d(d) d)eeZG d*d+ d+eeZdS ),    N)dequewraps)
MethodTypeGenericAlias)asynccontextmanagercontextmanagerclosingnullcontextAbstractContextManagerAbstractAsyncContextManagerAsyncExitStackContextDecorator	ExitStackredirect_stdoutredirect_stderrsuppressaclosingc                   @   8   e Zd Z	 eeZdd Zejdd Z	edd Z
dS )r   c                 C      	 | S N selfr   r   ^/Volumes/Data/workspace/med-macos-weekly/build/ExtProjs/pyncpp/python/source/Lib/contextlib.py	__enter__   s   z AbstractContextManager.__enter__c                 C   s   	 d S r   r   r   exc_type	exc_value	tracebackr   r   r   __exit__   s   zAbstractContextManager.__exit__c                 C      | t u rt|ddS tS )Nr   r    )r   _collections_abc_check_methodsNotImplementedclsCr   r   r   __subclasshook__   s   z'AbstractContextManager.__subclasshook__N)__name__
__module____qualname__classmethodr   __class_getitem__r   abcabstractmethodr    r(   r   r   r   r   r          
r   c                   @   r   )r   c                    s   	 | S r   r   r   r   r   r   
__aenter__+   s   z&AbstractAsyncContextManager.__aenter__c                    s   	 d S r   r   r   r   r   r   	__aexit__/   s   z%AbstractAsyncContextManager.__aexit__c                 C   r!   )Nr1   r2   )r   r"   r#   r$   r%   r   r   r   r(   4   s
   z,AbstractAsyncContextManager.__subclasshook__N)r)   r*   r+   r,   r   r-   r1   r.   r/   r2   r(   r   r   r   r   r   %   r0   r   c                   @      e Zd Z	 dd Zdd ZdS )r   c                 C   r   r   r   r   r   r   r   _recreate_cm?   s   	zContextDecorator._recreate_cmc                       t   fdd}|S )Nc                     s:       | i |W  d    S 1 sw   Y  d S r   r4   argskwdsfuncr   r   r   innerL   s   
$z(ContextDecorator.__call__.<locals>.innerr   r   r;   r<   r   r:   r   __call__K      zContextDecorator.__call__Nr)   r*   r+   r4   r>   r   r   r   r   r   <   s    r   c                   @   r3   )AsyncContextDecoratorc                 C   r   r   r   r   r   r   r   r4   V   s   z"AsyncContextDecorator._recreate_cmc                    r5   )Nc               	      sV     4 I d H   | i |I d H W  d   I d H  S 1 I d H s$w   Y  d S r   r6   r7   r:   r   r   r<   \   s   0z-AsyncContextDecorator.__call__.<locals>.innerr   r=   r   r:   r   r>   [   r?   zAsyncContextDecorator.__call__Nr@   r   r   r   r   rA   S   s    rA   c                   @   r3   )_GeneratorContextManagerBasec                 C   sN   ||i || _ |||| _| _| _t|dd }|d u r"t| j}|| _d S )N__doc__)genr;   r8   r9   getattrtyperC   )r   r;   r8   r9   docr   r   r   __init__f   s   

z%_GeneratorContextManagerBase.__init__c                 C   s   |  | j| j| jS r   )	__class__r;   r8   r9   r   r   r   r   r4   t   s   z)_GeneratorContextManagerBase._recreate_cmN)r)   r*   r+   rH   r4   r   r   r   r   rB   c   s    rB   c                   @   r3   )_GeneratorContextManagerc                 C   s2   | ` | `| `zt| jW S  ty   tdd w Nzgenerator didn't yield)r8   r9   r;   nextrD   StopIterationRuntimeErrorr   r   r   r   r      s   
z"_GeneratorContextManager.__enter__c              
   C   s  |d u rz
t | j W td ty   Y dS w |d u r | }z| j||| W td tyC } z
||uW  Y d }~S d }~w tyk } z||u rUW Y d }~dS t|trf|j|u rfW Y d }~dS  d }~w ty } z||urw W Y d }~dS d }~ww )NFgenerator didn't stopz#generator didn't stop after throw())rL   rD   rM   rN   throw
isinstance	__cause__BaseExceptionr   typvaluer   excr   r   r   r       s<    
z!_GeneratorContextManager.__exit__N)r)   r*   r+   r   r    r   r   r   r   rJ   {       	rJ   c                   @   r3   )_AsyncGeneratorContextManagerc                    s:   | ` | `| `z	t| jI d H W S  ty   tdd w rK   )r8   r9   r;   anextrD   StopAsyncIterationrN   r   r   r   r   r1      s   
z(_AsyncGeneratorContextManager.__aenter__c              
      s  |d u rzt | jI d H  W td ty   Y dS w |d u r$| }z| j|||I d H  W td tyJ } z
||uW  Y d }~S d }~w tyt } z||u r\W Y d }~dS t|ttfro|j|u roW Y d }~dS  d }~w ty } z||ur W Y d }~dS d }~ww )NFrO   z$generator didn't stop after athrow())	rZ   rD   r[   rN   athrowrQ   rM   rR   rS   rT   r   r   r   r2      s>    
z'_AsyncGeneratorContextManager.__aexit__N)r)   r*   r+   r1   r2   r   r   r   r   rY      rX   rY   c                       	 t   fdd}|S )Nc                        t  | |S r   )rJ   r7   r;   r   r   helper     zcontextmanager.<locals>.helperr   r;   r`   r   r_   r   r         r   c                    r]   )Nc                     r^   r   )rY   r7   r_   r   r   r`   8  ra   z#asynccontextmanager.<locals>.helperr   rb   r   r_   r   r     rc   r   c                   @   &   e Zd Z	 dd Zdd Zdd ZdS )r	   c                 C   
   || _ d S r   thingr   rg   r   r   r   rH   O     
zclosing.__init__c                 C      | j S r   rf   r   r   r   r   r   Q     zclosing.__enter__c                 G   s   | j   d S r   )rg   closer   exc_infor   r   r   r    S  s   zclosing.__exit__Nr)   r*   r+   rH   r   r    r   r   r   r   r	   >  s
    r	   c                   @   rd   )r   c                 C   re   r   rf   rh   r   r   r   rH   i  ri   zaclosing.__init__c                       | j S r   rf   r   r   r   r   r1   k     zaclosing.__aenter__c                    s   | j  I d H  d S r   )rg   acloserm   r   r   r   r2   m  s   zaclosing.__aexit__N)r)   r*   r+   rH   r1   r2   r   r   r   r   r   W  s
    r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )_RedirectStreamNc                 C   s   || _ g | _d S r   )_new_target_old_targets)r   Z
new_targetr   r   r   rH   u  s   
z_RedirectStream.__init__c                 C   s*   | j tt| j tt| j| j | jS r   )ru   appendrE   sys_streamsetattrrt   r   r   r   r   r   z  s   z_RedirectStream.__enter__c                 C   s   t t| j| j  d S r   )ry   rw   rx   ru   popr   ZexctypeZexcinstZexctbr   r   r   r      s   z_RedirectStream.__exit__)r)   r*   r+   rx   rH   r   r    r   r   r   r   rs   q  s
    rs   c                   @      e Zd Z	 dZdS )r   stdoutNr)   r*   r+   rx   r   r   r   r   r     s    r   c                   @   r|   )r   stderrNr~   r   r   r   r   r     s    r   c                   @   rd   )r   c                 G   re   r   )_exceptions)r   
exceptionsr   r   r   rH     ri   zsuppress.__init__c                 C      d S r   r   r   r   r   r   r        zsuppress.__enter__c                 C   s   |d uo	t || jS r   )
issubclassr   r{   r   r   r   r      s   
zsuppress.__exit__Nro   r   r   r   r   r     s
    
r   c                   @   s`   e Zd Z	 edd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdddZdS )_BaseExitStackc                 C   
   t || S r   r   cmcm_exitr   r   r   _create_exit_wrapper     
z#_BaseExitStack._create_exit_wrapperc                       fdd}|S )Nc                    s    i  d S r   r   r   rW   tbr8   callbackr9   r   r   _exit_wrapper  s   z8_BaseExitStack._create_cb_wrapper.<locals>._exit_wrapperr   r   r8   r9   r   r   r   r   _create_cb_wrapper     z!_BaseExitStack._create_cb_wrapperc                 C   s   t  | _d S r   )r   _exit_callbacksr   r   r   r   rH     s   z_BaseExitStack.__init__c                 C   s    	 t |  }| j|_t | _|S r   )rF   r   r   )r   Z	new_stackr   r   r   pop_all  s
   
z_BaseExitStack.pop_allc                 C   sD   	 t |}z|j}W n ty   | | Y |S w | || |S r   )rF   r    AttributeError_push_exit_callback_push_cm_exitr   exitZ_cb_typeZexit_methodr   r   r   push  s   
z_BaseExitStack.pushc                 C   s*   	 t |}|j}||}| || |S r   )rF   r    r   r   r   r   Z_cm_type_exitresultr   r   r   enter_context  s   
z_BaseExitStack.enter_contextc                O   s.   	 | j |g|R i |}||_| | |S r   )r   __wrapped__r   r   r   r8   r9   r   r   r   r   r     s
   
z_BaseExitStack.callbackc                 C      	 |  ||}| |d d S )NT)r   r   r   r   r   r   r   r   r   r     s   z_BaseExitStack._push_cm_exitTc                 C   s   | j ||f d S r   )r   rv   )r   r   is_syncr   r   r   r     s   z"_BaseExitStack._push_exit_callbackN)T)r)   r*   r+   staticmethodr   r   rH   r   r   r   r   r   r   r   r   r   r   r     s    

r   c                   @   rd   )r   c                 C   s   | S r   r   r   r   r   r   r     r   zExitStack.__enter__c           
         s   |d d u}t  d   fdd}d}d}| jrE| j \}}z|| r+d}d}d}W n   t  }||d |d  d}|}Y | js|r^z	|d j}	|d  ty]   |	|d _ w |oa|S )Nr      c                    6   	 | j }|d u s||u rd S | u rn|} q|| _ d S r   __context__Znew_excZold_excZexc_contextZ	frame_excr   r   _fix_exception_context     

z2ExitStack.__exit__.<locals>._fix_exception_contextFTNNNrw   rn   r   rz   r   rS   )
r   exc_detailsreceived_excr   suppressed_excpending_raiser   cbnew_exc_details	fixed_ctxr   r   r   r      s8   

zExitStack.__exit__c                 C   s   	 |  d d d  d S r   )r    r   r   r   r   rl   F  s   zExitStack.closeN)r)   r*   r+   r   r    rl   r   r   r   r   r     s
    
1r   c                   @   s^   e Zd Z	 edd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd ZdS )r   c                 C   r   r   r   r   r   r   r   _create_async_exit_wrapperY  r   z)AsyncExitStack._create_async_exit_wrapperc                   r   )Nc                    s    i I d H  d S r   r   r   r   r   r   r   _  s   z>AsyncExitStack._create_async_cb_wrapper.<locals>._exit_wrapperr   r   r   r   r   _create_async_cb_wrapper]  r   z'AsyncExitStack._create_async_cb_wrapperc                    s2   	 t |}|j}||I d H }| || |S r   )rF   r2   r1   _push_async_cm_exitr   r   r   r   enter_async_contextc  s   z"AsyncExitStack.enter_async_contextc                 C   sF   	 t |}z|j}W n ty   | |d Y |S w | || |S NF)rF   r2   r   r   r   r   r   r   r   push_async_exito  s   
zAsyncExitStack.push_async_exitc                O   s0   	 | j |g|R i |}||_| |d |S r   )r   r   r   r   r   r   r   push_async_callback  s
   z"AsyncExitStack.push_async_callbackc                    s   	 |  d d d I d H  d S r   )r2   r   r   r   r   rr     s   zAsyncExitStack.aclosec                 C   r   r   )r   r   r   r   r   r   r     s   z"AsyncExitStack._push_async_cm_exitc                    s   | S r   r   r   r   r   r   r1        zAsyncExitStack.__aenter__c                    s   |d d u}t  d   fdd}d}d}| jrR| j \}}z|r)|| }n|| I d H }|r8d}d}d}W n   t  }	||	d |d  d}|	}Y | js|rkz	|d j}
|d  tyj   |
|d _ w |on|S )Nr   r   c                    r   r   r   r   r   r   r   r     r   z8AsyncExitStack.__aexit__.<locals>._fix_exception_contextFTr   r   )r   r   r   r   r   r   r   r   Zcb_suppressr   r   r   r   r   r2     s@   


zAsyncExitStack.__aexit__N)r)   r*   r+   r   r   r   r   r   r   rr   r   r1   r2   r   r   r   r   r   L  s    

r   c                   @   s8   e Zd Z	 dddZdd Zdd Zdd	 Zd
d ZdS )r
   Nc                 C   re   r   enter_result)r   r   r   r   r   rH     ri   znullcontext.__init__c                 C   rj   r   r   r   r   r   r   r     rk   znullcontext.__enter__c                 G   r   r   r   r   Zexcinfor   r   r   r      r   znullcontext.__exit__c                    rp   r   r   r   r   r   r   r1     rq   znullcontext.__aenter__c                    s   d S r   r   r   r   r   r   r2     r   znullcontext.__aexit__r   )r)   r*   r+   rH   r   r    r1   r2   r   r   r   r   r
     s    

r
   ) r.   rw   r"   collectionsr   	functoolsr   typesr   r   __all__ABCr   r   objectr   rA   rB   rJ   rY   r   r   r	   r   rs   r   r   r   r   r   r   r
   r   r   r   r   <module>   sH    

@A!!PE 