From a8977afb04715faf2b3ef97703d321edffaa9db5 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Sat, 11 Oct 2025 08:21:57 +0200 Subject: [PATCH] Remove all usage of ansible.module_utils.six from main branch (#10888) * Get rid of all six.moves imports. * Get rid of iteritems. * Get rid of *_type(s) aliases. * Replace StringIO import. * Get rid of PY2/PY3 constants. * Get rid of raise_from. * Get rid of python_2_unicode_compatible. * Clean up global six imports. * Remove all usage of ansible.module_utils.six. * Linting. * Fix xml module. * Docs adjustments. --- changelogs/fragments/10888-six.yml | 2 + plugins/module_utils/consul.py | 4 +- plugins/module_utils/csv.py | 8 +-- plugins/module_utils/dimensiondata.py | 2 +- plugins/module_utils/gitlab.py | 3 +- plugins/module_utils/homebrew.py | 9 ++-- .../identity/keycloak/keycloak.py | 4 +- plugins/module_utils/ipa.py | 12 +---- plugins/module_utils/known_hosts.py | 2 +- plugins/module_utils/lxd.py | 4 +- plugins/module_utils/memset.py | 4 +- plugins/module_utils/net_tools/pritunl/api.py | 5 +- plugins/module_utils/ocapi_utils.py | 4 +- plugins/module_utils/oneview.py | 8 ++- plugins/module_utils/opennebula.py | 3 +- plugins/module_utils/oracle/oci_utils.py | 3 +- plugins/module_utils/pkg_req.py | 6 +-- plugins/module_utils/redfish_utils.py | 9 ++-- plugins/module_utils/saslprep.py | 7 +-- plugins/module_utils/scaleway.py | 2 +- plugins/module_utils/wdc_redfish_utils.py | 3 +- plugins/modules/apache2_mod_proxy.py | 17 ++----- plugins/modules/archive.py | 46 +++++------------ plugins/modules/circonus_annotation.py | 5 +- plugins/modules/cloudflare_dns.py | 2 +- plugins/modules/cobbler_sync.py | 2 +- plugins/modules/cobbler_system.py | 11 ++-- plugins/modules/copr.py | 2 +- plugins/modules/cronvar.py | 2 +- plugins/modules/decompress.py | 14 ++---- plugins/modules/dnsmadeeasy.py | 5 +- plugins/modules/flatpak.py | 3 +- plugins/modules/grove.py | 3 +- plugins/modules/homebrew.py | 9 ++-- plugins/modules/homebrew_cask.py | 11 ++-- plugins/modules/honeybadger_deployment.py | 2 +- plugins/modules/imc_rest.py | 2 +- plugins/modules/ipbase_info.py | 4 +- plugins/modules/java_cert.py | 5 +- plugins/modules/java_keystore.py | 3 -- plugins/modules/jenkins_credential.py | 2 +- plugins/modules/jenkins_plugin.py | 7 ++- plugins/modules/jenkins_script.py | 4 +- plugins/modules/jira.py | 2 +- plugins/modules/keycloak_component.py | 2 +- plugins/modules/keycloak_component_info.py | 2 +- plugins/modules/keycloak_realm_key.py | 2 +- plugins/modules/keycloak_user_federation.py | 2 +- plugins/modules/keycloak_userprofile.py | 2 +- plugins/modules/ldap_search.py | 5 +- plugins/modules/lxd_container.py | 2 +- plugins/modules/lxd_profile.py | 3 +- plugins/modules/mail.py | 11 +--- plugins/modules/make.py | 5 +- plugins/modules/maven_artifact.py | 2 +- plugins/modules/monit.py | 2 - plugins/modules/newrelic_deployment.py | 2 +- plugins/modules/nexmo.py | 2 +- plugins/modules/ocapi_command.py | 2 +- plugins/modules/ocapi_info.py | 3 +- plugins/modules/oneandone_server.py | 5 +- plugins/modules/osx_defaults.py | 3 +- plugins/modules/ovh_ip_failover.py | 2 +- plugins/modules/pagerduty_alert.py | 2 +- plugins/modules/pids.py | 4 +- plugins/modules/portinstall.py | 2 +- plugins/modules/pushover.py | 2 +- plugins/modules/redhat_subscription.py | 2 +- plugins/modules/rollbar_deployment.py | 3 +- .../modules/rundeck_job_executions_info.py | 2 +- plugins/modules/rundeck_job_run.py | 2 +- plugins/modules/sendgrid.py | 2 +- plugins/modules/sl_vm.py | 3 +- plugins/modules/slack.py | 2 +- plugins/modules/spectrum_model_attrs.py | 2 +- plugins/modules/ssh_config.py | 3 +- plugins/modules/stacki_host.py | 2 +- plugins/modules/telegram.py | 2 +- plugins/modules/terraform.py | 11 ++-- plugins/modules/timezone.py | 7 ++- plugins/modules/twilio.py | 2 +- plugins/modules/typetalk.py | 2 +- plugins/modules/uptimerobot.py | 2 +- plugins/modules/xenserver_guest.py | 3 +- plugins/modules/xml.py | 7 ++- plugins/modules/zpool_facts.py | 3 +- plugins/modules/zypper_repository.py | 10 ++-- tests/sanity/ignore-2.20.txt | 50 ------------------- tests/unit/plugins/lookup/test_bitwarden.py | 3 +- tests/unit/plugins/lookup/test_lastpass.py | 5 +- .../keycloak/test_keycloak_connect.py | 4 +- .../net_tools/pritunl/test_api.py | 8 +-- .../module_utils/xenserver/conftest.py | 3 +- tests/unit/plugins/modules/conftest.py | 6 +-- .../plugins/modules/test_jenkins_plugin.py | 2 +- .../modules/test_keycloak_authentication.py | 3 +- ...eycloak_authentication_required_actions.py | 3 +- .../plugins/modules/test_keycloak_client.py | 3 +- .../test_keycloak_client_rolemapping.py | 3 +- .../modules/test_keycloak_clientscope.py | 3 +- .../modules/test_keycloak_component.py | 2 +- .../test_keycloak_identity_provider.py | 3 +- .../plugins/modules/test_keycloak_realm.py | 3 +- .../modules/test_keycloak_realm_info.py | 3 +- .../modules/test_keycloak_realm_keys.py | 3 +- .../test_keycloak_realm_keys_metadata_info.py | 2 +- .../plugins/modules/test_keycloak_role.py | 3 +- .../plugins/modules/test_keycloak_user.py | 3 +- .../modules/test_keycloak_user_federation.py | 3 +- .../modules/test_keycloak_userprofile.py | 3 +- .../plugins/modules/test_ocapi_command.py | 2 +- .../unit/plugins/modules/test_pritunl_org.py | 3 +- .../unit/plugins/modules/test_pritunl_user.py | 3 +- 113 files changed, 188 insertions(+), 352 deletions(-) create mode 100644 changelogs/fragments/10888-six.yml diff --git a/changelogs/fragments/10888-six.yml b/changelogs/fragments/10888-six.yml new file mode 100644 index 0000000000..b1f09accb3 --- /dev/null +++ b/changelogs/fragments/10888-six.yml @@ -0,0 +1,2 @@ +bugfixes: + - "Remove all usage of ``ansible.module_utils.six`` (https://github.com/ansible-collections/community.general/pull/10888)." diff --git a/plugins/module_utils/consul.py b/plugins/module_utils/consul.py index f98a0ad265..1a73a131a8 100644 --- a/plugins/module_utils/consul.py +++ b/plugins/module_utils/consul.py @@ -9,9 +9,9 @@ from __future__ import annotations import copy import json import re +from urllib import error as urllib_error +from urllib.parse import urlencode -from ansible.module_utils.six.moves.urllib import error as urllib_error -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import open_url diff --git a/plugins/module_utils/csv.py b/plugins/module_utils/csv.py index 692a7c4917..d8bd58d1d9 100644 --- a/plugins/module_utils/csv.py +++ b/plugins/module_utils/csv.py @@ -7,10 +7,9 @@ from __future__ import annotations import csv -from io import BytesIO, StringIO +from io import StringIO from ansible.module_utils.common.text.converters import to_native -from ansible.module_utils.six import PY3 class CustomDialectFailureError(Exception): @@ -58,10 +57,7 @@ def read_csv(data, dialect, fieldnames=None): if data.startswith(BOM): data = data[len(BOM):] - if PY3: - fake_fh = StringIO(data) - else: - fake_fh = BytesIO(data) + fake_fh = StringIO(data) reader = csv.DictReader(fake_fh, fieldnames=fieldnames, dialect=dialect) diff --git a/plugins/module_utils/dimensiondata.py b/plugins/module_utils/dimensiondata.py index b723cfd818..4f482aad18 100644 --- a/plugins/module_utils/dimensiondata.py +++ b/plugins/module_utils/dimensiondata.py @@ -13,13 +13,13 @@ from __future__ import annotations +import configparser import os import re import traceback # (TODO: remove AnsibleModule from next line!) from ansible.module_utils.basic import AnsibleModule, missing_required_lib # noqa: F401, pylint: disable=unused-import -from ansible.module_utils.six.moves import configparser from os.path import expanduser from uuid import UUID diff --git a/plugins/module_utils/gitlab.py b/plugins/module_utils/gitlab.py index c5320bc562..bc2ef9381c 100644 --- a/plugins/module_utils/gitlab.py +++ b/plugins/module_utils/gitlab.py @@ -8,7 +8,6 @@ from __future__ import annotations from ansible.module_utils.basic import missing_required_lib from ansible.module_utils.common.text.converters import to_native -from ansible.module_utils.six import integer_types, string_types from ansible_collections.community.general.plugins.module_utils.version import LooseVersion @@ -144,7 +143,7 @@ def vars_to_variables(vars, module): # transform old vars to new variables structure variables = list() for item, value in vars.items(): - if isinstance(value, (string_types, integer_types, float)): + if isinstance(value, (str, int, float)): variables.append( { "name": item, diff --git a/plugins/module_utils/homebrew.py b/plugins/module_utils/homebrew.py index a184d72194..10bf7c14fa 100644 --- a/plugins/module_utils/homebrew.py +++ b/plugins/module_utils/homebrew.py @@ -7,7 +7,6 @@ from __future__ import annotations import os import re -from ansible.module_utils.six import string_types def _create_regex_group_complement(s): @@ -70,7 +69,7 @@ class HomebrewValidate(object): - os.path.sep """ - if isinstance(path, string_types): + if isinstance(path, str): return not cls.INVALID_PATH_REGEX.search(path) try: @@ -98,7 +97,7 @@ class HomebrewValidate(object): return True return isinstance( - brew_path, string_types + brew_path, str ) and not cls.INVALID_BREW_PATH_REGEX.search(brew_path) @classmethod @@ -109,7 +108,7 @@ class HomebrewValidate(object): return True return isinstance( - package, string_types + package, str ) and not cls.INVALID_PACKAGE_REGEX.search(package) @@ -126,7 +125,7 @@ def parse_brew_path(module): if not HomebrewValidate.valid_path(path): module.fail_json(msg="Invalid path: {0}".format(path)) - if isinstance(path, string_types): + if isinstance(path, str): paths = path.split(":") elif isinstance(path, list): paths = path diff --git a/plugins/module_utils/identity/keycloak/keycloak.py b/plugins/module_utils/identity/keycloak/keycloak.py index c71d2b6fd5..ad07f27b1b 100644 --- a/plugins/module_utils/identity/keycloak/keycloak.py +++ b/plugins/module_utils/identity/keycloak/keycloak.py @@ -8,10 +8,10 @@ from __future__ import annotations import json import traceback import copy +from urllib.parse import urlencode, quote +from urllib.error import HTTPError from ansible.module_utils.urls import open_url -from ansible.module_utils.six.moves.urllib.parse import urlencode, quote -from ansible.module_utils.six.moves.urllib.error import HTTPError from ansible.module_utils.common.text.converters import to_native, to_text URL_REALM_INFO = "{url}/realms/{realm}" diff --git a/plugins/module_utils/ipa.py b/plugins/module_utils/ipa.py index 62826ded30..21b0df3537 100644 --- a/plugins/module_utils/ipa.py +++ b/plugins/module_utils/ipa.py @@ -18,10 +18,9 @@ import uuid import re from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text -from ansible.module_utils.six import PY3 -from ansible.module_utils.six.moves.urllib.parse import quote from ansible.module_utils.urls import fetch_url, HAS_GSSAPI from ansible.module_utils.basic import env_fallback, AnsibleFallbackNotFound +from urllib.parse import quote def _env_then_dns_fallback(*args, **kwargs): @@ -135,14 +134,7 @@ class IPAClient(object): except Exception as e: self._fail('post %s' % method, to_native(e)) - if PY3: - charset = resp.headers.get_content_charset('latin-1') - else: - response_charset = resp.headers.getparam('charset') - if response_charset: - charset = response_charset - else: - charset = 'latin-1' + charset = resp.headers.get_content_charset('latin-1') resp = json.loads(to_text(resp.read(), encoding=charset)) err = resp.get('error') if err is not None: diff --git a/plugins/module_utils/known_hosts.py b/plugins/module_utils/known_hosts.py index 68b07229a9..80802f616e 100644 --- a/plugins/module_utils/known_hosts.py +++ b/plugins/module_utils/known_hosts.py @@ -15,7 +15,7 @@ import os import hmac import re -from ansible.module_utils.six.moves.urllib.parse import urlparse +from urllib.parse import urlparse try: from hashlib import sha1 diff --git a/plugins/module_utils/lxd.py b/plugins/module_utils/lxd.py index ac72fd8711..7a7c868aa9 100644 --- a/plugins/module_utils/lxd.py +++ b/plugins/module_utils/lxd.py @@ -6,14 +6,14 @@ from __future__ import annotations +import http.client as http_client import os import socket import ssl import json +from urllib.parse import urlparse from ansible.module_utils.urls import generic_urlparse -from ansible.module_utils.six.moves.urllib.parse import urlparse -from ansible.module_utils.six.moves import http_client from ansible.module_utils.common.text.converters import to_text # httplib/http.client connection using unix domain socket diff --git a/plugins/module_utils/memset.py b/plugins/module_utils/memset.py index ff11ddac24..ac2348704f 100644 --- a/plugins/module_utils/memset.py +++ b/plugins/module_utils/memset.py @@ -11,10 +11,10 @@ from __future__ import annotations -from ansible.module_utils.six.moves.urllib.parse import urlencode +from urllib.parse import urlencode from ansible.module_utils.urls import open_url from ansible.module_utils.basic import json -import ansible.module_utils.six.moves.urllib.error as urllib_error +import urllib.error as urllib_error class Response(object): diff --git a/plugins/module_utils/net_tools/pritunl/api.py b/plugins/module_utils/net_tools/pritunl/api.py index 5ef12b8e5c..c2c6ef79e8 100644 --- a/plugins/module_utils/net_tools/pritunl/api.py +++ b/plugins/module_utils/net_tools/pritunl/api.py @@ -15,7 +15,6 @@ import json import time import uuid -from ansible.module_utils.six import iteritems from ansible.module_utils.urls import open_url @@ -167,7 +166,7 @@ def list_pritunl_organizations( else: if not any( filter_val != org[filter_key] - for filter_key, filter_val in iteritems(filters) + for filter_key, filter_val in filters.items() ): orgs.append(org) @@ -198,7 +197,7 @@ def list_pritunl_users( else: if not any( filter_val != user[filter_key] - for filter_key, filter_val in iteritems(filters) + for filter_key, filter_val in filters.items() ): users.append(user) diff --git a/plugins/module_utils/ocapi_utils.py b/plugins/module_utils/ocapi_utils.py index f37919b246..147009399f 100644 --- a/plugins/module_utils/ocapi_utils.py +++ b/plugins/module_utils/ocapi_utils.py @@ -8,12 +8,12 @@ from __future__ import annotations import json import os import uuid +from urllib.error import URLError, HTTPError +from urllib.parse import urlparse from ansible.module_utils.urls import open_url from ansible.module_utils.common.text.converters import to_native from ansible.module_utils.common.text.converters import to_text -from ansible.module_utils.six.moves.urllib.error import URLError, HTTPError -from ansible.module_utils.six.moves.urllib.parse import urlparse GET_HEADERS = {'accept': 'application/json'} diff --git a/plugins/module_utils/oneview.py b/plugins/module_utils/oneview.py index 821ee9bcf1..b740450244 100644 --- a/plugins/module_utils/oneview.py +++ b/plugins/module_utils/oneview.py @@ -15,6 +15,7 @@ import abc import collections import json import traceback +from collections.abc import Mapping HPE_ONEVIEW_IMP_ERR = None try: @@ -24,10 +25,8 @@ except ImportError: HPE_ONEVIEW_IMP_ERR = traceback.format_exc() HAS_HPE_ONEVIEW = False -from ansible.module_utils import six from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.common.text.converters import to_native -from ansible.module_utils.six.moves.collections_abc import Mapping def transform_list_to_dict(list_): @@ -128,7 +127,7 @@ class OneViewModuleException(Exception): self.msg = None self.oneview_response = None - if isinstance(data, six.string_types): + if isinstance(data, str): self.msg = data else: self.oneview_response = data @@ -178,8 +177,7 @@ class OneViewModuleResourceNotFound(OneViewModuleException): pass -@six.add_metaclass(abc.ABCMeta) -class OneViewModuleBase(object): +class OneViewModuleBase(object, metaclass=abc.ABCMeta): MSG_CREATED = 'Resource created successfully.' MSG_UPDATED = 'Resource updated successfully.' MSG_DELETED = 'Resource deleted successfully.' diff --git a/plugins/module_utils/opennebula.py b/plugins/module_utils/opennebula.py index d69c9e9ceb..24500cb8c1 100644 --- a/plugins/module_utils/opennebula.py +++ b/plugins/module_utils/opennebula.py @@ -10,7 +10,6 @@ from __future__ import annotations import time import ssl from os import environ -from ansible.module_utils.six import string_types from ansible.module_utils.basic import AnsibleModule @@ -263,7 +262,7 @@ class OpenNebulaModule: self.cast_template(template[key]) elif isinstance(value, list): template[key] = ', '.join(value) - elif not isinstance(value, string_types): + elif not isinstance(value, str): template[key] = str(value) def requires_template_update(self, current, desired): diff --git a/plugins/module_utils/oracle/oci_utils.py b/plugins/module_utils/oracle/oci_utils.py index ed5ddc34f3..0910d24cae 100644 --- a/plugins/module_utils/oracle/oci_utils.py +++ b/plugins/module_utils/oracle/oci_utils.py @@ -46,7 +46,6 @@ except ImportError: from ansible.module_utils.common.text.converters import to_bytes -from ansible.module_utils.six import iteritems __version__ = "1.6.0-dev" @@ -820,7 +819,7 @@ def is_attr_assigned_default(default_attribute_values, attr, assigned_value): # this is to ensure forward compatibility when the API returns new keys that are not known during # the time when the module author provided default values for the attribute keys = {} - for k, v in iteritems(assigned_value.items()): + for k, v in assigned_value.items().items(): if k in default_val_for_attr: keys[k] = v diff --git a/plugins/module_utils/pkg_req.py b/plugins/module_utils/pkg_req.py index 0521b17872..d749e5f86b 100644 --- a/plugins/module_utils/pkg_req.py +++ b/plugins/module_utils/pkg_req.py @@ -4,8 +4,6 @@ from __future__ import annotations -from ansible.module_utils.six import raise_from - from ansible_collections.community.general.plugins.module_utils import deps @@ -49,7 +47,7 @@ class PackageRequirement: return req.name, req except Exception as e: - raise_from(ValueError("Invalid package specification for '{0}': {1}".format(name, e)), e) + raise ValueError("Invalid package specification for '{0}': {1}".format(name, e)) from e def matches_version(self, version): """ @@ -70,4 +68,4 @@ class PackageRequirement: return ver in self.requirement.specifier except InvalidVersion as e: - raise_from(ValueError("Invalid version '{0}': {1}".format(version, e))) + raise ValueError("Invalid version '{0}': {1}".format(version, e)) from e diff --git a/plugins/module_utils/redfish_utils.py b/plugins/module_utils/redfish_utils.py index bcc3b2b91f..3cdbead0c9 100644 --- a/plugins/module_utils/redfish_utils.py +++ b/plugins/module_utils/redfish_utils.py @@ -4,6 +4,7 @@ from __future__ import annotations +import http.client as http_client import json import os import random @@ -13,10 +14,8 @@ from ansible.module_utils.urls import open_url from ansible.module_utils.common.text.converters import to_native from ansible.module_utils.common.text.converters import to_text from ansible.module_utils.common.text.converters import to_bytes -from ansible.module_utils.six import text_type -from ansible.module_utils.six.moves import http_client -from ansible.module_utils.six.moves.urllib.error import URLError, HTTPError -from ansible.module_utils.six.moves.urllib.parse import urlparse +from urllib.error import URLError, HTTPError +from urllib.parse import urlparse GET_HEADERS = {'accept': 'application/json', 'OData-Version': '4.0'} POST_HEADERS = {'content-type': 'application/json', 'accept': 'application/json', @@ -378,7 +377,7 @@ class RedfishUtils(object): def write_buffer(body, line): # Adds to the multipart body based on the provided data type # At this time there is only support for strings, dictionaries, and bytes (default) - if isinstance(line, text_type): + if isinstance(line, str): body.append(to_bytes(line, encoding='utf-8')) elif isinstance(line, dict): body.append(to_bytes(json.dumps(line), encoding='utf-8')) diff --git a/plugins/module_utils/saslprep.py b/plugins/module_utils/saslprep.py index 29023a186f..f7394ce008 100644 --- a/plugins/module_utils/saslprep.py +++ b/plugins/module_utils/saslprep.py @@ -29,11 +29,9 @@ from stringprep import ( ) from unicodedata import normalize -from ansible.module_utils.six import text_type - def is_unicode_str(string): - return True if isinstance(string, text_type) else False + return True if isinstance(string, str) else False def mapping_profile(string): @@ -156,9 +154,8 @@ def saslprep(string): # RFC4013: "The algorithm assumes all strings are # comprised of characters from the Unicode [Unicode] character set." # Validate the string is a Unicode string - # (text_type is the string type if PY3 and unicode otherwise): if not is_unicode_str(string): - raise TypeError('input must be of type %s, not %s' % (text_type, type(string))) + raise TypeError('input must be of type str, not %s' % type(string)) # RFC4013: 2.1. Mapping. string = mapping_profile(string) diff --git a/plugins/module_utils/scaleway.py b/plugins/module_utils/scaleway.py index 7b3a1567b7..0798e61317 100644 --- a/plugins/module_utils/scaleway.py +++ b/plugins/module_utils/scaleway.py @@ -10,10 +10,10 @@ import sys import datetime import time import traceback +from urllib.parse import urlencode from ansible.module_utils.basic import env_fallback, missing_required_lib from ansible.module_utils.urls import fetch_url -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible_collections.community.general.plugins.module_utils.datetime import ( now, diff --git a/plugins/module_utils/wdc_redfish_utils.py b/plugins/module_utils/wdc_redfish_utils.py index c282d125ab..3880626f90 100644 --- a/plugins/module_utils/wdc_redfish_utils.py +++ b/plugins/module_utils/wdc_redfish_utils.py @@ -10,12 +10,11 @@ import re import time import tarfile import os +from urllib.parse import urlparse, urlunparse from ansible.module_utils.urls import fetch_file from ansible_collections.community.general.plugins.module_utils.redfish_utils import RedfishUtils -from ansible.module_utils.six.moves.urllib.parse import urlparse, urlunparse - class WdcRedfishUtils(RedfishUtils): """Extension to RedfishUtils to support WDC enclosures.""" diff --git a/plugins/modules/apache2_mod_proxy.py b/plugins/modules/apache2_mod_proxy.py index deafd01245..3b06736898 100644 --- a/plugins/modules/apache2_mod_proxy.py +++ b/plugins/modules/apache2_mod_proxy.py @@ -17,7 +17,7 @@ description: extends_documentation_fragment: - community.general.attributes requirements: - - Python package C(BeautifulSoup) on Python 2, C(beautifulsoup4) on Python 3. + - Python package C(beautifulsoup4) attributes: check_mode: support: full @@ -213,14 +213,9 @@ from ansible_collections.community.general.plugins.module_utils.module_helper im from ansible.module_utils.common.text.converters import to_text from ansible.module_utils.urls import fetch_url -from ansible.module_utils.six import raise_from, PY2 -if PY2: - with deps.declare("BeautifulSoup"): - from BeautifulSoup import BeautifulSoup -else: - with deps.declare("beautifulsoup4"): - from bs4 import BeautifulSoup +with deps.declare("beautifulsoup4"): + from bs4 import BeautifulSoup # balancer member attributes extraction regexp: EXPRESSION = re.compile(to_text(r"(b=([\w\.\-]+)&w=(https?|ajp|wss?|ftp|[sf]cgi)://([\w\.\-]+):?(\d*)([/\w\.\-]*)&?[\w\-\=]*)")) @@ -229,8 +224,6 @@ APACHE_VERSION_EXPRESSION = re.compile(to_text(r"SERVER VERSION: APACHE/([\d.]+) def find_all(where, what): - if PY2: - return where.findAll(what) return where.find_all(what) @@ -279,7 +272,7 @@ class BalancerMember(object): try: soup = BeautifulSoup(resp) except TypeError as exc: - raise_from(ModuleHelperException("Cannot parse balancer_member_page HTML! {0}".format(exc)), exc) + raise ModuleHelperException("Cannot parse balancer_member_page HTML! {0}".format(exc)) from exc subsoup = find_all(find_all(soup, 'table')[1], 'tr') keys = find_all(subsoup[0], 'th') @@ -359,7 +352,7 @@ class Balancer(object): try: soup = BeautifulSoup(self.page) except TypeError as e: - raise_from(ModuleHelperException("Cannot parse balancer page HTML! {0}".format(self.page)), e) + raise ModuleHelperException("Cannot parse balancer page HTML! {0}".format(self.page)) from e elements = find_all(soup, 'a') for element in elements[1::1]: diff --git a/plugins/modules/archive.py b/plugins/modules/archive.py index d4b3cebd96..17f28a28bc 100644 --- a/plugins/modules/archive.py +++ b/plugins/modules/archive.py @@ -72,11 +72,8 @@ options: default: false notes: - Can produce C(gzip), C(bzip2), C(lzma), and C(zip) compressed files or archives. - - This module uses C(tarfile), C(zipfile), C(gzip), and C(bz2) packages on the target host to create archives. These are - part of the Python standard library for Python 2 and 3. -requirements: - - Requires C(lzma) (standard library of Python 3) or L(backports.lzma, https://pypi.org/project/backports.lzma/) (Python - 2) if using C(xz) format. + - This module uses C(tarfile), C(zipfile), C(gzip), C(bz2), and C(lzma) packages on the target host to create archives. These are + part of the Python standard library. seealso: - module: ansible.builtin.unarchive author: @@ -188,13 +185,11 @@ import shutil import tarfile import zipfile from fnmatch import fnmatch -from sys import version_info from traceback import format_exc from zlib import crc32 from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.common.text.converters import to_bytes, to_native -from ansible.module_utils import six try: # python 3.2+ from zipfile import BadZipFile # type: ignore[attr-defined] @@ -202,22 +197,12 @@ except ImportError: # older python from zipfile import BadZipfile as BadZipFile LZMA_IMP_ERR = None -if six.PY3: - try: - import lzma - HAS_LZMA = True - except ImportError: - LZMA_IMP_ERR = format_exc() - HAS_LZMA = False -else: - try: - from backports import lzma - HAS_LZMA = True - except ImportError: - LZMA_IMP_ERR = format_exc() - HAS_LZMA = False - -PY27 = version_info[0:2] >= (2, 7) +try: + import lzma + HAS_LZMA = True +except ImportError: + LZMA_IMP_ERR = format_exc() + HAS_LZMA = False STATE_ABSENT = 'absent' STATE_ARCHIVED = 'archive' @@ -226,7 +211,7 @@ STATE_INCOMPLETE = 'incomplete' def common_path(paths): - empty = b'' if paths and isinstance(paths[0], six.binary_type) else '' + empty = b'' if paths and isinstance(paths[0], bytes) else '' return os.path.join( os.path.dirname(os.path.commonprefix([os.path.join(os.path.dirname(p), empty) for p in paths])), empty @@ -271,8 +256,7 @@ def _to_native_ascii(s): return to_native(s, errors='surrogate_or_strict', encoding='ascii') -@six.add_metaclass(abc.ABCMeta) -class Archive(object): +class Archive(object, metaclass=abc.ABCMeta): def __init__(self, module): self.module = module @@ -574,16 +558,10 @@ class TarArchive(Archive): self.module.fail_json(msg="%s is not a valid archive format" % self.format) def _add(self, path, archive_name): - def py27_filter(tarinfo): + def filter(tarinfo): return None if matches_exclusion_patterns(tarinfo.name, self.exclusion_patterns) else tarinfo - def py26_filter(path): - return matches_exclusion_patterns(path, self.exclusion_patterns) - - if PY27: - self.file.add(path, archive_name, recursive=False, filter=py27_filter) - else: - self.file.add(path, archive_name, recursive=False, exclude=py26_filter) + self.file.add(path, archive_name, recursive=False, filter=filter) def _get_checksums(self, path): if HAS_LZMA: diff --git a/plugins/modules/circonus_annotation.py b/plugins/modules/circonus_annotation.py index 8934a653d7..4d00b6fb98 100644 --- a/plugins/modules/circonus_annotation.py +++ b/plugins/modules/circonus_annotation.py @@ -14,7 +14,7 @@ description: - Create an annotation event with a given category, title and description. Optionally start, end or durations can be provided. author: "Nick Harring (@NickatEpic)" requirements: - - requests (either >= 2.0.0 for Python 3, or >= 1.0.0 for Python 2) + - requests >= 2.0.0 extends_documentation_fragment: - community.general.attributes attributes: @@ -159,7 +159,6 @@ except ImportError: HAS_REQUESTS = False from ansible.module_utils.basic import AnsibleModule, missing_required_lib -from ansible.module_utils.six import PY3 from ansible.module_utils.common.text.converters import to_native @@ -168,7 +167,7 @@ def check_requests_dep(module): if not HAS_REQUESTS: module.fail_json(msg=missing_required_lib('requests'), exception=REQUESTS_IMP_ERR) else: - required_version = '2.0.0' if PY3 else '1.0.0' + required_version = '2.0.0' if LooseVersion(requests.__version__) < LooseVersion(required_version): module.fail_json(msg="'requests' library version should be >= %s, found: %s." % (required_version, requests.__version__)) diff --git a/plugins/modules/cloudflare_dns.py b/plugins/modules/cloudflare_dns.py index e7ef06f028..abed0023f8 100644 --- a/plugins/modules/cloudflare_dns.py +++ b/plugins/modules/cloudflare_dns.py @@ -438,9 +438,9 @@ record: """ import json +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule, env_fallback -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.common.text.converters import to_native, to_text from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/cobbler_sync.py b/plugins/modules/cobbler_sync.py index 97b6df3d63..158f6ee3d6 100644 --- a/plugins/modules/cobbler_sync.py +++ b/plugins/modules/cobbler_sync.py @@ -71,9 +71,9 @@ RETURN = r""" """ import ssl +import xmlrpc.client as xmlrpc_client from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves import xmlrpc_client from ansible.module_utils.common.text.converters import to_text from ansible_collections.community.general.plugins.module_utils.datetime import ( diff --git a/plugins/modules/cobbler_system.py b/plugins/modules/cobbler_system.py index 319fa5b875..80a45854c9 100644 --- a/plugins/modules/cobbler_system.py +++ b/plugins/modules/cobbler_system.py @@ -148,10 +148,9 @@ system: """ import ssl +import xmlrpc.client as xmlrpc_client from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import iteritems -from ansible.module_utils.six.moves import xmlrpc_client from ansible.module_utils.common.text.converters import to_text from ansible_collections.community.general.plugins.module_utils.datetime import ( @@ -281,7 +280,7 @@ def main(): else: system_id = conn.get_system_handle(name, token) - for key, value in iteritems(module.params['properties']): + for key, value in module.params['properties'].items(): if key not in system: module.warn("Property '{0}' is not a valid system property.".format(key)) if system[key] != value: @@ -298,7 +297,7 @@ def main(): result['changed'] = True if module.params['properties']: - for key, value in iteritems(module.params['properties']): + for key, value in module.params['properties'].items(): try: conn.modify_system(system_id, key, value, token) except Exception as e: @@ -307,8 +306,8 @@ def main(): # Add interface properties interface_properties = dict() if module.params['interfaces']: - for device, values in iteritems(module.params['interfaces']): - for key, value in iteritems(values): + for device, values in module.params['interfaces'].items(): + for key, value in values.items(): if key == 'name': continue if key not in IFPROPS_MAPPING: diff --git a/plugins/modules/copr.py b/plugins/modules/copr.py index 7b635e630a..4d627ceb8f 100644 --- a/plugins/modules/copr.py +++ b/plugins/modules/copr.py @@ -101,6 +101,7 @@ repo: import stat import os import traceback +from urllib.error import HTTPError try: import dnf @@ -114,7 +115,6 @@ except ImportError: HAS_DNF_PACKAGES = False from ansible.module_utils.common import respawn -from ansible.module_utils.six.moves.urllib.error import HTTPError from ansible.module_utils.basic import missing_required_lib from ansible.module_utils import distro from ansible.module_utils.basic import AnsibleModule diff --git a/plugins/modules/cronvar.py b/plugins/modules/cronvar.py index 54fab3a9fa..b67b94fe95 100644 --- a/plugins/modules/cronvar.py +++ b/plugins/modules/cronvar.py @@ -103,9 +103,9 @@ import re import shlex import sys import tempfile +from shlex import quote as shlex_quote from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves import shlex_quote class CronVarError(Exception): diff --git a/plugins/modules/decompress.py b/plugins/modules/decompress.py index d6cc330426..3746810ca9 100644 --- a/plugins/modules/decompress.py +++ b/plugins/modules/decompress.py @@ -50,8 +50,7 @@ options: type: bool default: false requirements: - - Requires C(lzma) (standard library of Python 3) or L(backports.lzma, https://pypi.org/project/backports.lzma/) (Python - 2) if using C(xz) format. + - Requires C(lzma) (standard library of Python 3) if using C(xz) format. author: - Stanislav Shamilov (@shamilovstas) """ @@ -94,16 +93,12 @@ import os import shutil import tempfile -from ansible.module_utils import six from ansible_collections.community.general.plugins.module_utils.mh.module_helper import ModuleHelper from ansible.module_utils.common.text.converters import to_native, to_bytes from ansible_collections.community.general.plugins.module_utils import deps with deps.declare("lzma"): - if six.PY3: - import lzma - else: - from backports import lzma + import lzma def lzma_decompress(src): @@ -111,10 +106,7 @@ def lzma_decompress(src): def bz2_decompress(src): - if six.PY3: - return bz2.open(src, "rb") - else: - return bz2.BZ2File(src, "rb") + return bz2.open(src, "rb") def gzip_decompress(src): diff --git a/plugins/modules/dnsmadeeasy.py b/plugins/modules/dnsmadeeasy.py index 6d38951e5c..e74e8a547b 100644 --- a/plugins/modules/dnsmadeeasy.py +++ b/plugins/modules/dnsmadeeasy.py @@ -361,11 +361,10 @@ import hashlib import hmac import locale from time import strftime, gmtime +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.urls import fetch_url -from ansible.module_utils.six.moves.urllib.parse import urlencode -from ansible.module_utils.six import string_types class DME2(object): @@ -415,7 +414,7 @@ class DME2(object): def query(self, resource, method, data=None): url = self.baseurl + resource - if data and not isinstance(data, string_types): + if data and not isinstance(data, str): data = urlencode(data) response, info = fetch_url(self.module, url, data=data, method=method, headers=self._headers()) diff --git a/plugins/modules/flatpak.py b/plugins/modules/flatpak.py index fa538e7523..3fab8f820b 100644 --- a/plugins/modules/flatpak.py +++ b/plugins/modules/flatpak.py @@ -171,7 +171,8 @@ command: sample: "/usr/bin/flatpak install --user --nontinteractive flathub org.gnome.Calculator" """ -from ansible.module_utils.six.moves.urllib.parse import urlparse +from urllib.parse import urlparse + from ansible.module_utils.basic import AnsibleModule from ansible_collections.community.general.plugins.module_utils.version import LooseVersion diff --git a/plugins/modules/grove.py b/plugins/modules/grove.py index 7703eb82a2..fc71322688 100644 --- a/plugins/modules/grove.py +++ b/plugins/modules/grove.py @@ -64,8 +64,9 @@ EXAMPLES = r""" message: 'deployed {{ target }}' """ +from urllib.parse import urlencode + from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/homebrew.py b/plugins/modules/homebrew.py index 7a8fc7b965..7def0d955c 100644 --- a/plugins/modules/homebrew.py +++ b/plugins/modules/homebrew.py @@ -181,7 +181,6 @@ import re from ansible_collections.community.general.plugins.module_utils.homebrew import HomebrewValidate from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import iteritems, string_types # exceptions -------------------------------------------------------------- {{{ @@ -224,7 +223,7 @@ class Homebrew(object): return True else: return ( - isinstance(state, string_types) + isinstance(state, str) and state.lower() in ( 'installed', 'upgraded', @@ -273,7 +272,7 @@ class Homebrew(object): raise HomebrewException(self.message) else: - if isinstance(path, string_types): + if isinstance(path, str): self._path = path.split(':') else: self._path = path @@ -336,7 +335,7 @@ class Homebrew(object): def _setup_instance_vars(self, **kwargs): self.installed_packages = set() self.outdated_packages = set() - for key, val in iteritems(kwargs): + for key, val in kwargs.items(): setattr(self, key, val) def _prep(self): @@ -507,7 +506,7 @@ class Homebrew(object): 'update', ]) if rc == 0: - if out and isinstance(out, string_types): + if out and isinstance(out, str): already_updated = any( re.search(r'Already up-to-date.', s.strip(), re.IGNORECASE) for s in out.split('\n') diff --git a/plugins/modules/homebrew_cask.py b/plugins/modules/homebrew_cask.py index cae24253fb..cb60e659bd 100644 --- a/plugins/modules/homebrew_cask.py +++ b/plugins/modules/homebrew_cask.py @@ -158,7 +158,6 @@ from ansible_collections.community.general.plugins.module_utils.homebrew import from ansible.module_utils.common.text.converters import to_bytes from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import iteritems, string_types # exceptions -------------------------------------------------------------- {{{ @@ -201,7 +200,7 @@ class HomebrewCask(object): return True return ( - isinstance(cask, string_types) + isinstance(cask, str) and not cls.INVALID_CASK_REGEX.search(cask) ) @@ -217,7 +216,7 @@ class HomebrewCask(object): return True else: return ( - isinstance(state, string_types) + isinstance(state, str) and state.lower() in ( 'installed', 'absent', @@ -261,7 +260,7 @@ class HomebrewCask(object): raise HomebrewCaskException(self.message) else: - if isinstance(path, string_types): + if isinstance(path, str): self._path = path.split(':') else: self._path = path @@ -348,7 +347,7 @@ class HomebrewCask(object): self.message = '' def _setup_instance_vars(self, **kwargs): - for key, val in iteritems(kwargs): + for key, val in kwargs.items(): setattr(self, key, val) def _prep(self): @@ -488,7 +487,7 @@ class HomebrewCask(object): 'update', ]) if rc == 0: - if out and isinstance(out, string_types): + if out and isinstance(out, str): already_updated = any( re.search(r'Already up-to-date.', s.strip(), re.IGNORECASE) for s in out.split('\n') diff --git a/plugins/modules/honeybadger_deployment.py b/plugins/modules/honeybadger_deployment.py index 5f76e3121d..a5fe8c86f7 100644 --- a/plugins/modules/honeybadger_deployment.py +++ b/plugins/modules/honeybadger_deployment.py @@ -68,9 +68,9 @@ EXAMPLES = r""" RETURN = """#""" import traceback +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.common.text.converters import to_native from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/imc_rest.py b/plugins/modules/imc_rest.py index e41d06b3aa..ef543c62e0 100644 --- a/plugins/modules/imc_rest.py +++ b/plugins/modules/imc_rest.py @@ -266,6 +266,7 @@ output: import os import traceback +from itertools import zip_longest LXML_ETREE_IMP_ERR = None try: @@ -284,7 +285,6 @@ except ImportError: HAS_XMLJSON_COBRA = False from ansible.module_utils.basic import AnsibleModule, missing_required_lib -from ansible.module_utils.six.moves import zip_longest from ansible.module_utils.urls import fetch_url from ansible_collections.community.general.plugins.module_utils.datetime import ( diff --git a/plugins/modules/ipbase_info.py b/plugins/modules/ipbase_info.py index 1dba9ee717..e2d73333fa 100644 --- a/plugins/modules/ipbase_info.py +++ b/plugins/modules/ipbase_info.py @@ -214,10 +214,8 @@ data: """ from ansible.module_utils.basic import AnsibleModule - from ansible.module_utils.urls import fetch_url - -from ansible.module_utils.six.moves.urllib.parse import urlencode +from urllib.parse import urlencode USER_AGENT = 'ansible-community.general.ipbase_info/0.1.0' diff --git a/plugins/modules/java_cert.py b/plugins/modules/java_cert.py index bbf63fd33e..2f1f33f782 100644 --- a/plugins/modules/java_cert.py +++ b/plugins/modules/java_cert.py @@ -205,12 +205,11 @@ cmd: import os import tempfile import re - +from urllib.parse import urlparse +from urllib.request import getproxies # import module snippets from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlparse -from ansible.module_utils.six.moves.urllib.request import getproxies def _get_keystore_type_keytool_parameters(keystore_type): diff --git a/plugins/modules/java_keystore.py b/plugins/modules/java_keystore.py index 8bb2c42c90..9222ae679b 100644 --- a/plugins/modules/java_keystore.py +++ b/plugins/modules/java_keystore.py @@ -182,7 +182,6 @@ import os import re import tempfile -from ansible.module_utils.six import PY2 from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.common.text.converters import to_bytes, to_native @@ -509,8 +508,6 @@ def create_file(content): def hex_decode(s): - if PY2: - return s.decode('hex') return s.hex() diff --git a/plugins/modules/jenkins_credential.py b/plugins/modules/jenkins_credential.py index 4d175bc052..b40c3546ea 100644 --- a/plugins/modules/jenkins_credential.py +++ b/plugins/modules/jenkins_credential.py @@ -317,9 +317,9 @@ token_uuid: returned: success """ +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.urls import fetch_url, basic_auth_header -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible_collections.community.general.plugins.module_utils import deps import json diff --git a/plugins/modules/jenkins_plugin.py b/plugins/modules/jenkins_plugin.py index d4209681c7..9f38668037 100644 --- a/plugins/modules/jenkins_plugin.py +++ b/plugins/modules/jenkins_plugin.py @@ -338,12 +338,11 @@ import os import tempfile import time from collections import OrderedDict +from http import cookiejar +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule, to_bytes -from ansible.module_utils.six.moves import http_cookiejar as cookiejar -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url, url_argument_spec, basic_auth_header -from ansible.module_utils.six import text_type, binary_type from ansible.module_utils.common.text.converters import to_native from ansible_collections.community.general.plugins.module_utils.jenkins import download_updates_file @@ -835,7 +834,7 @@ class JenkinsPlugin(object): # Store the plugin into a temp file and then move it tmp_f_fd, tmp_f = tempfile.mkstemp() - if isinstance(data, (text_type, binary_type)): + if isinstance(data, (str, bytes)): os.write(tmp_f_fd, data) else: os.write(tmp_f_fd, data.read()) diff --git a/plugins/modules/jenkins_script.py b/plugins/modules/jenkins_script.py index 5da74fc02d..eda3a49f2e 100644 --- a/plugins/modules/jenkins_script.py +++ b/plugins/modules/jenkins_script.py @@ -102,10 +102,10 @@ output: """ import json +from http import cookiejar +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves import http_cookiejar as cookiejar -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url from ansible.module_utils.common.text.converters import to_native diff --git a/plugins/modules/jira.py b/plugins/modules/jira.py index 187fa52bca..34d1cc3a8a 100644 --- a/plugins/modules/jira.py +++ b/plugins/modules/jira.py @@ -482,9 +482,9 @@ import os import random import string import traceback +from urllib.request import pathname2url from ansible_collections.community.general.plugins.module_utils.module_helper import StateModuleHelper, cause_changes -from ansible.module_utils.six.moves.urllib.request import pathname2url from ansible.module_utils.common.text.converters import to_text, to_bytes, to_native from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/keycloak_component.py b/plugins/modules/keycloak_component.py index e80caa8a02..c33c9af136 100644 --- a/plugins/modules/keycloak_component.py +++ b/plugins/modules/keycloak_component.py @@ -131,7 +131,7 @@ end_state: from ansible_collections.community.general.plugins.module_utils.identity.keycloak.keycloak import KeycloakAPI, camel, \ keycloak_argument_spec, get_token, KeycloakError from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode +from urllib.parse import urlencode from copy import deepcopy diff --git a/plugins/modules/keycloak_component_info.py b/plugins/modules/keycloak_component_info.py index 06565bf7c6..92f86ea046 100644 --- a/plugins/modules/keycloak_component_info.py +++ b/plugins/modules/keycloak_component_info.py @@ -102,7 +102,7 @@ components: from ansible_collections.community.general.plugins.module_utils.identity.keycloak.keycloak import KeycloakAPI, \ keycloak_argument_spec, get_token, KeycloakError from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import quote +from urllib.parse import quote def main(): diff --git a/plugins/modules/keycloak_realm_key.py b/plugins/modules/keycloak_realm_key.py index d21d163530..df9200016c 100644 --- a/plugins/modules/keycloak_realm_key.py +++ b/plugins/modules/keycloak_realm_key.py @@ -224,7 +224,7 @@ end_state: from ansible_collections.community.general.plugins.module_utils.identity.keycloak.keycloak import KeycloakAPI, camel, \ keycloak_argument_spec, get_token, KeycloakError from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode +from urllib.parse import urlencode from copy import deepcopy diff --git a/plugins/modules/keycloak_user_federation.py b/plugins/modules/keycloak_user_federation.py index 5f2b72ed14..c856e31d29 100644 --- a/plugins/modules/keycloak_user_federation.py +++ b/plugins/modules/keycloak_user_federation.py @@ -721,7 +721,7 @@ end_state: from ansible_collections.community.general.plugins.module_utils.identity.keycloak.keycloak import KeycloakAPI, camel, \ keycloak_argument_spec, get_token, KeycloakError from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode +from urllib.parse import urlencode from copy import deepcopy diff --git a/plugins/modules/keycloak_userprofile.py b/plugins/modules/keycloak_userprofile.py index b0b9f04b57..a09ab8818b 100644 --- a/plugins/modules/keycloak_userprofile.py +++ b/plugins/modules/keycloak_userprofile.py @@ -408,8 +408,8 @@ data: from ansible_collections.community.general.plugins.module_utils.identity.keycloak.keycloak import KeycloakAPI, camel, \ keycloak_argument_spec, get_token, KeycloakError from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from copy import deepcopy +from urllib.parse import urlencode import json diff --git a/plugins/modules/ldap_search.py b/plugins/modules/ldap_search.py index c4a432c45e..d7d1a9bbcf 100644 --- a/plugins/modules/ldap_search.py +++ b/plugins/modules/ldap_search.py @@ -108,7 +108,6 @@ import traceback from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text -from ansible.module_utils.six import binary_type, string_types, text_type from ansible_collections.community.general.plugins.module_utils.ldap import LdapGeneric, gen_specs, ldap_required_together LDAP_IMP_ERR = None @@ -147,8 +146,8 @@ def main(): def _normalize_string(val, convert_to_base64): - if isinstance(val, (string_types, binary_type)): - if isinstance(val, text_type): + if isinstance(val, (str, bytes)): + if isinstance(val, str): val = to_bytes(val, encoding='utf-8') if convert_to_base64: val = to_text(base64.b64encode(val)) diff --git a/plugins/modules/lxd_container.py b/plugins/modules/lxd_container.py index 3998b25d5f..22e4315150 100644 --- a/plugins/modules/lxd_container.py +++ b/plugins/modules/lxd_container.py @@ -418,10 +418,10 @@ import copy import datetime import os import time +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule from ansible_collections.community.general.plugins.module_utils.lxd import LXDClient, LXDClientException -from ansible.module_utils.six.moves.urllib.parse import urlencode # LXD_ANSIBLE_STATES is a map of states that contain values of methods used # when a particular state is evoked. diff --git a/plugins/modules/lxd_profile.py b/plugins/modules/lxd_profile.py index f38cf6fc4b..8a6fd19aa6 100644 --- a/plugins/modules/lxd_profile.py +++ b/plugins/modules/lxd_profile.py @@ -221,9 +221,10 @@ actions: """ import os +from urllib.parse import urlencode + from ansible.module_utils.basic import AnsibleModule from ansible_collections.community.general.plugins.module_utils.lxd import LXDClient, LXDClientException -from ansible.module_utils.six.moves.urllib.parse import urlencode # ANSIBLE_LXD_DEFAULT_URL is a default value of the lxd endpoint ANSIBLE_LXD_DEFAULT_URL = 'unix:/var/lib/lxd/unix.socket' diff --git a/plugins/modules/mail.py b/plugins/modules/mail.py index a6f0d129cd..4365f56a33 100644 --- a/plugins/modules/mail.py +++ b/plugins/modules/mail.py @@ -227,7 +227,6 @@ from email.mime.text import MIMEText from email.header import Header from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import PY3 from ansible.module_utils.common.text.converters import to_native @@ -286,10 +285,7 @@ def main(): try: if secure != 'never': try: - if PY3: - smtp = smtplib.SMTP_SSL(host=host, port=port, local_hostname=local_hostname, timeout=timeout) - else: - smtp = smtplib.SMTP_SSL(local_hostname=local_hostname, timeout=timeout) + smtp = smtplib.SMTP_SSL(host=host, port=port, local_hostname=local_hostname, timeout=timeout) code, smtpmessage = smtp.connect(host, port) secure_state = True except ssl.SSLError as e: @@ -300,10 +296,7 @@ def main(): pass if not secure_state: - if PY3: - smtp = smtplib.SMTP(host=host, port=port, local_hostname=local_hostname, timeout=timeout) - else: - smtp = smtplib.SMTP(local_hostname=local_hostname, timeout=timeout) + smtp = smtplib.SMTP(host=host, port=port, local_hostname=local_hostname, timeout=timeout) code, smtpmessage = smtp.connect(host, port) except smtplib.SMTPException as e: diff --git a/plugins/modules/make.py b/plugins/modules/make.py index ba2b1bcca9..141dd2df4d 100644 --- a/plugins/modules/make.py +++ b/plugins/modules/make.py @@ -142,8 +142,7 @@ targets: version_added: 7.2.0 """ -from ansible.module_utils.six import iteritems -from ansible.module_utils.six.moves import shlex_quote +from shlex import quote as shlex_quote from ansible.module_utils.basic import AnsibleModule @@ -200,7 +199,7 @@ def main(): # Fall back to system make make_path = module.get_bin_path('make', required=True) if module.params['params'] is not None: - make_parameters = [k + (('=' + str(v)) if v is not None else '') for k, v in iteritems(module.params['params'])] + make_parameters = [k + (('=' + str(v)) if v is not None else '') for k, v in module.params['params'].items()] else: make_parameters = [] diff --git a/plugins/modules/maven_artifact.py b/plugins/modules/maven_artifact.py index 11e07b538e..9b0d787a3e 100644 --- a/plugins/modules/maven_artifact.py +++ b/plugins/modules/maven_artifact.py @@ -244,6 +244,7 @@ import re from ansible.module_utils.ansible_release import __version__ as ansible_version from re import match +from urllib.parse import urlparse LXML_ETREE_IMP_ERR = None try: @@ -271,7 +272,6 @@ except ImportError: from ansible.module_utils.basic import AnsibleModule, missing_required_lib -from ansible.module_utils.six.moves.urllib.parse import urlparse from ansible.module_utils.urls import fetch_url from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text diff --git a/plugins/modules/monit.py b/plugins/modules/monit.py index 78948d3e16..63c83741b5 100644 --- a/plugins/modules/monit.py +++ b/plugins/modules/monit.py @@ -55,7 +55,6 @@ import re from collections import namedtuple from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import python_2_unicode_compatible STATE_COMMAND_MAP = { @@ -70,7 +69,6 @@ MONIT_SERVICES = ['Process', 'File', 'Fifo', 'Filesystem', 'Directory', 'Remote 'Network'] -@python_2_unicode_compatible class StatusValue(namedtuple("Status", "value, is_pending")): MISSING = 'missing' OK = 'ok' diff --git a/plugins/modules/newrelic_deployment.py b/plugins/modules/newrelic_deployment.py index 8d86f7c20f..63495d9e7f 100644 --- a/plugins/modules/newrelic_deployment.py +++ b/plugins/modules/newrelic_deployment.py @@ -87,7 +87,7 @@ EXAMPLES = r""" from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.urls import fetch_url -from ansible.module_utils.six.moves.urllib.parse import quote +from urllib.parse import quote import json # =========================================== diff --git a/plugins/modules/nexmo.py b/plugins/modules/nexmo.py index e1ac57ecd5..ee65bdda57 100644 --- a/plugins/modules/nexmo.py +++ b/plugins/modules/nexmo.py @@ -69,8 +69,8 @@ EXAMPLES = r""" delegate_to: localhost """ import json +from urllib.parse import urlencode -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.urls import fetch_url, url_argument_spec diff --git a/plugins/modules/ocapi_command.py b/plugins/modules/ocapi_command.py index 0ed0df5612..91fb7ab5e6 100644 --- a/plugins/modules/ocapi_command.py +++ b/plugins/modules/ocapi_command.py @@ -165,10 +165,10 @@ operationStatusId: sample: 2 """ +from urllib.parse import urljoin from ansible.module_utils.basic import AnsibleModule from ansible_collections.community.general.plugins.module_utils.ocapi_utils import OcapiUtils from ansible.module_utils.common.text.converters import to_native -from ansible.module_utils.six.moves.urllib.parse import urljoin # More will be added as module features are expanded CATEGORY_COMMANDS_ALL = { diff --git a/plugins/modules/ocapi_info.py b/plugins/modules/ocapi_info.py index cc109d546a..3eb0422054 100644 --- a/plugins/modules/ocapi_info.py +++ b/plugins/modules/ocapi_info.py @@ -137,10 +137,11 @@ status: } """ +from urllib.parse import urljoin + from ansible.module_utils.basic import AnsibleModule from ansible_collections.community.general.plugins.module_utils.ocapi_utils import OcapiUtils from ansible.module_utils.common.text.converters import to_native -from ansible.module_utils.six.moves.urllib.parse import urljoin # More will be added as module features are expanded CATEGORY_COMMANDS_ALL = { diff --git a/plugins/modules/oneandone_server.py b/plugins/modules/oneandone_server.py index 6122f88bd6..23713890fd 100644 --- a/plugins/modules/oneandone_server.py +++ b/plugins/modules/oneandone_server.py @@ -200,7 +200,6 @@ servers: import os import time -from ansible.module_utils.six.moves import xrange from ansible.module_utils.basic import AnsibleModule from ansible_collections.community.general.plugins.module_utils.oneandone import ( get_datacenter, @@ -576,7 +575,7 @@ def _auto_increment_hostname(count, hostname): return [ hostname % i - for i in xrange(1, count + 1) + for i in range(1, count + 1) ] @@ -588,7 +587,7 @@ def _auto_increment_description(count, description): if '%' in description: return [ description % i - for i in xrange(1, count + 1) + for i in range(1, count + 1) ] else: return [description] * count diff --git a/plugins/modules/osx_defaults.py b/plugins/modules/osx_defaults.py index 5b4ba48f90..f694dbaad2 100644 --- a/plugins/modules/osx_defaults.py +++ b/plugins/modules/osx_defaults.py @@ -138,7 +138,6 @@ from datetime import datetime import re from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import binary_type, text_type # exceptions --------------------------------------------------------------- {{{ @@ -200,7 +199,7 @@ class OSXDefaults(object): if data_type == "string": return str(value) elif data_type in ["bool", "boolean"]: - if isinstance(value, (binary_type, text_type)): + if isinstance(value, (bytes, str)): value = value.lower() if value in [True, 1, "true", "1", "yes"]: return True diff --git a/plugins/modules/ovh_ip_failover.py b/plugins/modules/ovh_ip_failover.py index b5285c41af..a32db78451 100644 --- a/plugins/modules/ovh_ip_failover.py +++ b/plugins/modules/ovh_ip_failover.py @@ -112,6 +112,7 @@ RETURN = r""" """ import time +from urllib.parse import quote_plus try: import ovh @@ -122,7 +123,6 @@ except ImportError: HAS_OVH = False from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import quote_plus def getOvhClient(ansibleModule): diff --git a/plugins/modules/pagerduty_alert.py b/plugins/modules/pagerduty_alert.py index 96287bb566..215ad2d821 100644 --- a/plugins/modules/pagerduty_alert.py +++ b/plugins/modules/pagerduty_alert.py @@ -218,8 +218,8 @@ import json from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.urls import fetch_url -from ansible.module_utils.six.moves.urllib.parse import urlparse, urlencode, urlunparse from datetime import datetime +from urllib.parse import urlparse, urlencode, urlunparse def check(module, name, state, service_id, integration_key, api_key, incident_key=None, http_call=fetch_url): diff --git a/plugins/modules/pids.py b/plugins/modules/pids.py index 55c8b69e40..aa5f772201 100644 --- a/plugins/modules/pids.py +++ b/plugins/modules/pids.py @@ -65,7 +65,6 @@ import abc import re from os.path import basename -from ansible.module_utils import six from ansible.module_utils.basic import AnsibleModule from ansible_collections.community.general.plugins.module_utils import deps from ansible.module_utils.common.text.converters import to_native @@ -80,8 +79,7 @@ class PSAdapterError(Exception): pass -@six.add_metaclass(abc.ABCMeta) -class PSAdapter(object): +class PSAdapter(object, metaclass=abc.ABCMeta): NAME_ATTRS = ('name', 'cmdline') PATTERN_ATTRS = ('name', 'exe', 'cmdline') diff --git a/plugins/modules/portinstall.py b/plugins/modules/portinstall.py index cea6eb8625..8598294a68 100644 --- a/plugins/modules/portinstall.py +++ b/plugins/modules/portinstall.py @@ -64,8 +64,8 @@ EXAMPLES = r""" import re +from shlex import quote as shlex_quote from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves import shlex_quote def query_package(module, name): diff --git a/plugins/modules/pushover.py b/plugins/modules/pushover.py index 0bdee33ac8..483eeae863 100644 --- a/plugins/modules/pushover.py +++ b/plugins/modules/pushover.py @@ -87,8 +87,8 @@ EXAMPLES = r""" delegate_to: localhost """ +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/redhat_subscription.py b/plugins/modules/redhat_subscription.py index d2a35352b0..c2b76fe8ac 100644 --- a/plugins/modules/redhat_subscription.py +++ b/plugins/modules/redhat_subscription.py @@ -270,6 +270,7 @@ subscribed_pool_ids: from os.path import isfile from os import getuid, unlink +import configparser import re import shutil import tempfile @@ -277,7 +278,6 @@ import json from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.common.text.converters import to_native -from ansible.module_utils.six.moves import configparser from ansible.module_utils import distro diff --git a/plugins/modules/rollbar_deployment.py b/plugins/modules/rollbar_deployment.py index 5d2d2f2bb9..383573d8c7 100644 --- a/plugins/modules/rollbar_deployment.py +++ b/plugins/modules/rollbar_deployment.py @@ -83,10 +83,11 @@ EXAMPLES = r""" revision: "{{ lookup('pipe', 'git rev-parse HEAD') }}" user: "{{ lookup('env', 'USER') }}" """ + import traceback +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.common.text.converters import to_native from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/rundeck_job_executions_info.py b/plugins/modules/rundeck_job_executions_info.py index 2e9dd2b721..4c4bd85d09 100644 --- a/plugins/modules/rundeck_job_executions_info.py +++ b/plugins/modules/rundeck_job_executions_info.py @@ -128,8 +128,8 @@ executions: ] """ +from urllib.parse import quote from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import quote from ansible_collections.community.general.plugins.module_utils.rundeck import ( api_argument_spec, api_request diff --git a/plugins/modules/rundeck_job_run.py b/plugins/modules/rundeck_job_run.py index ea3a5add79..768e67967a 100644 --- a/plugins/modules/rundeck_job_run.py +++ b/plugins/modules/rundeck_job_run.py @@ -180,9 +180,9 @@ execution_info: # Modules import from datetime import datetime, timedelta from time import sleep +from urllib.parse import quote from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import quote from ansible_collections.community.general.plugins.module_utils.rundeck import ( api_argument_spec, api_request diff --git a/plugins/modules/sendgrid.py b/plugins/modules/sendgrid.py index c23d6751d9..26021c35c9 100644 --- a/plugins/modules/sendgrid.py +++ b/plugins/modules/sendgrid.py @@ -125,6 +125,7 @@ EXAMPLES = r""" # import os import traceback +from urllib.parse import urlencode from ansible_collections.community.general.plugins.module_utils.version import LooseVersion @@ -137,7 +138,6 @@ except ImportError: HAS_SENDGRID = False from ansible.module_utils.basic import AnsibleModule, missing_required_lib -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.common.text.converters import to_bytes from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/sl_vm.py b/plugins/modules/sl_vm.py index bcda94d72c..9ae0def5c4 100644 --- a/plugins/modules/sl_vm.py +++ b/plugins/modules/sl_vm.py @@ -286,7 +286,6 @@ except ImportError: HAS_SL = False from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six import string_types # TODO: get this info from API @@ -374,7 +373,7 @@ def cancel_instance(module): canceled = True if module.params.get('instance_id') is None and (module.params.get('tags') or module.params.get('hostname') or module.params.get('domain')): tags = module.params.get('tags') - if isinstance(tags, string_types): + if isinstance(tags, str): tags = [module.params.get('tags')] instances = vsManager.list_instances(tags=tags, hostname=module.params.get('hostname'), domain=module.params.get('domain')) for instance in instances: diff --git a/plugins/modules/slack.py b/plugins/modules/slack.py index 084aa7746b..07cd1885f6 100644 --- a/plugins/modules/slack.py +++ b/plugins/modules/slack.py @@ -266,8 +266,8 @@ EXAMPLES = r""" import re from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url +from urllib.parse import urlencode OLD_SLACK_INCOMING_WEBHOOK = 'https://%s/services/hooks/incoming-webhook?token=%s' SLACK_INCOMING_WEBHOOK = 'https://hooks.%s/services/%s' diff --git a/plugins/modules/spectrum_model_attrs.py b/plugins/modules/spectrum_model_attrs.py index d0a1418c2b..acd07042c2 100644 --- a/plugins/modules/spectrum_model_attrs.py +++ b/plugins/modules/spectrum_model_attrs.py @@ -145,7 +145,7 @@ changed_attrs: from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.common.text.converters import to_native from ansible.module_utils.urls import fetch_url -from ansible.module_utils.six.moves.urllib.parse import quote +from urllib.parse import quote import json import re import xml.etree.ElementTree as ET diff --git a/plugins/modules/ssh_config.py b/plugins/modules/ssh_config.py index 306003a597..6844da92a7 100644 --- a/plugins/modules/ssh_config.py +++ b/plugins/modules/ssh_config.py @@ -225,7 +225,6 @@ from copy import deepcopy from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.common.text.converters import to_native -from ansible.module_utils.six import string_types from ansible_collections.community.general.plugins.module_utils._stormssh import ConfigParser, HAS_PARAMIKO, PARAMIKO_IMPORT_ERROR from ansible_collections.community.general.plugins.module_utils.ssh import determine_config_file @@ -301,7 +300,7 @@ class SSHConfig(object): if key.lower() != key: self.module.fail_json(msg="The other_options key {key!r} must be lower case".format(key=key)) if key not in args: - if not isinstance(value, string_types): + if not isinstance(value, str): self.module.fail_json(msg="The other_options value provided for key {key!r} must be a string, got {type}".format(key=key, type=type(value))) args[key] = value diff --git a/plugins/modules/stacki_host.py b/plugins/modules/stacki_host.py index 07cb58981d..58312e8784 100644 --- a/plugins/modules/stacki_host.py +++ b/plugins/modules/stacki_host.py @@ -121,7 +121,7 @@ EXAMPLES = r""" import json from ansible.module_utils.basic import AnsibleModule, env_fallback -from ansible.module_utils.six.moves.urllib.parse import urlencode +from urllib.parse import urlencode from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/telegram.py b/plugins/modules/telegram.py index 70ed49af35..ab84ab75b7 100644 --- a/plugins/modules/telegram.py +++ b/plugins/modules/telegram.py @@ -84,10 +84,10 @@ telegram_error: """ import json +from urllib.parse import quote from ansible.module_utils.basic import AnsibleModule # noinspection PyUnresolvedReferences -from ansible.module_utils.six.moves.urllib.parse import quote from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/terraform.py b/plugins/modules/terraform.py index ebfb57b7ca..7551303575 100644 --- a/plugins/modules/terraform.py +++ b/plugins/modules/terraform.py @@ -281,8 +281,7 @@ command: import os import json import tempfile -from ansible.module_utils.six.moves import shlex_quote -from ansible.module_utils.six import integer_types +from shlex import quote as shlex_quote from ansible.module_utils.basic import AnsibleModule @@ -599,11 +598,11 @@ def main(): ret_out.append('{0}={{{1}}}'.format(k, process_complex_args(v))) elif isinstance(v, list): ret_out.append("{0}={1}".format(k, process_complex_args(v))) - elif isinstance(v, (integer_types, float, str, bool)): + elif isinstance(v, (int, float, str, bool)): ret_out.append('{0}={1}'.format(k, format_args(v))) else: # only to handle anything unforeseen - module.fail_json(msg="Supported types are, dictionaries, lists, strings, integer_types, boolean and float.") + module.fail_json(msg="Supported types are, dictionaries, lists, strings, integers, boolean and float.") if isinstance(vars, list): l_out = [] for item in vars: @@ -611,11 +610,11 @@ def main(): l_out.append("{{{0}}}".format(process_complex_args(item))) elif isinstance(item, list): l_out.append("{0}".format(process_complex_args(item))) - elif isinstance(item, (str, integer_types, float, bool)): + elif isinstance(item, (str, int, float, bool)): l_out.append(format_args(item)) else: # only to handle anything unforeseen - module.fail_json(msg="Supported types are, dictionaries, lists, strings, integer_types, boolean and float.") + module.fail_json(msg="Supported types are, dictionaries, lists, strings, integers, boolean and float.") ret_out.append("[{0}]".format(",".join(l_out))) return ",".join(ret_out) diff --git a/plugins/modules/timezone.py b/plugins/modules/timezone.py index f2c91220f4..85e212ab84 100644 --- a/plugins/modules/timezone.py +++ b/plugins/modules/timezone.py @@ -71,7 +71,6 @@ import string import filecmp from ansible.module_utils.basic import AnsibleModule, get_distribution -from ansible.module_utils.six import iteritems class Timezone(object): @@ -189,7 +188,7 @@ class Timezone(object): `--diff` option of ansible-playbook. """ diff = {phase1: {}, phase2: {}} - for key, value in iteritems(self.value): + for key, value in self.value.items(): diff[phase1][key] = value[phase1] diff[phase2][key] = value[phase2] return diff @@ -205,12 +204,12 @@ class Timezone(object): """ if phase == 'planned': return - for key, value in iteritems(self.value): + for key, value in self.value.items(): value[phase] = self.get(key, phase) def change(self): """Make the changes effect based on `self.value`.""" - for key, value in iteritems(self.value): + for key, value in self.value.items(): if value['before'] != value['planned']: self.set(key, value['planned']) diff --git a/plugins/modules/twilio.py b/plugins/modules/twilio.py index 583b5ceb99..f19515372f 100644 --- a/plugins/modules/twilio.py +++ b/plugins/modules/twilio.py @@ -107,8 +107,8 @@ EXAMPLES = r""" # ======================================= # twilio module support methods # +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url diff --git a/plugins/modules/typetalk.py b/plugins/modules/typetalk.py index 669bcfdb79..d85a4586c0 100644 --- a/plugins/modules/typetalk.py +++ b/plugins/modules/typetalk.py @@ -58,9 +58,9 @@ EXAMPLES = r""" """ import json +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url, ConnectionError diff --git a/plugins/modules/uptimerobot.py b/plugins/modules/uptimerobot.py index cf79a504a4..133c9ff44f 100644 --- a/plugins/modules/uptimerobot.py +++ b/plugins/modules/uptimerobot.py @@ -57,9 +57,9 @@ EXAMPLES = r""" """ import json +from urllib.parse import urlencode from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.six.moves.urllib.parse import urlencode from ansible.module_utils.urls import fetch_url from ansible.module_utils.common.text.converters import to_text diff --git a/plugins/modules/xenserver_guest.py b/plugins/modules/xenserver_guest.py index 94014852a8..d68336ce4f 100644 --- a/plugins/modules/xenserver_guest.py +++ b/plugins/modules/xenserver_guest.py @@ -542,7 +542,6 @@ except ImportError: from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.common.network import is_mac -from ansible.module_utils import six from ansible_collections.community.general.plugins.module_utils.xenserver import ( xenserver_common_argument_spec, XenServerObject, get_object_ref, gather_vm_params, gather_vm_facts, set_vm_power_state, @@ -714,7 +713,7 @@ class XenServerVM(XenServerObject): try: for change in config_changes: - if isinstance(change, six.string_types): + if isinstance(change, str): if change == "name": self.xapi_session.xenapi.VM.set_name_label(self.vm_ref, self.module.params['name']) elif change == "name_desc": diff --git a/plugins/modules/xml.py b/plugins/modules/xml.py index df60f28565..9305ef85a4 100644 --- a/plugins/modules/xml.py +++ b/plugins/modules/xml.py @@ -361,6 +361,7 @@ import os import re import traceback +from collections.abc import MutableMapping from io import BytesIO from ansible_collections.community.general.plugins.module_utils.version import LooseVersion @@ -374,8 +375,6 @@ except ImportError: HAS_LXML = False from ansible.module_utils.basic import AnsibleModule, json_dict_bytes_to_unicode, missing_required_lib -from ansible.module_utils.six import iteritems, string_types -from ansible.module_utils.six.moves.collections_abc import MutableMapping from ansible.module_utils.common.text.converters import to_bytes, to_native _IDENT = r"[a-zA-Z-][a-zA-Z0-9_\-\.]*" @@ -746,13 +745,13 @@ def child_to_element(module, child, in_type): except etree.XMLSyntaxError as e: module.fail_json(msg="Error while parsing child element: %s" % e) elif in_type == 'yaml': - if isinstance(child, string_types): + if isinstance(child, str): return etree.Element(child) elif isinstance(child, MutableMapping): if len(child) > 1: module.fail_json(msg="Can only create children from hashes with one key") - (key, value) = next(iteritems(child)) + (key, value) = list(child.items())[0] if isinstance(value, MutableMapping): children = value.pop('_', None) child_value = value.pop('+value', None) diff --git a/plugins/modules/zpool_facts.py b/plugins/modules/zpool_facts.py index 55ac8ef7c8..f04cf3632e 100644 --- a/plugins/modules/zpool_facts.py +++ b/plugins/modules/zpool_facts.py @@ -116,7 +116,6 @@ parsable: from collections import defaultdict -from ansible.module_utils.six import iteritems from ansible.module_utils.basic import AnsibleModule @@ -152,7 +151,7 @@ class ZPoolFacts(object): self._pools[pool].update({prop: value}) - for k, v in iteritems(self._pools): + for k, v in self._pools.items(): v.update({'name': k}) self.facts.append(v) diff --git a/plugins/modules/zypper_repository.py b/plugins/modules/zypper_repository.py index c010c55aac..7f9e655219 100644 --- a/plugins/modules/zypper_repository.py +++ b/plugins/modules/zypper_repository.py @@ -126,6 +126,7 @@ EXAMPLES = r""" runrefresh: true """ +import configparser import traceback XML_IMP_ERR = None @@ -140,9 +141,7 @@ from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.urls import fetch_url from ansible.module_utils.common.text.converters import to_text -from ansible.module_utils.six import PY3 -from ansible.module_utils.six.moves import configparser, StringIO -from io import open +from io import StringIO, open from ansible_collections.community.general.plugins.module_utils.version import LooseVersion @@ -408,10 +407,7 @@ def main(): repofile = configparser.ConfigParser() try: - if PY3: - repofile.read_file(StringIO(repofile_text)) - else: - repofile.readfp(StringIO(repofile_text)) + repofile.read_file(StringIO(repofile_text)) except configparser.Error: module.fail_json(msg='Invalid format, .repo file could not be parsed') diff --git a/tests/sanity/ignore-2.20.txt b/tests/sanity/ignore-2.20.txt index 70a654d7db..ab7e6e3c7c 100644 --- a/tests/sanity/ignore-2.20.txt +++ b/tests/sanity/ignore-2.20.txt @@ -1,64 +1,14 @@ -plugins/module_utils/csv.py pylint:ansible-bad-import-from -plugins/module_utils/gitlab.py pylint:ansible-bad-import-from -plugins/module_utils/homebrew.py pylint:ansible-bad-import-from -plugins/module_utils/ipa.py pylint:ansible-bad-import-from -plugins/module_utils/net_tools/pritunl/api.py pylint:ansible-bad-import-from -plugins/module_utils/opennebula.py pylint:ansible-bad-import-from -plugins/module_utils/oracle/oci_utils.py pylint:ansible-bad-import-from -plugins/module_utils/pkg_req.py pylint:ansible-bad-import-from -plugins/module_utils/redfish_utils.py pylint:ansible-bad-import-from -plugins/module_utils/saslprep.py pylint:ansible-bad-import-from plugins/module_utils/univention_umc.py pylint:use-yield-from # suggested construct does not work with Python 2 -plugins/modules/apache2_mod_proxy.py pylint:ansible-bad-import-from -plugins/modules/circonus_annotation.py pylint:ansible-bad-import-from -plugins/modules/cobbler_system.py pylint:ansible-bad-import-from plugins/modules/consul_session.py validate-modules:parameter-state-invalid-choice -plugins/modules/dnsmadeeasy.py pylint:ansible-bad-import-from -plugins/modules/homebrew.py pylint:ansible-bad-import-from -plugins/modules/homebrew_cask.py pylint:ansible-bad-import-from plugins/modules/homectl.py import-3.11 # Uses deprecated stdlib library 'crypt' plugins/modules/homectl.py import-3.12 # Uses deprecated stdlib library 'crypt' plugins/modules/iptables_state.py validate-modules:undocumented-parameter # params _back and _timeout used by action plugin -plugins/modules/java_keystore.py pylint:ansible-bad-import-from -plugins/modules/jenkins_plugin.py pylint:ansible-bad-import-from -plugins/modules/ldap_search.py pylint:ansible-bad-import-from plugins/modules/lxc_container.py validate-modules:use-run-command-not-popen -plugins/modules/mail.py pylint:ansible-bad-import-from -plugins/modules/make.py pylint:ansible-bad-import-from -plugins/modules/monit.py pylint:ansible-bad-import-from -plugins/modules/osx_defaults.py pylint:ansible-bad-import-from plugins/modules/osx_defaults.py validate-modules:parameter-state-invalid-choice plugins/modules/parted.py validate-modules:parameter-state-invalid-choice plugins/modules/rhevm.py validate-modules:parameter-state-invalid-choice -plugins/modules/sl_vm.py pylint:ansible-bad-import-from -plugins/modules/ssh_config.py pylint:ansible-bad-import-from -plugins/modules/terraform.py pylint:ansible-bad-import-from -plugins/modules/timezone.py pylint:ansible-bad-import-from plugins/modules/udm_user.py import-3.11 # Uses deprecated stdlib library 'crypt' plugins/modules/udm_user.py import-3.12 # Uses deprecated stdlib library 'crypt' plugins/modules/xfconf.py validate-modules:return-syntax-error -plugins/modules/xml.py pylint:ansible-bad-import-from -plugins/modules/zpool_facts.py pylint:ansible-bad-import-from -plugins/modules/zypper_repository.py pylint:ansible-bad-import-from -tests/unit/plugins/module_utils/identity/keycloak/test_keycloak_connect.py pylint:ansible-bad-import-from -tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/conftest.py pylint:ansible-bad-import-from tests/unit/plugins/modules/uthelper.py pylint:use-yield-from # suggested construct does not work with Python 2 tests/unit/plugins/modules/test_gio_mime.yaml no-smart-quotes -tests/unit/plugins/modules/test_keycloak_authentication.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_authentication_required_actions.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_client.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_client_rolemapping.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_clientscope.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_component.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_identity_provider.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_realm.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_realm_info.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_realm_keys.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_realm_keys_metadata_info.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_role.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_user.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_user_federation.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_keycloak_userprofile.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_pritunl_org.py pylint:ansible-bad-import-from -tests/unit/plugins/modules/test_pritunl_user.py pylint:ansible-bad-import-from diff --git a/tests/unit/plugins/lookup/test_bitwarden.py b/tests/unit/plugins/lookup/test_bitwarden.py index 861b511071..75c7cd3ca2 100644 --- a/tests/unit/plugins/lookup/test_bitwarden.py +++ b/tests/unit/plugins/lookup/test_bitwarden.py @@ -9,7 +9,6 @@ from ansible_collections.community.internal_test_tools.tests.unit.compat import from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import patch from ansible.errors import AnsibleError -from ansible.module_utils import six from ansible.plugins.loader import lookup_loader from ansible_collections.community.general.plugins.lookup.bitwarden import Bitwarden, BitwardenException from ansible.parsing.ajson import AnsibleJSONEncoder @@ -240,7 +239,7 @@ class TestLookupModule(unittest.TestCase): # Entry 0, "a_test" of the test input should have no duplicates. record = MOCK_RECORDS[0] record_name = record['name'] - for k, v in six.iteritems(record['login']): + for k, v in record['login'].items(): self.assertEqual([v], self.lookup.run([record_name], field=k)[0]) diff --git a/tests/unit/plugins/lookup/test_lastpass.py b/tests/unit/plugins/lookup/test_lastpass.py index be3fe378c5..5be71a11bc 100644 --- a/tests/unit/plugins/lookup/test_lastpass.py +++ b/tests/unit/plugins/lookup/test_lastpass.py @@ -11,7 +11,6 @@ from ansible_collections.community.internal_test_tools.tests.unit.compat import from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import patch from ansible.errors import AnsibleError -from ansible.module_utils import six from ansible.plugins.loader import lookup_loader from ansible_collections.community.general.plugins.lookup.lastpass import LPass, LPassException @@ -142,7 +141,7 @@ class TestLPass(unittest.TestCase): lp = MockLPass() for entry in MOCK_ENTRIES: entry_id = entry.get('id') - for k, v in six.iteritems(entry): + for k, v in entry.items(): self.assertEqual(v.strip(), lp.get_field(entry_id, k)) @@ -155,7 +154,7 @@ class TestLastpassPlugin(unittest.TestCase): def test_lastpass_plugin_normal(self): for entry in MOCK_ENTRIES: entry_id = entry.get('id') - for k, v in six.iteritems(entry): + for k, v in entry.items(): self.assertEqual(v.strip(), self.lookup.run([entry_id], field=k)[0]) diff --git a/tests/unit/plugins/module_utils/identity/keycloak/test_keycloak_connect.py b/tests/unit/plugins/module_utils/identity/keycloak/test_keycloak_connect.py index 459fc817bb..efe71d4fac 100644 --- a/tests/unit/plugins/module_utils/identity/keycloak/test_keycloak_connect.py +++ b/tests/unit/plugins/module_utils/identity/keycloak/test_keycloak_connect.py @@ -5,14 +5,14 @@ from __future__ import annotations import pytest +from io import StringIO from itertools import count +from urllib.error import HTTPError from ansible_collections.community.general.plugins.module_utils.identity.keycloak.keycloak import ( get_token, KeycloakError, ) -from ansible.module_utils.six import StringIO -from ansible.module_utils.six.moves.urllib.error import HTTPError module_params_creds = { 'auth_keycloak_url': 'http://keycloak.url/auth', diff --git a/tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py b/tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py index 73bab34394..6b40edf4a8 100644 --- a/tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py +++ b/tests/unit/plugins/module_utils/net_tools/pritunl/test_api.py @@ -8,7 +8,6 @@ import json import pytest from ansible.module_utils.common.dict_transformations import dict_merge -from ansible.module_utils.six import iteritems from ansible_collections.community.general.plugins.module_utils.net_tools.pritunl import ( api, ) @@ -527,7 +526,7 @@ class TestPritunlApi: ) # Ensure provided settings match with the ones returned by Pritunl - for k, v in iteritems(pritunl_organization_data): + for k, v in pritunl_organization_data.items(): assert create_response[k] == v @pytest.mark.parametrize("org_id", [("58070daee63f3b2e6e472c36")]) @@ -553,7 +552,7 @@ class TestPritunlApi: ) # Ensure provided settings match with the ones returned by Pritunl - for k, v in iteritems(pritunl_user_data): + for k, v in pritunl_user_data.items(): assert create_response[k] == v # Update the newly created user to ensure only certain settings are changed @@ -576,7 +575,8 @@ class TestPritunlApi: ) # Ensure only certain settings changed and the rest remained untouched. - for k, v in iteritems(update_response): + # TODO: there is something wrong with this check! + for k, v in update_response.items(): if k in update_response: assert update_response[k] == v else: diff --git a/tests/unit/plugins/module_utils/xenserver/conftest.py b/tests/unit/plugins/module_utils/xenserver/conftest.py index 2d0208d722..92dfdee1ff 100644 --- a/tests/unit/plugins/module_utils/xenserver/conftest.py +++ b/tests/unit/plugins/module_utils/xenserver/conftest.py @@ -13,7 +13,6 @@ import json import pytest from .FakeAnsibleModule import FakeAnsibleModule -from ansible.module_utils import six from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import MagicMock @@ -98,7 +97,7 @@ def fixture_data_from_file(request): fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') fixture_data = {} - if isinstance(request.param, six.string_types): + if isinstance(request.param, str): request.param = [request.param] for fixture_name in request.param: diff --git a/tests/unit/plugins/modules/conftest.py b/tests/unit/plugins/modules/conftest.py index adfb8035fc..f087c3f5a9 100644 --- a/tests/unit/plugins/modules/conftest.py +++ b/tests/unit/plugins/modules/conftest.py @@ -6,18 +6,16 @@ from __future__ import annotations import contextlib as _contextlib import json +from collections.abc import MutableMapping import pytest -from ansible.module_utils.six import string_types -from ansible.module_utils.six.moves.collections_abc import MutableMapping - from ansible_collections.community.general.plugins.module_utils import deps from ansible_collections.community.internal_test_tools.tests.unit.plugins.modules.utils import set_module_args as _set_module_args def _fix_ansible_args(args): - if isinstance(args, string_types): + if isinstance(args, str): # This should be deprecated! return json.loads(args) diff --git a/tests/unit/plugins/modules/test_jenkins_plugin.py b/tests/unit/plugins/modules/test_jenkins_plugin.py index 58248f921a..e451aa56d1 100644 --- a/tests/unit/plugins/modules/test_jenkins_plugin.py +++ b/tests/unit/plugins/modules/test_jenkins_plugin.py @@ -7,9 +7,9 @@ from __future__ import annotations from io import BytesIO import json from collections import OrderedDict +from collections.abc import Mapping from ansible_collections.community.general.plugins.modules.jenkins_plugin import JenkinsPlugin -from ansible.module_utils.six.moves.collections_abc import Mapping from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import ( MagicMock, patch, diff --git a/tests/unit/plugins/modules/test_keycloak_authentication.py b/tests/unit/plugins/modules/test_keycloak_authentication.py index 15debd94c2..7402a2a029 100644 --- a/tests/unit/plugins/modules/test_keycloak_authentication.py +++ b/tests/unit/plugins/modules/test_keycloak_authentication.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_authentication +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_authentication_flow_by_alias=None, copy_auth_flow=None, create_empty_auth_flow=None, diff --git a/tests/unit/plugins/modules/test_keycloak_authentication_required_actions.py b/tests/unit/plugins/modules/test_keycloak_authentication_required_actions.py index d41e5e0ad9..8bdf666cb0 100644 --- a/tests/unit/plugins/modules/test_keycloak_authentication_required_actions.py +++ b/tests/unit/plugins/modules/test_keycloak_authentication_required_actions.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_authentication_required_actions +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api( diff --git a/tests/unit/plugins/modules/test_keycloak_client.py b/tests/unit/plugins/modules/test_keycloak_client.py index dd082145bb..480b7334fb 100644 --- a/tests/unit/plugins/modules/test_keycloak_client.py +++ b/tests/unit/plugins/modules/test_keycloak_client.py @@ -14,10 +14,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_client +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_client_by_clientid=None, get_client_by_id=None, update_client=None, create_client=None, diff --git a/tests/unit/plugins/modules/test_keycloak_client_rolemapping.py b/tests/unit/plugins/modules/test_keycloak_client_rolemapping.py index ef21dbe80c..71923c048a 100644 --- a/tests/unit/plugins/modules/test_keycloak_client_rolemapping.py +++ b/tests/unit/plugins/modules/test_keycloak_client_rolemapping.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_client_rolemapping +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_group_by_name=None, get_client_id=None, get_client_role_id_by_name=None, diff --git a/tests/unit/plugins/modules/test_keycloak_clientscope.py b/tests/unit/plugins/modules/test_keycloak_clientscope.py index 0633dab9c4..041a0dbdc5 100644 --- a/tests/unit/plugins/modules/test_keycloak_clientscope.py +++ b/tests/unit/plugins/modules/test_keycloak_clientscope.py @@ -14,10 +14,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_clientscope +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_clientscope_by_name=None, get_clientscope_by_clientscopeid=None, create_clientscope=None, diff --git a/tests/unit/plugins/modules/test_keycloak_component.py b/tests/unit/plugins/modules/test_keycloak_component.py index b8dffc9493..437064ea8c 100644 --- a/tests/unit/plugins/modules/test_keycloak_component.py +++ b/tests/unit/plugins/modules/test_keycloak_component.py @@ -7,9 +7,9 @@ from __future__ import annotations from contextlib import contextmanager +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO from ansible_collections.community.general.plugins.modules import keycloak_realm_key from ansible_collections.community.internal_test_tools.tests.unit.compat import unittest from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import patch diff --git a/tests/unit/plugins/modules/test_keycloak_identity_provider.py b/tests/unit/plugins/modules/test_keycloak_identity_provider.py index c02e4c76a3..92316edfc0 100644 --- a/tests/unit/plugins/modules/test_keycloak_identity_provider.py +++ b/tests/unit/plugins/modules/test_keycloak_identity_provider.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_identity_provider +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_identity_provider, create_identity_provider=None, update_identity_provider=None, delete_identity_provider=None, diff --git a/tests/unit/plugins/modules/test_keycloak_realm.py b/tests/unit/plugins/modules/test_keycloak_realm.py index f72115bb77..2766e45552 100644 --- a/tests/unit/plugins/modules/test_keycloak_realm.py +++ b/tests/unit/plugins/modules/test_keycloak_realm.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_realm +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_realm_by_id, create_realm=None, update_realm=None, delete_realm=None): diff --git a/tests/unit/plugins/modules/test_keycloak_realm_info.py b/tests/unit/plugins/modules/test_keycloak_realm_info.py index d9f84ef4fb..358849e8db 100644 --- a/tests/unit/plugins/modules/test_keycloak_realm_info.py +++ b/tests/unit/plugins/modules/test_keycloak_realm_info.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_realm_info +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_realm_info_by_id): diff --git a/tests/unit/plugins/modules/test_keycloak_realm_keys.py b/tests/unit/plugins/modules/test_keycloak_realm_keys.py index aa9883c5d3..0fd2240d4e 100644 --- a/tests/unit/plugins/modules/test_keycloak_realm_keys.py +++ b/tests/unit/plugins/modules/test_keycloak_realm_keys.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_realm_key +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_components=None, get_component=None, create_component=None, update_component=None, delete_component=None): diff --git a/tests/unit/plugins/modules/test_keycloak_realm_keys_metadata_info.py b/tests/unit/plugins/modules/test_keycloak_realm_keys_metadata_info.py index 693d9ee416..1a15c20dbc 100644 --- a/tests/unit/plugins/modules/test_keycloak_realm_keys_metadata_info.py +++ b/tests/unit/plugins/modules/test_keycloak_realm_keys_metadata_info.py @@ -7,9 +7,9 @@ from __future__ import annotations from contextlib import contextmanager +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO from ansible_collections.community.general.plugins.modules import \ keycloak_realm_keys_metadata_info from ansible_collections.community.internal_test_tools.tests.unit.compat import unittest diff --git a/tests/unit/plugins/modules/test_keycloak_role.py b/tests/unit/plugins/modules/test_keycloak_role.py index c307dd6dc3..6d59dd3c6c 100644 --- a/tests/unit/plugins/modules/test_keycloak_role.py +++ b/tests/unit/plugins/modules/test_keycloak_role.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_role +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_realm_role=None, create_realm_role=None, update_realm_role=None, delete_realm_role=None, diff --git a/tests/unit/plugins/modules/test_keycloak_user.py b/tests/unit/plugins/modules/test_keycloak_user.py index 94385671ab..447d8eb490 100644 --- a/tests/unit/plugins/modules/test_keycloak_user.py +++ b/tests/unit/plugins/modules/test_keycloak_user.py @@ -14,10 +14,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_user +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_user_by_username=None, diff --git a/tests/unit/plugins/modules/test_keycloak_user_federation.py b/tests/unit/plugins/modules/test_keycloak_user_federation.py index 040d3d1b5a..f8ba6733f7 100644 --- a/tests/unit/plugins/modules/test_keycloak_user_federation.py +++ b/tests/unit/plugins/modules/test_keycloak_user_federation.py @@ -13,10 +13,9 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_user_federation +from io import StringIO from itertools import count -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_components=None, get_component=None, create_component=None, update_component=None, delete_component=None): diff --git a/tests/unit/plugins/modules/test_keycloak_userprofile.py b/tests/unit/plugins/modules/test_keycloak_userprofile.py index 37c8adde45..c29c1a8eae 100644 --- a/tests/unit/plugins/modules/test_keycloak_userprofile.py +++ b/tests/unit/plugins/modules/test_keycloak_userprofile.py @@ -13,12 +13,11 @@ from ansible_collections.community.internal_test_tools.tests.unit.plugins.module from ansible_collections.community.general.plugins.modules import keycloak_userprofile +from io import StringIO from itertools import count from json import dumps -from ansible.module_utils.six import StringIO - @contextmanager def patch_keycloak_api(get_components=None, get_component=None, create_component=None, update_component=None, delete_component=None): diff --git a/tests/unit/plugins/modules/test_ocapi_command.py b/tests/unit/plugins/modules/test_ocapi_command.py index bdb977dfe5..4c5217f882 100644 --- a/tests/unit/plugins/modules/test_ocapi_command.py +++ b/tests/unit/plugins/modules/test_ocapi_command.py @@ -7,6 +7,7 @@ from __future__ import annotations import os import shutil import tempfile +from urllib.parse import urljoin from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import patch from ansible_collections.community.internal_test_tools.tests.unit.compat import unittest @@ -14,7 +15,6 @@ from ansible.module_utils import basic import ansible_collections.community.general.plugins.modules.ocapi_command as module from ansible_collections.community.internal_test_tools.tests.unit.plugins.modules.utils import AnsibleExitJson, AnsibleFailJson from ansible_collections.community.internal_test_tools.tests.unit.plugins.modules.utils import set_module_args, exit_json, fail_json -from ansible.module_utils.six.moves.urllib.parse import urljoin MOCK_BASE_URI = "mockBaseUri/" diff --git a/tests/unit/plugins/modules/test_pritunl_org.py b/tests/unit/plugins/modules/test_pritunl_org.py index 835bff3c43..ed3618d147 100644 --- a/tests/unit/plugins/modules/test_pritunl_org.py +++ b/tests/unit/plugins/modules/test_pritunl_org.py @@ -7,7 +7,6 @@ from __future__ import annotations import sys from ansible.module_utils.common.dict_transformations import dict_merge -from ansible.module_utils.six import iteritems from ansible_collections.community.general.plugins.modules import ( pritunl_org, ) @@ -108,7 +107,7 @@ class TestPritunlOrg(ModuleTestCase): # Ensure both calls resulted in the same returned value # except for changed which should be false the second time - for k, v in iteritems(idempotent_exc): + for k, v in idempotent_exc.items(): if k == "changed": self.assertFalse(idempotent_exc[k]) else: diff --git a/tests/unit/plugins/modules/test_pritunl_user.py b/tests/unit/plugins/modules/test_pritunl_user.py index 37ad4238c5..1c3c428cba 100644 --- a/tests/unit/plugins/modules/test_pritunl_user.py +++ b/tests/unit/plugins/modules/test_pritunl_user.py @@ -7,7 +7,6 @@ from __future__ import annotations import sys from ansible.module_utils.common.dict_transformations import dict_merge -from ansible.module_utils.six import iteritems from ansible_collections.community.general.plugins.modules import ( pritunl_user, ) @@ -153,7 +152,7 @@ class TestPritunlUser(ModuleTestCase): update_exc = update_result.exception.args[0] # Ensure only certain settings changed and the rest remained untouched. - for k, v in iteritems(update_exc): + for k, v in update_exc.items(): if k in new_user_params: assert update_exc[k] == v else: