a XC?hPL ã @ s¢ d Z ddlmZmZ ddlmZ ddlmZ ddlZddl Z ddl Z dZdZdd „ Z ed g d¢ƒZde_ e jd kr’dej_ dej_ dej_ dej_ G dd„ deƒZG dd„ ded�ZG dd„ deƒZG dd„ deƒZG dd„ deƒZee dƒrþG dd„ deƒZee d ƒ�rG d!d"„ d"eƒZee d#ƒ�r6G d$d%„ d%eƒZee d&ƒ�rRG d'd(„ d(eƒZd)d*„ Zed&ƒ�rjeZn4ed ƒ�rzeZn$ed#ƒ�rŠeZnedƒ�ršeZneZdS )+z|Selectors module. This module allows high-level and efficient I/O multiplexing, built upon the `select` module primitives. é )ÚABCMetaÚabstractmethod)Ú namedtuple)ÚMappingNé é c C sd t | tƒr| }n:zt| ¡ ƒ}W n( tttfyH td | ¡ƒd‚Y n0 |dk r`td |¡ƒ‚|S )zÕReturn a file descriptor from a file object. Parameters: fileobj -- file object or file descriptor Returns: corresponding file descriptor Raises: ValueError if the object is invalid zInvalid file object: {!r}Nr zInvalid file descriptor: {})Ú isinstanceÚintÚfilenoÚAttributeErrorÚ TypeErrorÚ ValueErrorÚformat)ÚfileobjÚfd© r ú./opt/alt/python39/lib64/python3.9/selectors.pyÚ_fileobj_to_fd s ÿÿr ÚSelectorKey)r r ÚeventsÚdatazŸSelectorKey(fileobj, fd, events, data) Object used to associate a file object to its backing file descriptor, selected event mask, and attached data. )é é zFile object registered.zUnderlying file descriptor.z3Events that must be waited for on this file object.zzOptional opaque data associated to this file object. For example, this could be used to store a per-client session ID.c @ s0 e Zd ZdZdd„ Zdd„ Zdd„ Zdd „ Zd S )Ú_SelectorMappingz)Mapping of file objects to selector keys.c C s || _ d S ©N)Ú _selector)ÚselfÚselectorr r r Ú__init__@ s z_SelectorMapping.__init__c C s t | jjƒS r )Úlenr Ú _fd_to_key©r r r r Ú__len__C s z_SelectorMapping.__len__c C sB z| j |¡}| j j| W S ty< td |¡ƒd ‚Y n0 d S ©Nú{!r} is not registered)r Ú_fileobj_lookupr ÚKeyErrorr )r r r r r r Ú__getitem__F s z_SelectorMapping.__getitem__c C s t | jjƒS r )Úiterr r r! r r r Ú__iter__M s z_SelectorMapping.__iter__N)Ú__name__Ú __module__Ú__qualname__Ú__doc__r r" r' r) r r r r r = s r c @ sn e Zd ZdZeddd„ƒZedd„ ƒZddd„Zedd d „ƒZdd„ Z d d„ Z edd„ ƒZdd„ Zdd„ Z dS )ÚBaseSelectora- Selector abstract base 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 information, a callback, etc. A selector can use various implementations (select(), poll(), epoll()...) depending on the platform. The default `Selector` class uses the most efficient implementation on the current platform. Nc C s t ‚dS )a3 Register a file object. Parameters: fileobj -- file object or file descriptor events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) data -- attached data Returns: SelectorKey instance Raises: ValueError if events is invalid KeyError if fileobj is already registered OSError if fileobj is closed or otherwise is unacceptable to the underlying system call (if a system call is made) Note: OSError may or may not be raised N©ÚNotImplementedError©r r r r r r r Úregister` s zBaseSelector.registerc C s t ‚dS )aj Unregister a file object. Parameters: fileobj -- file object or file descriptor Returns: SelectorKey instance Raises: KeyError if fileobj is not registered Note: If fileobj is registered but has since been closed this does *not* raise OSError (even if the wrapped syscall does) Nr/ )r r r r r Ú unregisterw s zBaseSelector.unregisterc C s | |¡ | |||¡S )ay Change a registered file object monitored events or attached data. Parameters: fileobj -- file object or file descriptor events -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE) data -- attached data Returns: SelectorKey instance Raises: Anything that unregister() or register() raises )r3 r2 r1 r r r ÚmodifyŠ s zBaseSelector.modifyc C s t ‚dS )aq Perform the actual selection, until some monitored file objects are ready or a timeout expires. Parameters: timeout -- if timeout > 0, this specifies the maximum wait time, in seconds if timeout <= 0, the select() call won't block, and will report the currently ready file objects if timeout is None, select() will block until a monitored file object becomes ready Returns: list of (key, events) for ready file objects `events` is a bitwise mask of EVENT_READ|EVENT_WRITE Nr/ )r Útimeoutr r r Úselect› s zBaseSelector.selectc C s dS )zmClose the selector. This must be called to make sure that any underlying resource is freed. Nr r! r r r Úclose® s zBaseSelector.closec C sJ | ¡ }|du rtdƒ‚z || W S tyD td |¡ƒd‚Y n0 dS )zzReturn the key associated to a registered file object. Returns: SelectorKey for this file object NzSelector is closedr$ )Úget_mapÚRuntimeErrorr&