
    i5                        d Z ddlmZmZmZ ddlZddl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d	lmZ ej        Zej                            d
          rd ZneZdZdZdZdZdZdZdZdZdZ dZ!dgZ" e#ed          re"$                    d           ndgZ%dge"z   Z&ej'        Z' ee e(            e&d          Z)dZ*dZ+d Z, G d de-          Z.d"dZ G d de-          Z/ G d  de-          Z0d! Z1dS )#z
Waiting for I/O completion.
    )absolute_importdivisionprint_functionN)Event)_get_hub_noargs)sleep)copy_globals)_NONE)EBADFwin32c                 6    | s|s|sdS t          | |||          S )N) r   r   )_real_original_select)rwxts       8/usr/local/lib/python3.11/dist-packages/gevent/select.py_original_selectr      s3      	  	 1 	 <$Q1a000                       @         selectpollerrorr   )names_to_ignoredunder_names_to_keepc                 H   t          | t                    r| }na	 t          |                                           }n># t          t          t
          f$ r$ t          d                    |                     d w xY w|dk     r"t          d                    |                    |S )NzInvalid file object: {!r}r   zInvalid file descriptor: {})
isinstanceintfilenoAttributeError	TypeError
ValueErrorformat)fileobjfds     r   
get_filenor/   E   s    '3 ?	?W^^%%&&BB	:6 	? 	? 	? $$*F7OO5 5:>?	? 
Avv6==bAABBBIs	   !< ;A7c                   Z    e Zd ZdZed             Zed             Zed             Zd Z	dS )SelectResultr   c                 $      fd}||_         |S )Nc                                          |            |                                                                  d S N)appendcloseset)r.   watchereventready_collections     r   cbz'SelectResult._make_callback.<locals>.cbX   s5    ##B'''MMOOOIIKKKKKr   )mask)r:   r9   r<   r;   s   ``  r   _make_callbackzSelectResult._make_callbackV   s0    	 	 	 	 	 	 	r   c                    t                      j        }|j        }|j        }|D ][\  }}|D ]S} |t	          |          |j                  }	||	_        |                    |	           |	                    |||	           T\d S r4   )	get_hubloopioMAXPRIr/   r<   priorityr5   start)
clswatchersfd_cbr@   rA   rB   fdlistcallbackr.   r8   s
             r   _make_watcherszSelectResult._make_watchers_   s    yy~W % 	5 	5FH 5 5"Z^^X];;#) (((hG4444	5	5 	5r   c                 j    | D ]*}|                                  |                                 +| d d = d S r4   )stopr6   )rF   r8   s     r   	_closeallzSelectResult._closealll   s<     	 	GLLNNNMMOOOOQQQKKKr   c                 f   g }g }g }t                      }|                     ||t                    }|                     ||t                    }		 |                     |||f||	f           |                    |           ||g f|                     |           S # |                     |           w xY w)Ntimeout)r   r=   _EV_READ	_EV_WRITErJ   waitrM   )
selfrlistwlistrP   rF   readwriter9   add_read	add_writes
             r   r    zSelectResult.selects   s     &&tUH==''ui@@		%!& 1!&	 24 4 4 JJwJ'''?NN8$$$$DNN8$$$$s   5B B0N)
__name__
__module____qualname__	__slots__staticmethodr=   classmethodrJ   rM   r    r   r   r   r1   r1   S   sw        I  \ 
5 
5 [
5   \% % % % %r   r1   c                    ||dk     rt          d          t          | t          t          f          r| nt          |           } t          |t          t          f          r|nt          |          }t	          | ||d          }|d         s|d         s|d         s||dk    rt                       |S t                      }|                    | ||          S )a  An implementation of :obj:`select.select` that blocks only the current greenlet.

    .. caution:: *xlist* is ignored.

    .. versionchanged:: 1.2a1
       Raise a :exc:`ValueError` if timeout is negative. This matches Python 3's
       behaviour (Python 2 would raise a ``select.error``). Previously gevent had
       undefined behaviour.
    .. versionchanged:: 1.2a1
       Raise an exception if any of the file descriptors are invalid.
    Nr   ztimeout must be non-negativer   r   )r+   r&   listtupler   _g_sleepr1   r    )rU   rV   xlistrP   sel_resultsresults         r   r    r       s     w{{ 7888  e}55FEE4;;Ee}55FEE4;;E #5%::K1~ Q ;q> g>QV]abVbVb 	


^^F==w///r   c                   $    e Zd ZdZd Zd Zd ZdS )
PollResult)eventsr9   c                 R    t                      | _        t                      | _        d S r4   )r7   rj   r   r9   rT   s    r   __init__zPollResult.__init__   s    eeWW


r   c                     |dk     rt           }n'd}|t          z  rt          }|t          z  r
|t          z  }| j                            ||f           | j                                         d S )Nr   )	POLLNVALrQ   POLLINrR   POLLOUTrj   addr9   r7   )rT   rj   r.   result_flagss       r   	add_eventzPollResult.add_event   sq    A::#LLL  &%	! ('\*+++
r   c                 H    | j                             |t          f           d S r4   )rj   rr   ro   )rT   r.   s     r   add_error_before_iozPollResult.add_error_before_io   s     X'''''r   N)r[   r\   r]   r^   rm   rt   rv   r   r   r   ri   ri      sF        #I    ( ( ( ( (r   ri   c                   <    e Zd ZdZd ZefdZd Zd Zd	dZ	d Z
dS )
r!   a  
    An implementation of :obj:`select.poll` that blocks only the current greenlet.

    With only one exception, the interface is the same as the standard library interface.

    .. caution:: ``POLLPRI`` data is not supported.

    .. versionadded:: 1.1b1
    .. versionchanged:: 1.5
       This is now always defined, regardless of whether the standard library
       defines :func:`select.poll` or not. Note that it may have different performance
       characteristics.
    c                 D    i | _         t                      j        | _        d S r4   )fdsr?   r@   rl   s    r   rm   zpoll.__init__   s    
 IIN			r   c                     |t           u rt          t          z  }n'd}|t          z  rt          }|t          z  r
|t          z  }t          |          }|| j        |<   dS )a  
        Register a file descriptor *fd* with the polling object.

        Future calls to the :meth:`poll`` method will then check
        whether the file descriptor has any pending I/O events. *fd* can
        be either an integer, or an object with a ``fileno()`` method that
        returns an integer. File objects implement ``fileno()``, so they
        can also be used as the argument (but remember that regular
        files are usually always ready).

        *eventmask* is an optional bitmask describing the type of events
        you want to check for, and can be a combination of the
        constants ``POLLIN``, and ``POLLOUT`` (``POLLPRI`` is not supported).
        r   N)r
   rQ   rR   rp   rq   r/   ry   )rT   r.   	eventmaskflagsr(   s        r   registerzpoll.register   sh     y(EEE6! ! 7" #" B r   c                 2    |                      ||           dS )zA
        Change the set of events being watched on *fd*.
        N)r}   )rT   r.   r{   s      r   modifyzpoll.modify  s     	b)$$$$$r   c                    g }| j         j        }| j         j        }|j        }	 | j                                        D ]\  }}	  |||          }n=# t          $ r0}	|	j        t          k    r |	                    |           Y d }	~	Hd }	~	ww xY w|
                    |           ||_        |                    ||d           n3#  |D ]*}
|
                                 |
                                 + xY w|S )NT)pass_events)r@   rA   rB   rt   ry   itemsOSErrorerrnor   rv   r5   rC   rD   rL   r6   )rT   poll_resultrF   rA   rB   
watcher_cbr.   r|   r8   exawatchers              r   _get_started_watcherszpoll._get_started_watchers   s)   Y\! *
	!X^^-- @ @	E bUmmGG   x5((33B777HHHH	 (((#) j"$????@	$ ! !    s5   C AC 
B	&B?C B		8C 0C2Nc                    t                      }|                     |          }	 ||dk     rd}n|r|dz  }|j                            |           t	          |j                  |D ]*}|                                 |                                 +S # |D ]*}|                                 |                                 +w xY w)aH  
        poll the registered fds.

        .. versionchanged:: 1.2a1
           File descriptors that are closed are reported with POLLNVAL.

        .. versionchanged:: 1.3a2
           Under libuv, interpret *timeout* values less than 0 the same as *None*,
           i.e., block. This was always the case with libev.
        Nr   g     @@rO   )ri   r   r9   rS   rb   rj   rL   r6   )rT   rP   rg   rF   r   s        r   r!   z	poll.poll:  s     --f55	!"Q;; #GG & v%GLg...&&$ ! !    !H ! !    !s   A B /Cc                 4    t          |          }| j        |= dS )z
        Unregister the *fd*.

        .. versionchanged:: 1.2a1
           Raise a `KeyError` if *fd* was not registered, like the standard
           library. Previously gevent did nothing.
        N)r/   ry   )rT   r.   r(   s      r   
unregisterzpoll.unregisterc  s     BHVr   r4   )r[   r\   r]   __doc__rm   r
   r}   r   r   r!   r   r   r   r   r!   r!      s         # # # &+ ! ! ! !:% % %  4'! '! '! '!R	 	 	 	 	r   c                     | j         d         }|                                  |r|                     dddd           d S d S )N
aggressiveepollkqueuekeventdevpoll)patch_kwargsdefault_patch_itemsremove_item)patch_requestr   s     r   _gevent_do_monkey_patchr   o  sc    +L9J%%''' 	
 	!!		
 	
 	
 	
 	
		
 	
r   r4   )2r   
__future__r   r   r   sysr    
__select__gevent.eventr   
gevent.hubr   r?   r   rd   gevent._utilr	   r
   r   r   r   platform
startswithr   rp   POLLPRIrq   POLLERRPOLLHUPro   
POLLRDNORM
POLLRDBAND
POLLWRNORM
POLLWRBAND__implements__hasattrr5   	__extra____all__r"   globals__imports__rQ   rR   r/   objectr1   ri   r!   r   r   r   r   <module>r      sv    A @ @ @ @ @ @ @ @ @ 



           1 1 1 1 1 1 ( ( ( ( ( ( % % % % % %            ") <7## -1 1 1 1 -
 








  7:v &!!!! 	I )n
$
 	l:wwyy+2024 4 4 	  ;% ;% ;% ;% ;%6 ;% ;% ;%|:0 :0 :0 :0|( ( ( ( ( ( ( (0E E E E E6 E E EP
 
 
 
 
r   