U
    W[y                     @   sL   d Z ddlmZ ddlmZ ddlmZ ddlmZ dZ	G dd de
Zd	S )
zd
Cross-platform process-related functionality used by different
L{IReactorProcess} implementations.
    )qual)getWarningMethod)Failure)errzUSince Twisted 8.2, IProcessProtocol.processExited is required.  %s must implement it.c                   @   s<   e Zd ZdZdZdZdZdd Zdd Zdd Z	d	d
 Z
dS )BaseProcessNr   c                 C   s
   || _ d S )N)proto)selfZprotocol r	   ?/usr/lib/python3/dist-packages/twisted/internet/_baseprocess.py__init__   s    zBaseProcess.__init__c                 C   sh   t  }t| jd|}||kr<t tt| jjf tdd n(z|t| W n   t	d d Y nX d S )NprocessExitedr   )
stacklevelz!unexpected error in processExited)
objectgetattrr   r   _missingProcessExitedr   	__class__DeprecationWarningr   r   )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)statuslostProcesspidr   
_getReasonmaybeCallProcessEnded)r   r   r	   r	   r
   processEnded,   s
    zBaseProcess.processEndedc                 C   sP   | j dk	rL| | j}| j }d| _ z|t| W n   tdd Y nX dS )zD
        Call processEnded on protocol after final cleanup.
        Nz unexpected error in processEnded)r   r   r   r   r   r   )r   r   r   r	   r	   r
   r   7   s    
z!BaseProcess.maybeCallProcessEnded)__name__
__module____qualname__r   r   r   r   r   r   r   r   r	   r	   r	   r
   r      s   r   N)__doc__Ztwisted.python.reflectr   Ztwisted.python.deprecater   Ztwisted.python.failurer   Ztwisted.python.logr   r   r   r   r	   r	   r	   r
   <module>   s   