3 υ_R@szddlZddlZddlZddlZddlZddlZddlmZmZy ej Z Wne e fk rhejZ YnXd(Z d)Z dZeZdaGdddeZddZejd*krd d Znd d ZedddddgZGdddeZGdddeZeedrGdddeZeedrGdddeZeedr:GdddeZeed rVGd!d"d"eZeedsfd#Zd$d%Zd&d'Z dS)+N) namedtupleMappingTcs,eZdZfddZddZddZZS) SelectorErrorcstt|j||_dS)N)superr__init__errno)selferrcode) __class__/usr/lib/python3.6/selectors.pyrszSelectorError.__init__cCs dj|jS)Nz)formatr)r r r r __repr__"szSelectorError.__repr__cCs|jS)N)r)r r r r __str__%szSelectorError.__str__)__name__ __module__ __qualname__rrr __classcell__r r )r r rs rc Csdt|tr|}n:yt|j}Wn(tttfk rHtdj|YnX|dkr`tdj||S)zl Return a file descriptor from a file object. If given an integer will simply return that integer back. zInvalid file object: {0!r}rzInvalid file descriptor: {0}) isinstanceintfilenoAttributeError TypeError ValueErrorr)fileobjfdr r r _fileobj_to_fd)s rcOsVy |||Stttjfk rP}z"d}t|dr8|j}t|WYdd}~XnXdS)z This is the short-circuit version of the below logic because in Python 3.5+ all system calls automatically restart and recalculate their timeouts. Nr)OSErrorIOErrorselecterrorhasattrrr)func_argskwargser r r r _syscall_wrapper;s  r*c OsR|jdd}|dkrd}d}n t|}|dkr4d}n t|}t|}|rZd|krZtdt}x|tkrLy|||}Wq`tttj fk rH}zd}t |dr|j }nt |dr|j d}|t j kpt t d o|t jk} | r&|dk r$t} | |krtt jd |r$d|kr$|| |d<w`|r6t|nWYdd}~Xq`Xq`W|S) z Wrapper function for syscalls that could fail due to EINTR. All functions should be retried if there is time left in the timeout in accordance with PEP 475. timeoutNFgz4Timeout must be in args or kwargs to be recalculatedrr'rWSAEINTR)r)getfloat monotoniclistr_SYSCALL_SENTINELr r!r"r#r$rr'ZEINTRr,Z ETIMEDOUTr) r%Zrecalc_timeoutr'r(r+Zexpiresresultr)r Z is_interruptZ current_timer r r r*GsJ               SelectorKeyrreventsdatac@s0eZdZdZddZddZddZdd Zd S) _SelectorMappingz* Mapping of file objects to selector keys cCs ||_dS)N) _selector)r Zselectorr r r rsz_SelectorMapping.__init__cCs t|jjS)N)lenr7 _fd_to_key)r r r r __len__sz_SelectorMapping.__len__c Cs@y|jj|}|jj|Stk r:tdj|YnXdS)Nz{0!r} is not registered.)r7_fileobj_lookupr9KeyErrorr)r rrr r r __getitem__s   z_SelectorMapping.__getitem__cCs t|jjS)N)iterr7r9)r r r r __iter__sz_SelectorMapping.__iter__N)rrr__doc__rr:r=r?r r r r r6s r6c@sveZdZdZddZddZdddZd d Zdd d Zdd dZ ddZ ddZ ddZ ddZ ddZddZdS) BaseSelectora/ Abstract Selector class A selector supports registering file objects to be monitored for specific I/O events. A file object is a file descriptor or any object with a `fileno()` method. An arbitrary object can be attached to the file object which can be used for example to store context info, a callback, etc. A selector can use various implementations (select(), poll(), epoll(), and kqueue()) depending on the platform. The 'DefaultSelector' class uses the most efficient implementation for the current platform. cCsi|_t||_dS)N)r9r6_map)r r r r rszBaseSelector.__init__c CsHyt|Stk rBx"|jjD]}|j|kr$|jSq$WYnXdS)aa Return a file descriptor from a file object. This wraps _fileobj_to_fd() to do an exhaustive search in case the object is invalid but we still have it in our map. Used by unregister() so we can unregister an object that was previously registered even if it is closed. It is also used by _SelectorMapping N)rrr9valuesrr)r rkeyr r r r;s  zBaseSelector._fileobj_lookupNcCsd| s|ttB@r"tdj|t||j|||}|j|jkrTtdj||j||j|j<|S)z8 Register a file object for a set of events to monitor. zInvalid events: {0!r}z${0!r} (FD {1}) is already registered) EVENT_READ EVENT_WRITErrr3r;rr9r<)r rr4r5rDr r r registers   zBaseSelector.registercCsy|jj|j|}Wntk r8tdj|Ynptjk r}zR|jtjkrZn| j|kr| || j@f|| j<q>|| jd} | || B| j@f|| j<q>Wt|jS)NrTr)r`r8r9r*rurxZidentfilterr"rwrEryrFrTrr4r0rC) r r+rrZ ready_fdsZ kevent_listrvrrhr4rDZ old_eventsr r r r"s*        zKqueueSelector.selectcs|jjtt|jdS)N)rurOrrt)r )r r r rOs zKqueueSelector.close)N)N) rrrr@rrrGrJr"rOrr r )r r rts   rtFcCsZy0|dkrtj}|jdntt|jdSttfk rT}zdSd}~XnXdS)a  Checks that select structs can be allocated by the underlying operating system, not just advertised by the select module. We don't check select() because we'll be hopeful that most platforms that don't have it available will not advertise it. (ie: GAE) rcrTFN)r"rcgetattrrOr r)structpr)r r r _can_allocates rcCsPtdkrJtdrtan4tdr$tan&tdr2tanttdrBtantdtS)z This function serves as a first call for DefaultSelector to detect if the select module is being monkey-patched incorrectly by eventlet, greenlet, and preserve proper behavior. Nrsrmrcr"z!Platform does not have a selector) _DEFAULT_SELECTORrrtrnrdr$r"rWrr r r r DefaultSelector5s rrrz)rr)!rrir"rIsysZtime collectionsrrr/r ImportErrorrErFZ HAS_SELECTobjectr1r Exceptionrr version_infor*r3r6rAr$rWrdrnrtrrr r r r sH     8 1 4 B R