From f5c2c8b9a23aa97c83dbaa364c31a62921fec174 Mon Sep 17 00:00:00 2001 From: Alexei Znamensky <103110+russoz@users.noreply.github.com> Date: Thu, 13 Nov 2025 10:38:29 +1300 Subject: [PATCH] replace redundant to_native()/to_text() occurrences, batch 7 (#11112) * replace redundant to_native()/to_text() occurrences, batch 7 * add changelog frag * made changes per review --- changelogs/fragments/11112-tonative-7.yml | 15 ++++++++++++++ plugins/module_utils/csv.py | 2 +- plugins/module_utils/deps.py | 3 +-- plugins/module_utils/gandi_livedns_api.py | 3 +-- plugins/module_utils/ibm_sa_utils.py | 3 +-- .../identity/keycloak/keycloak.py | 20 +++++++++---------- plugins/module_utils/ipa.py | 6 +++--- plugins/module_utils/ldap.py | 3 +-- plugins/module_utils/lxd.py | 2 -- plugins/module_utils/mh/exceptions.py | 4 +--- plugins/module_utils/ocapi_utils.py | 4 ++-- plugins/module_utils/oneview.py | 2 +- plugins/module_utils/redfish_utils.py | 6 +++--- .../module_utils/source_control/bitbucket.py | 3 +-- plugins/module_utils/utm_utils.py | 3 +-- 15 files changed, 41 insertions(+), 38 deletions(-) create mode 100644 changelogs/fragments/11112-tonative-7.yml diff --git a/changelogs/fragments/11112-tonative-7.yml b/changelogs/fragments/11112-tonative-7.yml new file mode 100644 index 0000000000..6a54795b00 --- /dev/null +++ b/changelogs/fragments/11112-tonative-7.yml @@ -0,0 +1,15 @@ +minor_changes: + - csv module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - deps module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - gandi_livedns_api module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - ibm_sa_utils module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - keycloak module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - ipa module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - ldap module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - lxd module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - exceptions module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - ocapi_utils module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - oneview module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - redfish_utils module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - bitbucket module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). + - utm_utils module utils - remove redundant conversions to unicode (https://github.com/ansible-collections/community.general/pull/11112). diff --git a/plugins/module_utils/csv.py b/plugins/module_utils/csv.py index 452ab6ee96..3a6194fd01 100644 --- a/plugins/module_utils/csv.py +++ b/plugins/module_utils/csv.py @@ -52,7 +52,7 @@ def initialize_dialect(dialect, **kwargs): def read_csv(data, dialect, fieldnames=None): - BOM = to_native("\ufeff") + BOM = "\ufeff" data = to_native(data, errors="surrogate_or_strict") if data.startswith(BOM): data = data[len(BOM) :] diff --git a/plugins/module_utils/deps.py b/plugins/module_utils/deps.py index c8fdf876bb..63330bfed7 100644 --- a/plugins/module_utils/deps.py +++ b/plugins/module_utils/deps.py @@ -9,7 +9,6 @@ from __future__ import annotations import traceback from contextlib import contextmanager -from ansible.module_utils.common.text.converters import to_native from ansible.module_utils.basic import missing_required_lib @@ -40,7 +39,7 @@ class _Dependency: @property def message(self): if self.msg: - return to_native(self.msg) + return str(self.msg) else: return missing_required_lib(self.name, reason=self.reason, url=self.url) diff --git a/plugins/module_utils/gandi_livedns_api.py b/plugins/module_utils/gandi_livedns_api.py index 344e6b6bef..1b60b1b087 100644 --- a/plugins/module_utils/gandi_livedns_api.py +++ b/plugins/module_utils/gandi_livedns_api.py @@ -6,7 +6,6 @@ from __future__ import annotations import json -from ansible.module_utils.common.text.converters import to_text from ansible.module_utils.urls import fetch_url @@ -70,7 +69,7 @@ class GandiLiveDNSAPI: if content: try: - result = json.loads(to_text(content, errors="surrogate_or_strict")) + result = json.loads(content) except getattr(json, "JSONDecodeError", ValueError) as e: error_msg += f"; Failed to parse API response with error {e}: {content}" diff --git a/plugins/module_utils/ibm_sa_utils.py b/plugins/module_utils/ibm_sa_utils.py index 89995ce51c..c6c583e9cf 100644 --- a/plugins/module_utils/ibm_sa_utils.py +++ b/plugins/module_utils/ibm_sa_utils.py @@ -9,7 +9,6 @@ from __future__ import annotations import traceback from functools import wraps -from ansible.module_utils.common.text.converters import to_native from ansible.module_utils.basic import missing_required_lib PYXCLI_INSTALLED = True @@ -54,7 +53,7 @@ def xcli_wrapper(func): try: return func(module, *args, **kwargs) except errors.CommandExecutionError as e: - module.fail_json(msg=to_native(e)) + module.fail_json(msg=f"{e}") return wrapper diff --git a/plugins/module_utils/identity/keycloak/keycloak.py b/plugins/module_utils/identity/keycloak/keycloak.py index 60295c863c..b3e91d45ee 100644 --- a/plugins/module_utils/identity/keycloak/keycloak.py +++ b/plugins/module_utils/identity/keycloak/keycloak.py @@ -200,16 +200,14 @@ def _token_request(module_params, payload): try: r = json.loads( - to_native( - open_url( - auth_url, - method="POST", - validate_certs=validate_certs, - http_agent=http_agent, - timeout=connection_timeout, - data=urlencode(payload), - ).read() - ) + open_url( + auth_url, + method="POST", + validate_certs=validate_certs, + http_agent=http_agent, + timeout=connection_timeout, + data=urlencode(payload), + ).read() ) return r["access_token"] @@ -467,7 +465,7 @@ class KeycloakAPI: :param data: (optional) data for request :return: raw API response """ - return json.loads(to_native(self._request(url, method, data).read())) + return json.loads(self._request(url, method, data).read()) def get_realm_info_by_id(self, realm="master"): """Obtain realm public info by id diff --git a/plugins/module_utils/ipa.py b/plugins/module_utils/ipa.py index f0be48437c..ef8e11bb62 100644 --- a/plugins/module_utils/ipa.py +++ b/plugins/module_utils/ipa.py @@ -17,7 +17,7 @@ import socket import uuid import re -from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text +from ansible.module_utils.common.text.converters import to_bytes, to_text from ansible.module_utils.urls import fetch_url, HAS_GSSAPI from ansible.module_utils.basic import env_fallback, AnsibleFallbackNotFound from urllib.parse import quote @@ -91,7 +91,7 @@ class IPAClient: self.headers = {"Cookie": info.get("set-cookie")} except Exception as e: - self._fail("login", to_native(e)) + self._fail("login", f"{e}") if not self.headers: self.headers = dict() self.headers.update( @@ -144,7 +144,7 @@ class IPAClient: if status_code not in [200, 201, 204]: self._fail(method, info["msg"]) except Exception as e: - self._fail(f"post {method}", to_native(e)) + self._fail(f"post {method}", f"{e}") charset = resp.headers.get_content_charset("latin-1") resp = json.loads(to_text(resp.read(), encoding=charset)) diff --git a/plugins/module_utils/ldap.py b/plugins/module_utils/ldap.py index c67e645c8a..430e51b1d2 100644 --- a/plugins/module_utils/ldap.py +++ b/plugins/module_utils/ldap.py @@ -9,7 +9,6 @@ from __future__ import annotations import re import traceback -from ansible.module_utils.common.text.converters import to_native try: import ldap @@ -78,7 +77,7 @@ class LdapGeneric: self.dn = self.module.params["dn"] def fail(self, msg, exn): - self.module.fail_json(msg=msg, details=to_native(exn), exception=traceback.format_exc()) + self.module.fail_json(msg=msg, details=f"{exn}", exception=traceback.format_exc()) def _find_dn(self): dn = self.module.params["dn"] diff --git a/plugins/module_utils/lxd.py b/plugins/module_utils/lxd.py index 5189263db0..95644ff860 100644 --- a/plugins/module_utils/lxd.py +++ b/plugins/module_utils/lxd.py @@ -13,7 +13,6 @@ import json from urllib.parse import urlparse from ansible.module_utils.urls import generic_urlparse -from ansible.module_utils.common.text.converters import to_text # httplib/http.client connection using unix domain socket HTTPConnection = http_client.HTTPConnection @@ -98,7 +97,6 @@ class LXDClient: self.connection.request(method, url, body=body) resp = self.connection.getresponse() resp_data = resp.read() - resp_data = to_text(resp_data, errors="surrogate_or_strict") resp_json = json.loads(resp_data) self.logs.append( { diff --git a/plugins/module_utils/mh/exceptions.py b/plugins/module_utils/mh/exceptions.py index 2d14555188..0e30b63268 100644 --- a/plugins/module_utils/mh/exceptions.py +++ b/plugins/module_utils/mh/exceptions.py @@ -7,12 +7,10 @@ from __future__ import annotations import typing as t -from ansible.module_utils.common.text.converters import to_native - class ModuleHelperException(Exception): def __init__(self, msg: str, update_output: dict[str, t.Any] | None = None, *args, **kwargs): - self.msg: str = to_native(msg or f"Module failed with exception: {self}") + self.msg: str = msg or f"Module failed with exception: {self}" if update_output is None: update_output = {} self.update_output: dict[str, t.Any] = update_output diff --git a/plugins/module_utils/ocapi_utils.py b/plugins/module_utils/ocapi_utils.py index abbd066b62..747e18c366 100644 --- a/plugins/module_utils/ocapi_utils.py +++ b/plugins/module_utils/ocapi_utils.py @@ -58,7 +58,7 @@ class OcapiUtils: use_proxy=True, timeout=self.timeout, ) - data = json.loads(to_native(resp.read())) + data = json.loads(resp.read()) headers = {k.lower(): v for (k, v) in resp.info().items()} except HTTPError as e: return {"ret": False, "msg": f"HTTP Error {e.code} on GET request to '{uri}'", "status": e.code} @@ -88,7 +88,7 @@ class OcapiUtils: timeout=self.timeout, ) if resp.status != 204: - data = json.loads(to_native(resp.read())) + data = json.loads(resp.read()) else: data = "" headers = {k.lower(): v for (k, v) in resp.info().items()} diff --git a/plugins/module_utils/oneview.py b/plugins/module_utils/oneview.py index f333d067c3..c1124a818f 100644 --- a/plugins/module_utils/oneview.py +++ b/plugins/module_utils/oneview.py @@ -290,7 +290,7 @@ class OneViewModuleBase(metaclass=abc.ABCMeta): self.module.exit_json(**result) except OneViewModuleException as exception: - error_msg = "; ".join(to_native(e) for e in exception.args) + error_msg = "; ".join(str(e) for e in exception.args) self.module.fail_json(msg=error_msg, exception=traceback.format_exc()) def resource_absent(self, resource, method="delete"): diff --git a/plugins/module_utils/redfish_utils.py b/plugins/module_utils/redfish_utils.py index 1843635fa0..c9f44b7d0b 100644 --- a/plugins/module_utils/redfish_utils.py +++ b/plugins/module_utils/redfish_utils.py @@ -185,7 +185,7 @@ class RedfishUtils: timeout=timeout, ) try: - data = json.loads(to_native(resp.read())) + data = json.loads(resp.read()) except Exception: # No response data; this is okay in certain cases data = None @@ -232,7 +232,7 @@ class RedfishUtils: force_basic_auth=basic_auth, ) try: - data = json.loads(to_native(resp.read())) + data = json.loads(resp.read()) except Exception: # No response data; this is okay in many cases data = None @@ -407,7 +407,7 @@ class RedfishUtils: if "filename" in fields[form]: name = os.path.basename(fields[form]["filename"]).replace('"', '\\"') write_buffer( - body, f'Content-Disposition: form-data; name="{to_text(form)}"; filename="{to_text(name)}"' + body, f'Content-Disposition: form-data; name="{to_text(form)}"; filename="{to_native(name)}"' ) else: write_buffer(body, f'Content-Disposition: form-data; name="{form}"') diff --git a/plugins/module_utils/source_control/bitbucket.py b/plugins/module_utils/source_control/bitbucket.py index c2f08d20d9..902d77f6b7 100644 --- a/plugins/module_utils/source_control/bitbucket.py +++ b/plugins/module_utils/source_control/bitbucket.py @@ -6,7 +6,6 @@ from __future__ import annotations import json -from ansible.module_utils.common.text.converters import to_text from ansible.module_utils.basic import env_fallback from ansible.module_utils.urls import fetch_url, basic_auth_header @@ -94,7 +93,7 @@ class BitbucketHelper: content = {} if response is not None: - body = to_text(response.read()) + body = response.read() if body: content = json.loads(body) diff --git a/plugins/module_utils/utm_utils.py b/plugins/module_utils/utm_utils.py index 496d05840d..624c4f313b 100644 --- a/plugins/module_utils/utm_utils.py +++ b/plugins/module_utils/utm_utils.py @@ -13,7 +13,6 @@ from __future__ import annotations import json -from ansible.module_utils.common.text.converters import to_native from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.urls import fetch_url @@ -109,7 +108,7 @@ class UTM: else: self._info() except Exception as e: - self.module.fail_json(msg=to_native(e)) + self.module.fail_json(msg=f"{e}") def _info(self): """