mirror of
https://github.com/python/cpython.git
synced 2025-08-27 12:16:04 +00:00
bpo-32166: Drop Python 3.4 code from asyncio (#4612)
* Drop Python 3.4 code from asyncio * Fix notes * Add missing imports * Restore comment * Resort imports * Drop Python 3.4-3.5 specific code * Drop redunant check * Fix tests * Restore _COROUTINE_TYPES order * Remove useless code
This commit is contained in:
parent
5d39e04290
commit
cc83920ad2
3 changed files with 25 additions and 131 deletions
|
@ -38,13 +38,6 @@ def _sighandler_noop(signum, frame):
|
|||
pass
|
||||
|
||||
|
||||
try:
|
||||
_fspath = os.fspath
|
||||
except AttributeError:
|
||||
# Python 3.5 or earlier
|
||||
_fspath = lambda path: path
|
||||
|
||||
|
||||
class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
||||
"""Unix event loop.
|
||||
|
||||
|
@ -74,7 +67,7 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
|||
Raise RuntimeError if there is a problem setting up the handler.
|
||||
"""
|
||||
if (coroutines.iscoroutine(callback)
|
||||
or coroutines.iscoroutinefunction(callback)):
|
||||
or coroutines.iscoroutinefunction(callback)):
|
||||
raise TypeError("coroutines cannot be used "
|
||||
"with add_signal_handler()")
|
||||
self._check_signal(sig)
|
||||
|
@ -226,7 +219,7 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
|||
raise ValueError(
|
||||
'path and sock can not be specified at the same time')
|
||||
|
||||
path = _fspath(path)
|
||||
path = os.fspath(path)
|
||||
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
|
||||
try:
|
||||
sock.setblocking(False)
|
||||
|
@ -260,7 +253,7 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
|||
raise ValueError(
|
||||
'path and sock can not be specified at the same time')
|
||||
|
||||
path = _fspath(path)
|
||||
path = os.fspath(path)
|
||||
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||
|
||||
# Check for abstract socket. `str` and `bytes` paths are supported.
|
||||
|
@ -272,7 +265,8 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
|||
pass
|
||||
except OSError as err:
|
||||
# Directory may have permissions only to create socket.
|
||||
logger.error('Unable to check or remove stale UNIX socket %r: %r', path, err)
|
||||
logger.error('Unable to check or remove stale UNIX socket '
|
||||
'%r: %r', path, err)
|
||||
|
||||
try:
|
||||
sock.bind(path)
|
||||
|
@ -306,18 +300,6 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
|
|||
return server
|
||||
|
||||
|
||||
if hasattr(os, 'set_blocking'):
|
||||
def _set_nonblocking(fd):
|
||||
os.set_blocking(fd, False)
|
||||
else:
|
||||
import fcntl
|
||||
|
||||
def _set_nonblocking(fd):
|
||||
flags = fcntl.fcntl(fd, fcntl.F_GETFL)
|
||||
flags = flags | os.O_NONBLOCK
|
||||
fcntl.fcntl(fd, fcntl.F_SETFL, flags)
|
||||
|
||||
|
||||
class _UnixReadPipeTransport(transports.ReadTransport):
|
||||
|
||||
max_size = 256 * 1024 # max bytes we read in one event loop iteration
|
||||
|
@ -340,7 +322,7 @@ class _UnixReadPipeTransport(transports.ReadTransport):
|
|||
self._protocol = None
|
||||
raise ValueError("Pipe transport is for pipes/sockets only.")
|
||||
|
||||
_set_nonblocking(self._fileno)
|
||||
os.set_blocking(self._fileno, False)
|
||||
|
||||
self._loop.call_soon(self._protocol.connection_made, self)
|
||||
# only start reading when connection_made() has been called
|
||||
|
@ -469,7 +451,7 @@ class _UnixWritePipeTransport(transports._FlowControlMixin,
|
|||
raise ValueError("Pipe transport is only for "
|
||||
"pipes, sockets and character devices")
|
||||
|
||||
_set_nonblocking(self._fileno)
|
||||
os.set_blocking(self._fileno, False)
|
||||
self._loop.call_soon(self._protocol.connection_made, self)
|
||||
|
||||
# On AIX, the reader trick (to be notified when the read end of the
|
||||
|
@ -648,22 +630,6 @@ class _UnixWritePipeTransport(transports._FlowControlMixin,
|
|||
self._loop = None
|
||||
|
||||
|
||||
if hasattr(os, 'set_inheritable'):
|
||||
# Python 3.4 and newer
|
||||
_set_inheritable = os.set_inheritable
|
||||
else:
|
||||
import fcntl
|
||||
|
||||
def _set_inheritable(fd, inheritable):
|
||||
cloexec_flag = getattr(fcntl, 'FD_CLOEXEC', 1)
|
||||
|
||||
old = fcntl.fcntl(fd, fcntl.F_GETFD)
|
||||
if not inheritable:
|
||||
fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag)
|
||||
else:
|
||||
fcntl.fcntl(fd, fcntl.F_SETFD, old & ~cloexec_flag)
|
||||
|
||||
|
||||
class _UnixSubprocessTransport(base_subprocess.BaseSubprocessTransport):
|
||||
|
||||
def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs):
|
||||
|
@ -675,12 +641,6 @@ class _UnixSubprocessTransport(base_subprocess.BaseSubprocessTransport):
|
|||
# other end). Notably this is needed on AIX, and works
|
||||
# just fine on other platforms.
|
||||
stdin, stdin_w = socket.socketpair()
|
||||
|
||||
# Mark the write end of the stdin pipe as non-inheritable,
|
||||
# needed by close_fds=False on Python 3.3 and older
|
||||
# (Python 3.4 implements the PEP 446, socketpair returns
|
||||
# non-inheritable sockets)
|
||||
_set_inheritable(stdin_w.fileno(), False)
|
||||
self._proc = subprocess.Popen(
|
||||
args, shell=shell, stdin=stdin, stdout=stdout, stderr=stderr,
|
||||
universal_newlines=False, bufsize=bufsize, **kwargs)
|
||||
|
@ -1035,8 +995,8 @@ class _UnixDefaultEventLoopPolicy(events.BaseDefaultEventLoopPolicy):
|
|||
|
||||
super().set_event_loop(loop)
|
||||
|
||||
if self._watcher is not None and \
|
||||
isinstance(threading.current_thread(), threading._MainThread):
|
||||
if (self._watcher is not None and
|
||||
isinstance(threading.current_thread(), threading._MainThread)):
|
||||
self._watcher.attach_loop(loop)
|
||||
|
||||
def get_child_watcher(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue