mirror of
https://github.com/ansible-collections/community.docker.git
synced 2025-12-15 19:42:06 +00:00
* Move licenses to LICENSES/, use SPDX-License-Identifier, mention all licenses in galaxy.yml. * ignore.txt lines cannot be empty or contain only a comment. * Cleanup. * This particular __init__.py seems to be crucial. * Try extra newline. * Markdown comments are a real mess. I hope this won't break Galaxy... * More licenses. * Add sanity test. * Skip some files, lint. * Make sure there is a copyright line everywhere. * Also check for copyright line in sanity tests. * Remove colon after 'Copyright'. * Normalize lint script. * Avoid colon after 'Copyright' in lint script. * Improve license checker. * Update README.md Co-authored-by: Maxwell G <9920591+gotmax23@users.noreply.github.com> * Remove superfluous space. * Referencing target instead of symlink Co-authored-by: Maxwell G <9920591+gotmax23@users.noreply.github.com>
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
# Copyright (c) 2019-2021, Felix Fontein <felix@fontein.de>
|
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
__metaclass__ = type
|
|
|
|
|
|
import fcntl
|
|
import os
|
|
import os.path
|
|
import socket as pysocket
|
|
|
|
from ansible.module_utils.six import PY2
|
|
|
|
|
|
def make_file_unblocking(file):
|
|
fcntl.fcntl(file.fileno(), fcntl.F_SETFL, fcntl.fcntl(file.fileno(), fcntl.F_GETFL) | os.O_NONBLOCK)
|
|
|
|
|
|
def make_file_blocking(file):
|
|
fcntl.fcntl(file.fileno(), fcntl.F_SETFL, fcntl.fcntl(file.fileno(), fcntl.F_GETFL) & ~os.O_NONBLOCK)
|
|
|
|
|
|
def make_unblocking(sock):
|
|
if hasattr(sock, '_sock'):
|
|
sock._sock.setblocking(0)
|
|
elif hasattr(sock, 'setblocking'):
|
|
sock.setblocking(0)
|
|
else:
|
|
make_file_unblocking(sock)
|
|
|
|
|
|
def _empty_writer(msg):
|
|
pass
|
|
|
|
|
|
def shutdown_writing(sock, log=_empty_writer):
|
|
if hasattr(sock, 'shutdown_write'):
|
|
sock.shutdown_write()
|
|
elif hasattr(sock, 'shutdown'):
|
|
try:
|
|
sock.shutdown(pysocket.SHUT_WR)
|
|
except TypeError as e:
|
|
# probably: "TypeError: shutdown() takes 1 positional argument but 2 were given"
|
|
log('Shutting down for writing not possible; trying shutdown instead: {0}'.format(e))
|
|
sock.shutdown()
|
|
elif not PY2 and isinstance(sock, getattr(pysocket, 'SocketIO')):
|
|
sock._sock.shutdown(pysocket.SHUT_WR)
|
|
else:
|
|
log('No idea how to signal end of writing')
|
|
|
|
|
|
def write_to_socket(sock, data):
|
|
if hasattr(sock, '_send_until_done'):
|
|
# WrappedSocket (urllib3/contrib/pyopenssl) doesn't have `send`, but
|
|
# only `sendall`, which uses `_send_until_done` under the hood.
|
|
return sock._send_until_done(data)
|
|
elif hasattr(sock, 'send'):
|
|
return sock.send(data)
|
|
else:
|
|
return os.write(sock.fileno(), data)
|