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   ÿ