Remove unicode text prefixes.

This commit is contained in:
Felix Fontein 2025-10-05 20:34:53 +02:00
parent 1f2817fa20
commit 9fd3cedd1a
18 changed files with 75 additions and 75 deletions

View File

@ -28,11 +28,11 @@ class ActionModule(ActionBase):
result = merge_hash(result, self._execute_module(task_vars=task_vars, wrap_async=self._task.async_val))
if u'diff' in result and result[u'diff'].get(u'scrambled_diff'):
if 'diff' in result and result['diff'].get('scrambled_diff'):
# Scrambling is not done for security, but to avoid no_log screwing up the diff
diff = result[u'diff']
key = base64.b64decode(diff.pop(u'scrambled_diff'))
for k in (u'before', u'after'):
diff = result['diff']
key = base64.b64decode(diff.pop('scrambled_diff'))
for k in ('before', 'after'):
if k in diff:
diff[k] = unscramble(diff[k], key)

View File

@ -166,8 +166,8 @@ class Connection(ConnectionBase):
@staticmethod
def _sanitize_version(version):
version = re.sub(u'[^0-9a-zA-Z.]', u'', version)
version = re.sub(u'^v', u'', version)
version = re.sub('[^0-9a-zA-Z.]', '', version)
version = re.sub('^v', '', version)
return version
def _old_docker_version(self):
@ -196,8 +196,8 @@ class Connection(ConnectionBase):
cmd, cmd_output, err, returncode = self._old_docker_version()
if returncode == 0:
for line in to_text(cmd_output, errors='surrogate_or_strict').split(u'\n'):
if line.startswith(u'Server version:'): # old docker versions
for line in to_text(cmd_output, errors='surrogate_or_strict').split('\n'):
if line.startswith('Server version:'): # old docker versions
return self._sanitize_version(line.split()[2])
cmd, cmd_output, err, returncode = self._new_docker_version()
@ -218,12 +218,12 @@ class Connection(ConnectionBase):
out = to_text(out, errors='surrogate_or_strict')
if p.returncode != 0:
display.warning(u'unable to retrieve default user from docker container: %s %s' % (out, to_text(err)))
display.warning('unable to retrieve default user from docker container: %s %s' % (out, to_text(err)))
self._container_user_cache[container] = None
return None
# The default exec user is root, unless it was changed in the Dockerfile with USER
user = out.strip() or u'root'
user = out.strip() or 'root'
self._container_user_cache[container] = user
return user
@ -257,7 +257,7 @@ class Connection(ConnectionBase):
if self.get_option('working_dir') is not None:
local_cmd += [b'-w', to_bytes(self.get_option('working_dir'), errors='surrogate_or_strict')]
if self.docker_version != u'dev' and LooseVersion(self.docker_version) < LooseVersion(u'18.06'):
if self.docker_version != 'dev' and LooseVersion(self.docker_version) < LooseVersion('18.06'):
# https://github.com/docker/cli/pull/732, first appeared in release 18.06.0
raise AnsibleConnectionFailure(
'Providing the working directory requires Docker CLI version 18.06 or newer. You have Docker CLI version {0}.'
@ -302,24 +302,24 @@ class Connection(ConnectionBase):
self._set_docker_args()
self._version = self._get_docker_version()
if self._version == u'dev':
display.warning(u'Docker version number is "dev". Will assume latest version.')
if self._version != u'dev' and LooseVersion(self._version) < LooseVersion(u'1.3'):
if self._version == 'dev':
display.warning('Docker version number is "dev". Will assume latest version.')
if self._version != 'dev' and LooseVersion(self._version) < LooseVersion('1.3'):
raise AnsibleError('docker connection type requires docker 1.3 or higher')
return self._version
def _get_actual_user(self):
if self.remote_user is not None:
# An explicit user is provided
if self.docker_version == u'dev' or LooseVersion(self.docker_version) >= LooseVersion(u'1.7'):
if self.docker_version == 'dev' or LooseVersion(self.docker_version) >= LooseVersion('1.7'):
# Support for specifying the exec user was added in docker 1.7
return self.remote_user
else:
self.remote_user = None
actual_user = self._get_docker_remote_user()
if actual_user != self.get_option('remote_user'):
display.warning(u'docker {0} does not support remote_user, using container default: {1}'
.format(self.docker_version, self.actual_user or u'?'))
display.warning('docker {0} does not support remote_user, using container default: {1}'
.format(self.docker_version, self.actual_user or '?'))
return actual_user
elif self._display.verbosity > 2:
# Since we are not setting the actual_user, look it up so we have it for logging later
@ -335,8 +335,8 @@ class Connection(ConnectionBase):
if not self._connected:
self._set_conn_data()
actual_user = self._get_actual_user()
display.vvv(u"ESTABLISH DOCKER CONNECTION FOR USER: {0}".format(
actual_user or u'?'), host=self.get_option('remote_addr')
display.vvv("ESTABLISH DOCKER CONNECTION FOR USER: {0}".format(
actual_user or '?'), host=self.get_option('remote_addr')
)
self._connected = True
@ -349,7 +349,7 @@ class Connection(ConnectionBase):
local_cmd = self._build_exec_cmd([self._play_context.executable, '-c', cmd])
display.vvv(u"EXEC {0}".format(to_text(local_cmd)), host=self.get_option('remote_addr'))
display.vvv("EXEC {0}".format(to_text(local_cmd)), host=self.get_option('remote_addr'))
display.debug("opening command with Popen()")
local_cmd = [to_bytes(i, errors='surrogate_or_strict') for i in local_cmd]

View File

@ -186,8 +186,8 @@ class Connection(ConnectionBase):
super(Connection, self)._connect()
if not self._connected:
self.actual_user = self.get_option('remote_user')
display.vvv(u"ESTABLISH DOCKER CONNECTION FOR USER: {0}".format(
self.actual_user or u'?'), host=self.get_option('remote_addr')
display.vvv("ESTABLISH DOCKER CONNECTION FOR USER: {0}".format(
self.actual_user or '?'), host=self.get_option('remote_addr')
)
if self.client is None:
self.client = AnsibleDockerClient(self, min_docker_api_version=MIN_DOCKER_API)
@ -197,12 +197,12 @@ class Connection(ConnectionBase):
# Since we are not setting the actual_user, look it up so we have it for logging later
# Only do this if display verbosity is high enough that we'll need the value
# This saves overhead from calling into docker when we do not need to
display.vvv(u"Trying to determine actual user")
display.vvv("Trying to determine actual user")
result = self._call_client(lambda: self.client.get_json('/containers/{0}/json', self.get_option('remote_addr')))
if result.get('Config'):
self.actual_user = result['Config'].get('User')
if self.actual_user is not None:
display.vvv(u"Actual user is '{0}'".format(self.actual_user))
display.vvv("Actual user is '{0}'".format(self.actual_user))
def exec_command(self, cmd, in_data=None, sudoable=False):
""" Run a command on the docker host """
@ -214,7 +214,7 @@ class Connection(ConnectionBase):
do_become = self.become and self.become.expect_prompt() and sudoable
display.vvv(
u"EXEC {0}{1}{2}".format(
"EXEC {0}{1}{2}".format(
to_text(command),
', with stdin ({0} bytes)'.format(len(in_data)) if in_data is not None else '',
', with become prompt' if do_become else '',
@ -248,7 +248,7 @@ class Connection(ConnectionBase):
'wrapped in quotes to avoid them being interpreted. {1}: {2!r}'
.format(what.lower(), what, val)
)
data['Env'].append(u'{0}={1}'.format(to_text(k, errors='surrogate_or_strict'), to_text(v, errors='surrogate_or_strict')))
data['Env'].append('{0}={1}'.format(to_text(k, errors='surrogate_or_strict'), to_text(v, errors='surrogate_or_strict')))
if self.get_option('working_dir') is not None:
data['WorkingDir'] = self.get_option('working_dir')

View File

@ -76,7 +76,7 @@ class Connection(ConnectionBase):
if not self._connected:
display.vvv(
u"ESTABLISH NSENTER CONNECTION FOR USER: {0}".format(
"ESTABLISH NSENTER CONNECTION FOR USER: {0}".format(
self._play_context.remote_user
),
host=self._play_context.remote_addr,
@ -115,7 +115,7 @@ class Connection(ConnectionBase):
cmd_parts = nsenter_cmd_parts + cmd
cmd = [to_bytes(arg) for arg in cmd_parts]
display.vvv(u"EXEC {0}".format(to_text(cmd)), host=self._play_context.remote_addr)
display.vvv("EXEC {0}".format(to_text(cmd)), host=self._play_context.remote_addr)
display.debug("opening command with Popen()")
master = None
@ -204,7 +204,7 @@ class Connection(ConnectionBase):
in_path = unfrackpath(in_path, basedir=self.cwd)
out_path = unfrackpath(out_path, basedir=self.cwd)
display.vvv(u"PUT {0} to {1}".format(in_path, out_path), host=self._play_context.remote_addr)
display.vvv("PUT {0} to {1}".format(in_path, out_path), host=self._play_context.remote_addr)
try:
with open(to_bytes(in_path, errors="surrogate_or_strict"), "rb") as in_file:
in_data = in_file.read()
@ -222,7 +222,7 @@ class Connection(ConnectionBase):
try:
rc, out, err = self.exec_command(cmd=["cat", in_path])
display.vvv(u"FETCH {0} TO {1}".format(in_path, out_path), host=self._play_context.remote_addr)
display.vvv("FETCH {0} TO {1}".format(in_path, out_path), host=self._play_context.remote_addr)
if rc != 0:
raise AnsibleError("failed to transfer file to {0}: {1}".format(in_path, err))
with open(to_bytes(out_path, errors='surrogate_or_strict'), 'wb') as out_file:

View File

@ -55,15 +55,15 @@ class APIClient(
>>> import docker
>>> client = docker.APIClient(base_url='unix://var/run/docker.sock')
>>> client.version()
{u'ApiVersion': u'1.33',
u'Arch': u'amd64',
u'BuildTime': u'2017-11-19T18:46:37.000000000+00:00',
u'GitCommit': u'f4ffd2511c',
u'GoVersion': u'go1.9.2',
u'KernelVersion': u'4.14.3-1-ARCH',
u'MinAPIVersion': u'1.12',
u'Os': u'linux',
u'Version': u'17.10.0-ce'}
{'ApiVersion': '1.33',
'Arch': 'amd64',
'BuildTime': '2017-11-19T18:46:37.000000000+00:00',
'GitCommit': 'f4ffd2511c',
'GoVersion': 'go1.9.2',
'KernelVersion': '4.14.3-1-ARCH',
'MinAPIVersion': '1.12',
'Os': 'linux',
'Version': '17.10.0-ce'}
Args:
base_url (str): URL to the Docker server. For example,

View File

@ -52,7 +52,7 @@ def json_stream(stream):
return split_buffer(stream, json_splitter, json_decoder.decode)
def line_splitter(buffer, separator=u'\n'):
def line_splitter(buffer, separator='\n'):
index = buffer.find(str(separator))
if index == -1:
return None

View File

@ -491,7 +491,7 @@ def format_environment(environment):
if isinstance(value, bytes):
value = value.decode('utf-8')
return u'{key}={value}'.format(key=key, value=value)
return '{key}={value}'.format(key=key, value=value)
return [format_env(*var) for var in environment.items()]

View File

@ -35,7 +35,7 @@ def unscramble(value, key):
'''Do NOT use this for cryptographic purposes!'''
if len(key) < 1:
raise ValueError('Key must be at least one byte')
if not value.startswith(u'=S='):
if not value.startswith('=S='):
raise ValueError('Value does not start with indicator')
value = base64.b64decode(value[3:])
k = key[0]

View File

@ -93,9 +93,9 @@ def log_debug(msg, pretty_print=False):
with open('docker.log', 'a') as log_file:
if pretty_print:
log_file.write(json.dumps(msg, sort_keys=True, indent=4, separators=(',', ': ')))
log_file.write(u'\n')
log_file.write('\n')
else:
log_file.write(msg + u'\n')
log_file.write(f"{msg}\n")
class DockerBaseClass(object):

View File

@ -389,8 +389,8 @@ class DockerNetworkManager(object):
self.parameters = TaskParameters(client)
self.check_mode = self.client.check_mode
self.results = {
u'changed': False,
u'actions': []
'changed': False,
'actions': []
}
self.diff = self.client.module._diff
self.diff_tracker = DifferenceTracker()

View File

@ -121,7 +121,7 @@ stack_spec_diff:
definition.
sample: >
"stack_spec_diff":
{'test_stack_test_service': {u'TaskTemplate': {u'ContainerSpec': {delete: [u'Env']}}}}
{'test_stack_test_service': {'TaskTemplate': {'ContainerSpec': {delete: ['Env']}}}}
returned: on change
type: dict
"""

View File

@ -159,8 +159,8 @@ class DockerVolumeManager(object):
self.parameters = TaskParameters(client)
self.check_mode = self.client.check_mode
self.results = {
u'changed': False,
u'actions': []
'changed': False,
'actions': []
}
self.diff = self.client.module._diff
self.diff_tracker = DifferenceTracker()
@ -185,10 +185,10 @@ class DockerVolumeManager(object):
except APIError as e:
self.client.fail(to_native(e))
if volumes[u'Volumes'] is None:
if volumes['Volumes'] is None:
return None
for volume in volumes[u'Volumes']:
for volume in volumes['Volumes']:
if volume['Name'] == self.parameters.volume_name:
return volume

View File

@ -13,7 +13,7 @@ from ansible.utils.unsafe_proxy import (
wrap_var as _make_unsafe,
)
_RE_TEMPLATE_CHARS = re.compile(u'[{}]')
_RE_TEMPLATE_CHARS = re.compile('[{}]')
_RE_TEMPLATE_CHARS_BYTES = re.compile(b'[{}]')

View File

@ -33,12 +33,12 @@ class TestStreamAsText:
def test_stream_with_non_utf_unicode_character(self):
stream = [b'\xed\xf3\xf3']
output, = stream_as_text(stream)
assert output == u'<EFBFBD><EFBFBD><EFBFBD>'
assert output == '<EFBFBD><EFBFBD><EFBFBD>'
def test_stream_with_utf_character(self):
stream = [u'ěĝ'.encode('utf-8')]
stream = ['ěĝ'.encode('utf-8')]
output, = stream_as_text(stream)
assert output == u'ěĝ'
assert output == 'ěĝ'
class TestJsonStream:

View File

@ -176,23 +176,23 @@ class ConverVolumeBindsTest(unittest.TestCase):
assert convert_volume_binds(data) == ['/mnt/vol1:/data:rw']
def test_convert_volume_binds_unicode_bytes_input(self):
expected = [u'/mnt/지연:/unicode/박:rw']
expected = ['/mnt/지연:/unicode/박:rw']
data = {
u'/mnt/지연'.encode('utf-8'): {
'bind': u'/unicode/박'.encode('utf-8'),
'mode': u'rw'
'/mnt/지연'.encode('utf-8'): {
'bind': '/unicode/박'.encode('utf-8'),
'mode': 'rw'
}
}
assert convert_volume_binds(data) == expected
def test_convert_volume_binds_unicode_unicode_input(self):
expected = [u'/mnt/지연:/unicode/박:rw']
expected = ['/mnt/지연:/unicode/박:rw']
data = {
u'/mnt/지연': {
'bind': u'/unicode/박',
'mode': u'rw'
'/mnt/지연': {
'bind': '/unicode/박',
'mode': 'rw'
}
}
assert convert_volume_binds(data) == expected
@ -457,7 +457,7 @@ class UtilsTest(unittest.TestCase):
class SplitCommandTest(unittest.TestCase):
def test_split_command_with_unicode(self):
assert split_command(u'echo μμ') == ['echo', 'μμ']
assert split_command('echo μμ') == ['echo', 'μμ']
class FormatEnvironmentTest(unittest.TestCase):
@ -465,7 +465,7 @@ class FormatEnvironmentTest(unittest.TestCase):
env_dict = {
'ARTIST_NAME': b'\xec\x86\xa1\xec\xa7\x80\xec\x9d\x80'
}
assert format_environment(env_dict) == [u'ARTIST_NAME=송지은']
assert format_environment(env_dict) == ['ARTIST_NAME=송지은']
def test_format_env_no_value(self):
env_dict = {

View File

@ -14,9 +14,9 @@ from ansible_collections.community.docker.plugins.module_utils._scramble import
@pytest.mark.parametrize('plaintext, key, scrambled', [
(u'', b'0', '=S='),
(u'hello', b'\x00', '=S=aGVsbG8='),
(u'hello', b'\x01', '=S=aWRtbW4='),
('', b'0', '=S='),
('hello', b'\x00', '=S=aGVsbG8='),
('hello', b'\x01', '=S=aWRtbW4='),
])
def test_scramble_unscramble(plaintext, key, scrambled):
scrambled_ = scramble(plaintext, key)

View File

@ -207,7 +207,7 @@ def test_has_list_changed(docker_swarm_service):
)
assert docker_swarm_service.has_list_changed(
['sleep', '3400'],
[u'sleep', u'3600'],
['sleep', '3600'],
sort_lists=False
)

View File

@ -22,14 +22,14 @@ from ansible_collections.community.docker.plugins.plugin_utils.unsafe import (
TEST_MAKE_UNSAFE = [
(
_make_trusted(u'text'),
_make_trusted('text'),
[],
[
(),
],
),
(
_make_trusted(u'{{text}}'),
_make_trusted('{{text}}'),
[
(),
],
@ -117,7 +117,7 @@ def test_make_unsafe_idempotence():
def test_make_unsafe_dict_key():
value = {
_make_trusted(u'test'): 2,
_make_trusted('test'): 2,
}
if not SUPPORTS_DATA_TAGGING:
value[_make_trusted(b"test")] = 1
@ -127,7 +127,7 @@ def test_make_unsafe_dict_key():
assert _is_trusted(obj)
value = {
_make_trusted(u'{{test}}'): 2,
_make_trusted('{{test}}'): 2,
}
if not SUPPORTS_DATA_TAGGING:
value[_make_trusted(b"{{test}}")] = 1
@ -138,7 +138,7 @@ def test_make_unsafe_dict_key():
def test_make_unsafe_set():
value = set([_make_trusted(u'test')])
value = set([_make_trusted('test')])
if not SUPPORTS_DATA_TAGGING:
value.add(_make_trusted(b"test"))
unsafe_value = make_unsafe(value)
@ -146,7 +146,7 @@ def test_make_unsafe_set():
for obj in unsafe_value:
assert _is_trusted(obj)
value = set([_make_trusted(u'{{test}}')])
value = set([_make_trusted('{{test}}')])
if not SUPPORTS_DATA_TAGGING:
value.add(_make_trusted(b"{{test}}"))
unsafe_value = make_unsafe(value)