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&