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   J/var/www/html/olx_land/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   win32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&   
&	r0   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(   $r2   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)r1   N)sys
executable
_THIS_FILEextendr   r)   r   _WAIT_TIMEOUT)r   spawner_args	temp_procr   r   r   _spawn_daemon_double_popeno   s   

r:   c                 C  s   t jr	t|  dS t|  dS )zSpawn a daemon process (Unix).N)r3   r4   r:   r2   )r   r   r   r   r0   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   r3   r,   typingr   r   r   r7   pathrealpath__file__r5   r   r   platformgetattrr*   r0   r2   r:   __name__hasattrr<   OSErrorargv_exitr   r   r   r   <module>   s6   

	



	
