From 2865a3c52e72bcf70ef95c8f9787b650addeec51 Mon Sep 17 00:00:00 2001 From: Ani Sinha Date: Wed, 29 May 2024 03:34:38 +0530 Subject: [PATCH 4/4] Update pylint version to support python 3.12 (#5338) RH-Author: Ani Sinha RH-MergeRequest: 93: Update pylint version to support python 3.12 (#5338) RH-Jira: RHEL-44599 RH-Acked-by: Emanuele Giuseppe Esposito RH-Acked-by: Miroslav Rezanina RH-Commit: [1/1] 979ef05888d5d9c0fd81a84249eb86410846ef33 (anisinha/cloud-init) Fedora 39 and above comes with python version 3.12. When running `tox -e pylint` on cloud-init, we may experience issue such as the one reported here: https://github.com/pylint-dev/pylint/issues/8782 Minimum version of pylint required in order to support python 3.12 is 3.0.2. Please see https://github.com/pylint-dev/astroid/issues/2201 . Upon further experimentation, it is seen that we need minimum pylint version 3.2.0 for cloud-init. Update tox.ini in order to use this pylint version. Signed-off-by: Ani Sinha (cherry picked from commit 5ad609ffdf4bb76c5665e12e34e1867b72bd4435) --- cloudinit/config/cc_mounts.py | 4 ++++ cloudinit/distros/bsd.py | 2 ++ cloudinit/distros/netbsd.py | 2 +- cloudinit/sources/DataSourceAzure.py | 2 +- cloudinit/sources/DataSourceEc2.py | 3 ++- cloudinit/sources/DataSourceLXD.py | 2 +- tests/integration_tests/conftest.py | 6 +++--- tests/integration_tests/util.py | 2 +- tests/unittests/config/test_cc_ntp.py | 2 ++ tests/unittests/sources/test_gce.py | 1 + tests/unittests/test_util.py | 2 ++ tox.ini | 2 +- 12 files changed, 21 insertions(+), 9 deletions(-) diff --git a/cloudinit/config/cc_mounts.py b/cloudinit/config/cc_mounts.py index 4cc32be5..3f690d06 100644 --- a/cloudinit/config/cc_mounts.py +++ b/cloudinit/config/cc_mounts.py @@ -304,6 +304,10 @@ def create_swapfile(fname: str, size: str) -> None: "bs=1M", "count=%s" % size, ] + else: + raise subp.ProcessExecutionError( + "Missing dependency: 'dd' and 'fallocate' are not available" + ) try: subp.subp(cmd, capture=True) diff --git a/cloudinit/distros/bsd.py b/cloudinit/distros/bsd.py index 995a1ba2..b0e63964 100644 --- a/cloudinit/distros/bsd.py +++ b/cloudinit/distros/bsd.py @@ -120,6 +120,8 @@ class BSD(distros.Distro): if not self.pkg_cmd_upgrade_prefix: return cmd = self.pkg_cmd_upgrade_prefix + else: + cmd = [] if args and isinstance(args, str): cmd.append(args) diff --git a/cloudinit/distros/netbsd.py b/cloudinit/distros/netbsd.py index e8b9bcd5..972528c6 100644 --- a/cloudinit/distros/netbsd.py +++ b/cloudinit/distros/netbsd.py @@ -12,7 +12,7 @@ import cloudinit.distros.bsd from cloudinit import subp, util try: - import crypt + import crypt # pylint: disable=W4901 salt = crypt.METHOD_BLOWFISH # pylint: disable=E1101 blowfish_hash: Any = functools.partial( diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py index bd654cc0..11dc6686 100644 --- a/cloudinit/sources/DataSourceAzure.py +++ b/cloudinit/sources/DataSourceAzure.py @@ -49,7 +49,7 @@ from cloudinit.sources.helpers.azure import ( from cloudinit.url_helper import UrlError try: - import crypt + import crypt # pylint: disable=W4901 blowfish_hash: Any = functools.partial( crypt.crypt, salt=f"$6${util.rand_str(strlen=16)}" diff --git a/cloudinit/sources/DataSourceEc2.py b/cloudinit/sources/DataSourceEc2.py index 1b81b21f..28822e37 100644 --- a/cloudinit/sources/DataSourceEc2.py +++ b/cloudinit/sources/DataSourceEc2.py @@ -333,6 +333,8 @@ class DataSourceEc2(sources.DataSource): return None def wait_for_metadata_service(self): + urls = [] + start_time = 0 mcfg = self.ds_cfg url_params = self.get_url_params() @@ -366,7 +368,6 @@ class DataSourceEc2(sources.DataSource): and self.cloud_name not in IDMSV2_SUPPORTED_CLOUD_PLATFORMS ): # if we can't get a token, use instance-id path - urls = [] url2base = {} url_path = "{ver}/meta-data/instance-id".format( ver=self.min_metadata_version diff --git a/cloudinit/sources/DataSourceLXD.py b/cloudinit/sources/DataSourceLXD.py index cd316101..4c95b907 100644 --- a/cloudinit/sources/DataSourceLXD.py +++ b/cloudinit/sources/DataSourceLXD.py @@ -331,7 +331,7 @@ class MetaDataKeys(Flag): CONFIG = auto() DEVICES = auto() META_DATA = auto() - ALL = CONFIG | DEVICES | META_DATA + ALL = CONFIG | DEVICES | META_DATA # pylint: disable=E1131 class _MetaDataReader: diff --git a/tests/integration_tests/conftest.py b/tests/integration_tests/conftest.py index ccbf6a71..58133815 100644 --- a/tests/integration_tests/conftest.py +++ b/tests/integration_tests/conftest.py @@ -273,7 +273,7 @@ def _client( @pytest.fixture -def client( +def client( # pylint: disable=W0135 request, fixture_utils, session_cloud, setup_image ) -> Iterator[IntegrationInstance]: """Provide a client that runs for every test.""" @@ -282,7 +282,7 @@ def client( @pytest.fixture(scope="module") -def module_client( +def module_client( # pylint: disable=W0135 request, fixture_utils, session_cloud, setup_image ) -> Iterator[IntegrationInstance]: """Provide a client that runs once per module.""" @@ -291,7 +291,7 @@ def module_client( @pytest.fixture(scope="class") -def class_client( +def class_client( # pylint: disable=W0135 request, fixture_utils, session_cloud, setup_image ) -> Iterator[IntegrationInstance]: """Provide a client that runs once per class.""" diff --git a/tests/integration_tests/util.py b/tests/integration_tests/util.py index 8ee3631d..cbe00c83 100644 --- a/tests/integration_tests/util.py +++ b/tests/integration_tests/util.py @@ -187,7 +187,7 @@ def wait_for_cloud_init(client: "IntegrationInstance", num_retries: int = 30): except Exception as e: last_exception = e time.sleep(1) - raise Exception( + raise Exception( # pylint: disable=W0719 "cloud-init status did not return successfully." ) from last_exception diff --git a/tests/unittests/config/test_cc_ntp.py b/tests/unittests/config/test_cc_ntp.py index 74ccf2de..6f6c3360 100644 --- a/tests/unittests/config/test_cc_ntp.py +++ b/tests/unittests/config/test_cc_ntp.py @@ -249,6 +249,7 @@ class TestNtp(FilesystemMockingTestCase): ) def _get_expected_pools(self, pools, distro, client): + expected_pools = None if client in ["ntp", "chrony"]: if client == "ntp" and distro == "alpine": # NTP for Alpine Linux is Busybox's ntp which does not @@ -264,6 +265,7 @@ class TestNtp(FilesystemMockingTestCase): return expected_pools def _get_expected_servers(self, servers, distro, client): + expected_servers = None if client in ["ntp", "chrony"]: if client == "ntp" and distro == "alpine": # NTP for Alpine Linux is Busybox's ntp which only supports diff --git a/tests/unittests/sources/test_gce.py b/tests/unittests/sources/test_gce.py index 6fc31ddc..1617f694 100644 --- a/tests/unittests/sources/test_gce.py +++ b/tests/unittests/sources/test_gce.py @@ -101,6 +101,7 @@ class TestDataSourceGCE(test_helpers.ResponsesTestCase): gce_meta = GCE_META def _request_callback(request): + recursive = False url_path = urlparse(request.url).path if url_path.startswith("/computeMetadata/v1/"): path = url_path.split("/computeMetadata/v1/")[1:][0] diff --git a/tests/unittests/test_util.py b/tests/unittests/test_util.py index 70edb40b..b534a1a7 100644 --- a/tests/unittests/test_util.py +++ b/tests/unittests/test_util.py @@ -1700,6 +1700,8 @@ class TestRedirectOutputPreexecFn: args = (test_string, None) elif request.param == "errfmt": args = (None, test_string) + else: + args = (None, None) with mock.patch(M_PATH + "subprocess.Popen") as m_popen: util.redirect_output(*args) diff --git a/tox.ini b/tox.ini index 473e937c..85af1a14 100644 --- a/tox.ini +++ b/tox.ini @@ -25,7 +25,7 @@ hypothesis==6.31.6 hypothesis_jsonschema==0.20.1 isort==5.10.1 mypy==0.950 -pylint==2.13.9 +pylint==3.2.0 pytest==7.0.1 ruff==0.0.285 types-jsonschema==4.4.2 -- 2.39.3