???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \j3                 @   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dddd	d
dgZG dd de jZ	G dd de
ZG dd dee	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dS )    N)deque)wrapscontextmanagerclosingAbstractContextManagerContextDecorator	ExitStackredirect_stdoutredirect_stderrsuppressc               @   s.   e Zd Zdd Zejdd Zedd ZdS )r   c             C   s   | S )N )selfr   r   "/usr/lib64/python3.6/contextlib.py	__enter__   s    z AbstractContextManager.__enter__c             C   s   d S )Nr   )r   exc_type	exc_value	tracebackr   r   r   __exit__   s    zAbstractContextManager.__exit__c             C   s   | t krtj|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__r   abcabstractmethodr   classmethodr   r   r   r   r   r      s   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s   | S )Nr   )r   r   r   r   _recreate_cm$   s    
zContextDecorator._recreate_cmc                s   t   fdd}|S )Nc           
      s   j    | |S Q R X d S )N)r    )argskwds)funcr   r   r   inner1   s    
z(ContextDecorator.__call__.<locals>.inner)r   )r   r#   r$   r   )r#   r   r   __call__0   s    zContextDecorator.__call__N)r   r   r   r    r%   r   r   r   r   r   !   s   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_GeneratorContextManagerc             C   sJ   |||| _ |||  | _| _| _t|dd }|d kr@t| j}|| _d S )N__doc__)genr#   r!   r"   getattrtyper'   )r   r#   r!   r"   docr   r   r   __init__;   s    
z!_GeneratorContextManager.__init__c             C   s   | j | j| j| jS )N)	__class__r#   r!   r"   )r   r   r   r   r    I   s    z%_GeneratorContextManager._recreate_cmc             C   s.   y
t | jS  tk
r(   tdd Y nX d S )Nzgenerator didn't yield)nextr(   StopIterationRuntimeError)r   r   r   r   r   O   s    
z"_GeneratorContextManager.__enter__c             C   s   |d kr6yt | j W n tk
r*   dS X tdn|d krD| }y| jj||| W n tk
r| } z||k	S d }~X nf tk
r } z*||krdS |tkr|j|krdS  W Y d d }~X n"   tj d |krdS  Y nX tdd S )NFzgenerator didn't stop   z#generator didn't stop after throw())r.   r(   r/   r0   throw	__cause__sysexc_info)r   r*   valuer   excr   r   r   r   U   s.    
z!_GeneratorContextManager.__exit__N)r   r   r   r,   r    r   r   r   r   r   r   r&   8   s   r&   c                s   t   fdd}|S )Nc                 s   t  | |S )N)r&   )r!   r"   )r#   r   r   helper   s    zcontextmanager.<locals>.helper)r   )r#   r8   r   )r#   r   r      s    c               @   s$   e Zd Zdd Zdd Zdd ZdS )r   c             C   s
   || _ d S )N)thing)r   r9   r   r   r   r,      s    zclosing.__init__c             C   s   | j S )N)r9   )r   r   r   r   r      s    zclosing.__enter__c             G   s   | j j  d S )N)r9   close)r   r5   r   r   r   r      s    zclosing.__exit__N)r   r   r   r,   r   r   r   r   r   r   r      s   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 )N)_new_target_old_targets)r   
new_targetr   r   r   r,      s    z_RedirectStream.__init__c             C   s*   | j jtt| j tt| j| j | jS )N)r=   appendr)   r4   _streamsetattrr<   )r   r   r   r   r      s    z_RedirectStream.__enter__c             C   s   t t| j| jj  d S )N)rA   r4   r@   r=   pop)r   exctypeexcinstexctbr   r   r   r      s    z_RedirectStream.__exit__)r   r   r   r@   r,   r   r   r   r   r   r   r;      s   r;   c               @   s   e Zd ZdZdS )r	   stdoutN)r   r   r   r@   r   r   r   r   r	      s   c               @   s   e Zd ZdZdS )r
   stderrN)r   r   r   r@   r   r   r   r   r
      s   c               @   s$   e Zd Zdd Zdd Zdd ZdS )r   c             G   s
   || _ d S )N)_exceptions)r   
exceptionsr   r   r   r,      s    zsuppress.__init__c             C   s   d S )Nr   )r   r   r   r   r      s    zsuppress.__enter__c             C   s   |d k	ot || jS )N)
issubclassrH   )r   rC   rD   rE   r   r   r   r      s    
zsuppress.__exit__N)r   r   r   r,   r   r   r   r   r   r   r      s   c               @   sL   e Zd Z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   s   t  | _d S )N)r   _exit_callbacks)r   r   r   r   r,     s    zExitStack.__init__c             C   s   t |  }| j|_t | _|S )N)r*   rK   r   )r   	new_stackr   r   r   pop_all  s    
zExitStack.pop_allc                s"    fdd} |_ | j| d S )Nc                 s    f|  S )Nr   )exc_details)cmcm_exitr   r   _exit_wrapper  s    z.ExitStack._push_cm_exit.<locals>._exit_wrapper)__self__push)r   rO   rP   rQ   r   )rO   rP   r   _push_cm_exit  s    zExitStack._push_cm_exitc             C   sD   t |}y
|j}W n  tk
r2   | jj| Y nX | j|| |S )N)r*   r   AttributeErrorrK   r?   rT   )r   exit_cb_typeexit_methodr   r   r   rS      s    

zExitStack.pushc                s$    fdd}|_ | j| S )Nc                s     d S )Nr   )r   r7   tb)r!   callbackr"   r   r   rQ   9  s    z)ExitStack.callback.<locals>._exit_wrapper)__wrapped__rS   )r   rZ   r!   r"   rQ   r   )r!   rZ   r"   r   rZ   4  s    
zExitStack.callbackc             C   s(   t |}|j}|j|}| j|| |S )N)r*   r   r   rT   )r   rO   _cm_type_exitresultr   r   r   enter_contextA  s
    
zExitStack.enter_contextc             C   s   | j d d d  d S )N)r   )r   r   r   r   r:   N  s    zExitStack.closec       	         s   |d d k	}t j d   fdd}d}d}x\| jr| jj }y|| rTd}d}d}W q.   t j }||d |d  d}|}Y q.X q.W |ry|d j}|d W n  tk
r   ||d _ Y nX |o|S )Nr   r1   c                s8   x,| j }||krd S |d ks$| kr&P |} qW || _ d S )N)__context__)new_excold_excexc_context)	frame_excr   r   _fix_exception_contextX  s    z2ExitStack.__exit__.<locals>._fix_exception_contextFT)NNN)r4   r5   rK   rB   r`   BaseException)	r   rN   received_excre   suppressed_excpending_raisecbnew_exc_details	fixed_ctxr   )rd   r   r   R  s2    


zExitStack.__exit__N)r   r   r   r,   rM   rT   rS   rZ   r_   r:   r   r   r   r   r   r     s   )r   r4   r   collectionsr   	functoolsr   __all__ABCr   objectr   r&   r   r   r;   r	   r
   r   r   r   r   r   r   <module>   s"   I"