U
    @f                     @   s   e d ZddlZe 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 ejZd	d
ddddgZeee eeed dd	 ZejZdd
 ZejZdd Zdd ZejZdd ZejZdddZdS )os    Nsocket)greenio)	get_errno)greenthread)hubs)slurp_propertiesfdopenreadwritewaitwaitpidopen)ignoreZsrckeysc              
   O   s\   t | tstd|  ztj| f||W S  tk
rV } zt|j W 5 d}~X Y nX dS )zrfdopen(fd [, mode='r' [, bufsize]]) -> file_object

    Return an open file object connected to a file descriptor.zfd should be int, not %rN)
isinstanceint	TypeErrorr   Z	GreenPipeOSErrorargs)fdr   kwe r   K/var/www/html/chatgpt/venv/lib/python3.8/site-packages/eventlet/green/os.pyr	      s    
c              
   C   s   zt | |W S  tk
rV } z,t|tjkr6W Y dS t|tjkrF W 5 d}~X Y nX ztj| dd W q  tjk
r   Y dS X q dS )z;read(fd, buffersize) -> string

    Read a file descriptor. NT)r
   )	__original_read__r   r   errnoEPIPEEAGAINr   
trampolineZIOClosed)r   nr   r   r   r   r
   $   s    
c              
   C   sZ   zt | |W S  tk
rD } zt|tjtjfkr4 W 5 d}~X Y nX tj| dd q dS )zPwrite(fd, string) -> byteswritten

    Write a string to a file descriptor.
    NT)r   )__original_write__r   r   r   r   r   r   r   )r   str   r   r   r   r   9   s    c                   C   s
   t ddS )zDwait() -> (pid, status)

    Wait for completion of a child process.r   )r   r   r   r   r   r   G   s    c                 C   sT   |t j@ dkrt| |S |t jB }t| |\}}|rD|dkrD||fS td q"dS )zjwaitpid(...)
    waitpid(pid, options) -> (pid, status)

    Wait for completion of a given child process.r   g{Gz?N)os_origWNOHANG__original_waitpid__r   sleep)pidoptionsnew_optionsZrpidstatusr   r   r   r   Q   s    

  c                 C   sV   t | jdkr"|||df\} }}}|dk	r<t| |||d}nt| ||}t| |S )zt Wrap os.open
        This behaves identically, but collaborates with
        the hub's notify_opened protocol.
    _NormalAccessorN)dir_fd)type__name____original_open__r   Znotify_opened)fileflagsmoder-   r   r   r   r   r   d   s    
)r+   N)
__import__r#   r   r   Zeventletr   Zeventlet.supportr   r   r   Zeventlet.patcherr   __all__Z__patched__globalsdirr	   r
   r   r   r!   r   r   r%   r   r0   r   r   r   r   <module>   s2   