3 W@s\dZddlmZddlmZddlmZddlmZddlZddlmZGdd d e Z dS) z pyudev._os.poll =============== Operating system interface for pyudev. .. moduleauthor:: Sebastian Wiesner )absolute_import)division)print_function)unicode_literalsN)eintr_retry_callc@sPeZdZdZejejdZeddZ e ddZ ddZ dd d Z d d Zd S)PollzwA poll object. This object essentially provides a more convenient interface around :class:`select.poll`. )rwcCs ||@dkS)Nr)eventseventr r /usr/lib/python3.6/poll.py _has_event1szPoll._has_eventcGsNttj}x:|D]2\}}|jj|}|s6tdj||j||qW||S)aGListen 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})rselectpoll_EVENT_TO_MASKget ValueErrorformatregister)clsr notifierfdr maskr r r for_events5s  zPoll.for_eventscCs ||_dS)zCreate a poll object for the given ``notifier``. ``notifier`` is the :class:`select.poll` object wrapped by the new poll object. N) _notifier)selfrr r r __init__Gsz Poll.__init__NcCst|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_eventsrrr)rZtimeoutr r r rPsz Poll.pollccsx|D]\}}|j|tjr,tdj|n|j|tjrHtdj||j|tjr`|dfV|j|tjrx|dfV|j|tjr|dfVqWdS)zParse ``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}rr hN) rrZPOLLNVALIOErrorrZPOLLERRPOLLINPOLLOUTZPOLLHUP)rr rZ event_maskr r r rcs   zPoll._parse_events)N)__name__ __module__ __qualname____doc__rr"r#r staticmethodr classmethodrrrrr r r r r&s    r) r'Z __future__rrrrrZ pyudev._utilrobjectrr r r r s