U
    ª€lj�  ã                   @   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
 eƒ ZdZG dd	„ d	ƒZd
S )zd
Cross-platform process-related functionality used by different
L{IReactorProcess} implementations.
é    )ÚOptional)ÚLogger)ÚgetWarningMethod)ÚFailure)ÚqualzUSince Twisted 8.2, IProcessProtocol.processExited is required.  %s must implement it.c                   @   sV   e Zd ZU dZee ed< dZee ed< dZdZ	dd„ Z
dd„ Zd	d
„ Zdd„ ZdS )ÚBaseProcessNÚpidÚstatusr   c                 C   s
   || _ d S )N)Úproto)ÚselfÚprotocol© r   úA/tmp/pip-unpacked-wheel-aghyhbke/twisted/internet/_baseprocess.pyÚ__init__   s    zBaseProcess.__init__c              	   C   sb   t ƒ }t| jd|ƒ}||kr<tƒ tt| jjƒf tdd� n"t 	d¡� |t
|ƒƒ W 5 Q R X d S )NÚprocessExitedr   )Ú
stacklevelzwhile calling processExited:)ÚobjectÚgetattrr
   r   Ú_missingProcessExitedr   Ú	__class__ÚDeprecationWarningÚ_logÚfailuresHandledr   )r   ÚreasonÚdefaultr   r   r   r   Ú_callProcessExited"   s    ýzBaseProcess._callProcessExitedc                 C   s6   || _ |  jd7  _d| _|  |  |¡¡ |  ¡  dS )z;
        This is called when the child terminates.
        é   N)r	   ÚlostProcessr   r   Ú
_getReasonÚmaybeCallProcessEnded)r   r	   r   r   r   ÚprocessEnded/   s
    zBaseProcess.processEndedc              	   C   sJ   | j dk	rF|  | j¡}| j }d| _ t d¡� | t|ƒ¡ W 5 Q R X dS )zD
        Call processEnded on protocol after final cleanup.
        Nzwhile calling processEnded:)r
   r   r	   r   r   r    r   )r   r   r
   r   r   r   r   9   s    
z!BaseProcess.maybeCallProcessEnded)Ú__name__Ú
__module__Ú__qualname__r   r   ÚintÚ__annotations__r	   r   r
   r   r   r    r   r   r   r   r   r      s   

r   N)Ú__doc__Útypingr   Ztwisted.loggerr   Ztwisted.python.deprecater   Ztwisted.python.failurer   Ztwisted.python.reflectr   r   r   r   r   r   r   r   Ú<module>   s   ÿ