mirror of
https://github.com/ansible-collections/community.docker.git
synced 2025-12-15 19:42:06 +00:00
selectors is now part of stdlib. (#1166)
This commit is contained in:
parent
c75aa5dd64
commit
17e30adb93
@ -9,6 +9,7 @@ from __future__ import annotations
|
||||
|
||||
import os
|
||||
import os.path
|
||||
import selectors
|
||||
import socket as pysocket
|
||||
import struct
|
||||
|
||||
@ -26,10 +27,9 @@ PARAMIKO_POLL_TIMEOUT = 0.01 # 10 milliseconds
|
||||
|
||||
|
||||
class DockerSocketHandlerBase:
|
||||
def __init__(self, sock, selectors, log=None):
|
||||
def __init__(self, sock, log=None):
|
||||
make_unblocking(sock)
|
||||
|
||||
self._selectors = selectors
|
||||
if log is not None:
|
||||
self._log = log
|
||||
else:
|
||||
@ -50,8 +50,8 @@ class DockerSocketHandlerBase:
|
||||
self._current_missing = 0
|
||||
self._current_buffer = b""
|
||||
|
||||
self._selector = self._selectors.DefaultSelector()
|
||||
self._selector.register(self._sock, self._selectors.EVENT_READ)
|
||||
self._selector = selectors.DefaultSelector()
|
||||
self._selector.register(self._sock, selectors.EVENT_READ)
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
@ -132,10 +132,10 @@ class DockerSocketHandlerBase:
|
||||
self._log(f"wrote {written} bytes, {len(self._write_buffer)} are left")
|
||||
if len(self._write_buffer) > 0:
|
||||
self._selector.modify(
|
||||
self._sock, self._selectors.EVENT_READ | self._selectors.EVENT_WRITE
|
||||
self._sock, selectors.EVENT_READ | selectors.EVENT_WRITE
|
||||
)
|
||||
else:
|
||||
self._selector.modify(self._sock, self._selectors.EVENT_READ)
|
||||
self._selector.modify(self._sock, selectors.EVENT_READ)
|
||||
self._handle_end_of_writing()
|
||||
|
||||
def select(self, timeout=None, _internal_recursion=False):
|
||||
@ -163,12 +163,12 @@ class DockerSocketHandlerBase:
|
||||
events = self._selector.select(timeout)
|
||||
for key, event in events:
|
||||
if key.fileobj == self._sock:
|
||||
ev_read = event & self._selectors.EVENT_READ != 0
|
||||
ev_write = event & self._selectors.EVENT_WRITE != 0
|
||||
ev_read = event & selectors.EVENT_READ != 0
|
||||
ev_write = event & selectors.EVENT_WRITE != 0
|
||||
self._log(f"select event read:{ev_read} write:{ev_write}")
|
||||
if event & self._selectors.EVENT_READ != 0:
|
||||
if event & selectors.EVENT_READ != 0:
|
||||
self._read()
|
||||
if event & self._selectors.EVENT_WRITE != 0:
|
||||
if event & selectors.EVENT_WRITE != 0:
|
||||
self._write()
|
||||
result = len(events)
|
||||
if self._paramiko_read_workaround and len(self._write_buffer) > 0:
|
||||
@ -210,5 +210,5 @@ class DockerSocketHandlerBase:
|
||||
|
||||
|
||||
class DockerSocketHandlerModule(DockerSocketHandlerBase):
|
||||
def __init__(self, sock, module, selectors):
|
||||
super().__init__(sock, selectors, module.debug)
|
||||
def __init__(self, sock, module):
|
||||
super().__init__(sock, module.debug)
|
||||
|
||||
@ -11,9 +11,10 @@ import fcntl
|
||||
import os
|
||||
import os.path
|
||||
import socket as pysocket
|
||||
import typing as t
|
||||
|
||||
|
||||
def make_file_unblocking(file):
|
||||
def make_file_unblocking(file) -> None:
|
||||
fcntl.fcntl(
|
||||
file.fileno(),
|
||||
fcntl.F_SETFL,
|
||||
@ -21,7 +22,7 @@ def make_file_unblocking(file):
|
||||
)
|
||||
|
||||
|
||||
def make_file_blocking(file):
|
||||
def make_file_blocking(file) -> None:
|
||||
fcntl.fcntl(
|
||||
file.fileno(),
|
||||
fcntl.F_SETFL,
|
||||
@ -29,7 +30,7 @@ def make_file_blocking(file):
|
||||
)
|
||||
|
||||
|
||||
def make_unblocking(sock):
|
||||
def make_unblocking(sock) -> None:
|
||||
if hasattr(sock, "_sock"):
|
||||
sock._sock.setblocking(0)
|
||||
elif hasattr(sock, "setblocking"):
|
||||
@ -38,11 +39,11 @@ def make_unblocking(sock):
|
||||
make_file_unblocking(sock)
|
||||
|
||||
|
||||
def _empty_writer(msg):
|
||||
def _empty_writer(msg: str) -> None:
|
||||
pass
|
||||
|
||||
|
||||
def shutdown_writing(sock, log=_empty_writer):
|
||||
def shutdown_writing(sock, log: t.Callable[[str], None] = _empty_writer) -> None:
|
||||
# FIXME: This does **not work with SSLSocket**! Apparently SSLSocket does not allow to send
|
||||
# a close_notify TLS alert without completely shutting down the connection.
|
||||
# Calling sock.shutdown(pysocket.SHUT_WR) simply turns of TLS encryption and from that
|
||||
@ -62,7 +63,7 @@ def shutdown_writing(sock, log=_empty_writer):
|
||||
log("No idea how to signal end of writing")
|
||||
|
||||
|
||||
def write_to_socket(sock, data):
|
||||
def write_to_socket(sock, data: bytes) -> None:
|
||||
if hasattr(sock, "_send_until_done"):
|
||||
# WrappedSocket (urllib3/contrib/pyopenssl) does not have `send`, but
|
||||
# only `sendall`, which uses `_send_until_done` under the hood.
|
||||
|
||||
@ -163,7 +163,6 @@ exec_id:
|
||||
version_added: 2.1.0
|
||||
"""
|
||||
|
||||
import selectors
|
||||
import shlex
|
||||
import traceback
|
||||
|
||||
@ -276,7 +275,7 @@ def main():
|
||||
)
|
||||
try:
|
||||
with DockerSocketHandlerModule(
|
||||
exec_socket, client.module, selectors
|
||||
exec_socket, client.module
|
||||
) as exec_socket_handler:
|
||||
if stdin:
|
||||
exec_socket_handler.write(to_bytes(stdin))
|
||||
|
||||
@ -7,8 +7,6 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import selectors
|
||||
|
||||
from ansible_collections.community.docker.plugins.module_utils._socket_handler import (
|
||||
DockerSocketHandlerBase,
|
||||
)
|
||||
@ -16,6 +14,4 @@ from ansible_collections.community.docker.plugins.module_utils._socket_handler i
|
||||
|
||||
class DockerSocketHandler(DockerSocketHandlerBase):
|
||||
def __init__(self, display, sock, log=None, container=None):
|
||||
super().__init__(
|
||||
sock, selectors, log=lambda msg: display.vvvv(msg, host=container)
|
||||
)
|
||||
super().__init__(sock, log=lambda msg: display.vvvv(msg, host=container))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user