shell bypass 403
3
�W � @ s\ d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlZddlmZ G dd � d e �Z
dS )
z�
pyudev._os.poll
===============
Operating system interface for pyudev.
.. moduleauthor:: Sebastian Wiesner <lunaryorn@gmail.com>
� )�absolute_import)�division)�print_function)�unicode_literalsN)�eintr_retry_callc @ sP e Zd ZdZejejd�Zedd� �Z e
dd� �Zdd� Zdd
d�Z
dd
� Zd S )�PollzwA poll object.
This object essentially provides a more convenient interface around
:class:`select.poll`.
)�r�wc C s | |@ dkS )Nr � )�events�eventr
r
�/usr/lib/python3.6/poll.py�
_has_event1 s zPoll._has_eventc G sN t tj�}x:|D ]2\}}| jj|�}|s6tdj|���|j||� qW | |�S )aG Listen for ``events``.
``events`` is a list of ``(fd, event)`` pairs, where ``fd`` is a file
descriptor or file object and ``event`` either ``'r'`` or ``'w'``. If
``r``, listen for whether that is ready to be read. If ``w``, listen
for whether the channel is ready to be written to.
zUnknown event type: {0!r})r �select�poll�_EVENT_TO_MASK�get�
ValueError�format�register)�clsr �notifier�fdr �maskr
r
r
�
for_events5 s
zPoll.for_eventsc C s
|| _ dS )z�Create a poll object for the given ``notifier``.
``notifier`` is the :class:`select.poll` object wrapped by the new poll
object.
N)� _notifier)�selfr r
r
r
�__init__G s z
Poll.__init__Nc C s t | jt| jj|���S )a{ Poll for events.
``timeout`` is an integer specifying how long to wait for events (in
milliseconds). If omitted, ``None`` or negative, wait until an event
occurs.
Return a list of all events that occurred before ``timeout``, where
each event is a pair ``(fd, event)``. ``fd`` is the integral file
descriptor, and ``event`` a string indicating the event type. If
``'r'``, there is data to read from ``fd``. If ``'w'``, ``fd`` is
writable without blocking now. If ``'h'``, the file descriptor was
hung up (i.e. the remote side of a pipe was closed).
)�list�
_parse_eventsr r r )r Ztimeoutr
r
r
r P s z Poll.pollc c s� x�|D ]�\}}| j |tj�r,tdj|���n| j |tj�rHtdj|���| j |tj�r`|dfV | j |tj�rx|dfV | j |tj�r|dfV qW dS )z�Parse ``events``.
``events`` is a list of events as returned by
:meth:`select.poll.poll()`.
Yield all parsed events.
zFile descriptor not open: {0!r}zError while polling fd: {0!r}r r �hN) r r ZPOLLNVAL�IOErrorr ZPOLLERR�POLLIN�POLLOUTZPOLLHUP)r r r Z
event_maskr
r
r
r c s
zPoll._parse_events)N)�__name__�
__module__�__qualname__�__doc__r r"