o
    b                     @   sV   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ZG dd	 d	Zd
S )zd
Cross-platform process-related functionality used by different
L{IReactorProcess} implementations.
    )Optional)getWarningMethod)Failure)err)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   ?/usr/lib/python3/dist-packages/twisted/internet/_baseprocess.py__init__   s   
zBaseProcess.__init__c                 C   sp   t  }t| jd|}||u rt tt| jjf tdd d S z	|t| W d S  t	y7   t
d d Y d S w )NprocessExitedr   )
stacklevelz!unexpected error in processExited)objectgetattrr
   r   _missingProcessExitedr   	__class__DeprecationWarningr   BaseExceptionr   )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   sZ   | j dur+| | j}| j }d| _ z
|t| W dS  ty*   tdd Y dS w 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   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   twisted.python.deprecater   twisted.python.failurer   twisted.python.logr   twisted.python.reflectr   r   r   r   r   r   r   <module>   s   