
    FCf                       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                  j                  e      ZddZddZej$                  dk(  r eed	d
      ZddZyddZddZddZedk(  rI eed      r	  ej4                           e eej8                  dd               ej:                  d       yy# e$ r Y 6w xY w)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
   c                Z    	 | j                  |      S # t        j                  $ r Y yw xY w)z,Implement wait timeout support for Python 3.)timeoutN)wait
subprocessTimeoutExpired)popenr	   s     N/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/pymongo/daemon.py_popen_waitr   "   s0    zz'z**$$ s    **c                    | d| _         yy)zpSilence Popen's ResourceWarning.

    Note this should only be used if the process was created as a daemon.
    Nr   )
returncode)r   s    r   _silence_resource_warningr   +   s          win32DETACHED_PROCESS   c                ,   	 t        t        j                  d      5 }t        j                  | t
        |||      }t        |       ddd       y# 1 sw Y   yxY w# t        $ r/}t        j                  d| d    d| t        d       Y d}~yd}~ww xY 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)argsr$   r   excs       r   _spawn_daemonr-   =   s    	bjj%( 1G"(("3!"" *%01 1 1 ! 	MM"47)+WX[W\] 	s4   A *AA AA A 	B$%BBc                   	 t        t        j                  d      5 }t        j                  | d|||      cddd       S # 1 sw Y   yxY w# t
        $ r/}t        j                  d| d    d| t        d	       Y d}~yd}~ww xY 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,   s      r   _spawnr0   \   s    	bjj%( G!''"!""    ! 	MM"47)+WX[W\] 
 	s3   A A 	A  A	A 	A 	B%A??Bc                    t         j                  t        g}|j                  |        t	        j
                  |d      }t        |t               y)z7Spawn a daemon process using a double subprocess.Popen.T)r/   N)sys
executable
_THIS_FILEextendr   r%   r   _WAIT_TIMEOUT)r+   spawner_args	temp_procs      r   _spawn_daemon_double_popenr9   o   s<    
3D!$$\TB	 	I}-r   c                R    t         j                  rt        |        yt        |        y)zSpawn a daemon process (Unix).N)r2   r3   r9   r0   )r+   s    r   r-   r-   x   s     >>&t, 4Lr   __main__setsid   )r   zsubprocess.Popen[Any]r	   zOptional[float]returnzOptional[int])r   Optional[subprocess.Popen[Any]]r>   None)r+   Sequence[str]r>   r@   )r+   rA   r>   r?   )__doc__
__future__r   r#   r   r2   r(   typingr   r   r   r6   pathrealpath__file__r4   r   r   platformgetattrr&   r-   r0   r9   __name__hasattrr<   OSErrorargv_exit r   r   <module>rP      s    # 	  
  * * WWh'
 <<7
,>
K>&." :2x 		 	"&!""67 
  s   C C	C	