mirror of
https://github.com/kennethreitz/requests3.git
synced 2026-06-05 23:10:16 +00:00
b5704a63ca
Further, fix the Makefile to pull urllib3 from the release branch. git-describe works based on the most recent commit but all of the nearest commits in the graph for urllib3 are on the release branch (since the release branch is never merged back to master).
41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
from .selectors import (
|
|
HAS_SELECT,
|
|
DefaultSelector,
|
|
EVENT_READ,
|
|
EVENT_WRITE
|
|
)
|
|
|
|
|
|
def _wait_for_io_events(socks, events, timeout=None):
|
|
""" Waits for IO events to be available from a list of sockets
|
|
or optionally a single socket if passed in. Returns a list of
|
|
sockets that can be interacted with immediately. """
|
|
if not HAS_SELECT:
|
|
raise ValueError('Platform does not have a selector')
|
|
if not isinstance(socks, list):
|
|
# Probably just a single socket.
|
|
if hasattr(socks, "fileno"):
|
|
socks = [socks]
|
|
# Otherwise it might be a non-list iterable.
|
|
else:
|
|
socks = list(socks)
|
|
with DefaultSelector() as selector:
|
|
for sock in socks:
|
|
selector.register(sock, events)
|
|
return [key[0].fileobj for key in
|
|
selector.select(timeout) if key[1] & events]
|
|
|
|
|
|
def wait_for_read(socks, timeout=None):
|
|
""" Waits for reading to be available from a list of sockets
|
|
or optionally a single socket if passed in. Returns a list of
|
|
sockets that can be read from immediately. """
|
|
return _wait_for_io_events(socks, EVENT_READ, timeout)
|
|
|
|
|
|
def wait_for_write(socks, timeout=None):
|
|
""" Waits for writing to be available from a list of sockets
|
|
or optionally a single socket if passed in. Returns a list of
|
|
sockets that can be written to immediately. """
|
|
return _wait_for_io_events(socks, EVENT_WRITE, timeout)
|