o
    h                     @  s  d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	m
Z
 dZejeZd!ddZd"ddZejdkrFeeddZd#ddZdS d$ddZd#ddZd#ddZedkreedrnze  W n	 eym   Y nw eeejd d  ed dS dS )%zSupport for spawning a daemon process.

PyMongo only attempts to spawn the mongocryptd daemon process when automatic
client-side field level encryption is enabled. See
:ref:`automatic-client-side-encryption` for more info.
    )annotationsN)AnyOptionalSequence
   popensubprocess.Popen[Any]timeoutOptional[float]returnOptional[int]c                 C  s&   z| j |dW S  tjy   Y dS w )z,Implement wait timeout support for Python 3.)r	   N)wait
subprocessTimeoutExpired)r   r	    r   A/var/www/html/venv/lib/python3.10/site-packages/pymongo/daemon.py_popen_wait"   s
   r   Optional[subprocess.Popen[Any]]Nonec                 C  s   | dur	d| _ dS dS )zpSilence Popen's ResourceWarning.

    Note this should only be used if the process was created as a daemon.
    Nr   )
returncode)r   r   r   r   _silence_resource_warning+   s   

r   win32ZDETACHED_PROCESS   argsSequence[str]c              
   C  s   z)t tjd}tj| t|||d}t| W d   W dS 1 s"w   Y  W dS  tyL } ztj	d| d  d| t
dd W Y d}~dS d}~ww )	z!Spawn a daemon process (Windows).r+b)creationflagsstdinstderrstdoutNFailed to start r   +: is it on your $PATH?
Original exception:    
stacklevel)openosdevnullr   Popen_DETACHED_PROCESSr   FileNotFoundErrorwarningswarnRuntimeWarning)r   r'   r   excr   r   r   _spawn_daemon=   s&   
&	r/   c              
   C  s   z$t tjd}tj| d|||dW  d   W S 1 sw   Y  W dS  tyG } ztjd| d  d| tdd	 W Y d}~dS d}~ww )
z,Spawn the process and silence stdout/stderr.r   T)	close_fdsr   r   r   Nr    r   r!   r"   r#   )	r%   r&   r'   r   r(   r*   r+   r,   r-   )r   r'   r.   r   r   r   _spawn\   s(   $r1   c                 C  s0   t jtg}||  tj|dd}t|t dS )z7Spawn a daemon process using a double subprocess.Popen.T)r0   N)sys
executable
_THIS_FILEextendr   r(   r   _WAIT_TIMEOUT)r   Zspawner_argsZ	temp_procr   r   r   _spawn_daemon_double_popeno   s   

r7   c                 C  s   t jr	t|  dS t|  dS )zSpawn a daemon process (Unix).N)r2   r3   r7   r1   )r   r   r   r   r/   x   s   
__main__setsid   )r   r   r	   r
   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )__doc__
__future__r   r&   r   r2   r+   typingr   r   r   r6   pathrealpath__file__r4   r   r   platformgetattrr)   r/   r1   r7   __name__hasattrr9   OSErrorargv_exitr   r   r   r   <module>   s6   

	



	
