Migrate away from the deprecated distutils

This commit is contained in:
Richard Hughes 2022-07-19 12:16:00 +01:00
parent c857c9e95d
commit fd458cd0de
5 changed files with 35 additions and 17 deletions

View File

@ -1374,6 +1374,24 @@
<package variant="x86_64" /> <package variant="x86_64" />
</distro> </distro>
</dependency> </dependency>
<dependency type="build" id="python3-packaging">
<distro id="fedora">
<package variant="x86_64" />
<package variant="aarch64" />
</distro>
<distro id="arch">
<package variant="x86_64">python-packaging</package>
</distro>
<distro id="debian">
<control />
<package variant="x86_64" />
<package variant="i386" />
</distro>
<distro id="ubuntu">
<control />
<package variant="x86_64" />
</distro>
</dependency>
<dependency type="build" id="python3-requests"> <dependency type="build" id="python3-requests">
<distro id="debian"> <distro id="debian">
<package variant="s390x">qemu-user</package> <package variant="s390x">qemu-user</package>

View File

@ -11,7 +11,7 @@ import subprocess
import os import os
import shutil import shutil
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from distutils.version import LooseVersion as l_ver from packaging.version import Version
FWUPDTOOL = "/bin/fwupdtool" FWUPDTOOL = "/bin/fwupdtool"
@ -74,10 +74,10 @@ class FwupdHeads:
return EXIT_CODES["NOTHING_TO_DO"] return EXIT_CODES["NOTHING_TO_DO"]
for release in heads_metadata_info.find("releases").findall("release"): for release in heads_metadata_info.find("releases").findall("release"):
release_ver = release.get("version") release_ver = release.get("version")
if self.heads_version == "heads" or l_ver(release_ver) > l_ver( if self.heads_version == "heads" or Version(release_ver) > Version(
self.heads_version self.heads_version
): ):
if not self.heads_update_version or l_ver(release_ver) > l_ver( if not self.heads_update_version or Version(release_ver) > Version(
self.heads_update_version self.heads_update_version
): ):
self.heads_update_url = release.find("location").text self.heads_update_url = release.find("location").text

View File

@ -16,7 +16,7 @@ import sys
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from pathlib import Path from pathlib import Path
from distutils.version import LooseVersion as l_ver from packaging.version import Version
FWUPD_QUBES_DIR = "/usr/share/qubes-fwupd" FWUPD_QUBES_DIR = "/usr/share/qubes-fwupd"
@ -492,7 +492,7 @@ class QubesFwupdmgr(FwupdHeads, FwupdUpdate, FwupdReceiveUpdates):
self.name = updates_dict[vm_name][choice]["Name"] self.name = updates_dict[vm_name][choice]["Name"]
self.version = updates_dict[vm_name][choice]["Releases"][0]["Version"] self.version = updates_dict[vm_name][choice]["Releases"][0]["Version"]
for ver_check in updates_dict[vm_name][choice]["Releases"]: for ver_check in updates_dict[vm_name][choice]["Releases"]:
if l_ver(ver_check["Version"]) >= l_ver(self.version): if Version(ver_check["Version"]) >= Version(self.version):
self.version = ver_check["Version"] self.version = ver_check["Version"]
self.url = ver_check["Url"] self.url = ver_check["Url"]
self.sha = ver_check["Checksum"] self.sha = ver_check["Checksum"]
@ -539,7 +539,7 @@ class QubesFwupdmgr(FwupdHeads, FwupdUpdate, FwupdReceiveUpdates):
raise ValueError("No vendor information in firmware metainfo.") raise ValueError("No vendor information in firmware metainfo.")
if vendor not in dmi_info: if vendor not in dmi_info:
raise ValueError("Wrong firmware provider.") raise ValueError("Wrong firmware provider.")
if not downgrade and l_ver(version) <= l_ver(self.dmi_version): if not downgrade and Version(version) <= Version(self.dmi_version):
raise ValueError(f"{version} < {self.dmi_version} Downgrade not allowed") raise ValueError(f"{version} < {self.dmi_version} Downgrade not allowed")
def _get_dom0_devices(self): def _get_dom0_devices(self):
@ -587,7 +587,7 @@ class QubesFwupdmgr(FwupdHeads, FwupdUpdate, FwupdReceiveUpdates):
) )
current_version = device["Version"] current_version = device["Version"]
for update in device["Releases"]: for update in device["Releases"]:
if l_ver(update["Version"]) > current_version: if Version(update["Version"]) > current_version:
self.usbvm_updates_list[-1]["Releases"].append( self.usbvm_updates_list[-1]["Releases"].append(
{ {
"Version": update["Version"], "Version": update["Version"],
@ -666,7 +666,7 @@ class QubesFwupdmgr(FwupdHeads, FwupdUpdate, FwupdReceiveUpdates):
"Checksum": downgrade["Checksum"][-1], "Checksum": downgrade["Checksum"][-1],
} }
for downgrade in device["Releases"] for downgrade in device["Releases"]
if l_ver(downgrade["Version"]) < l_ver(version) if Version(downgrade["Version"]) < Version(version)
], ],
} }
) )

View File

@ -15,7 +15,7 @@ import sys
import imp import imp
import io import io
import platform import platform
from distutils.version import LooseVersion as l_ver from packaging.version import Version
from pathlib import Path from pathlib import Path
from test.fwupd_logs import UPDATE_INFO, GET_DEVICES, DMI_DECODE from test.fwupd_logs import UPDATE_INFO, GET_DEVICES, DMI_DECODE
from test.fwupd_logs import GET_DEVICES_NO_UPDATES, GET_DEVICES_NO_VERSION from test.fwupd_logs import GET_DEVICES_NO_UPDATES, GET_DEVICES_NO_VERSION
@ -439,7 +439,7 @@ class TestQubesFwupdmgr(unittest.TestCase):
self.q._get_dom0_devices() self.q._get_dom0_devices()
downgrades = self.q._parse_downgrades(self.q.dom0_devices_info) downgrades = self.q._parse_downgrades(self.q.dom0_devices_info)
new_version = downgrades[number]["Version"] new_version = downgrades[number]["Version"]
self.assertGreater(l_ver(old_version), l_ver(new_version)) self.assertGreater(Version(old_version), Version(new_version))
@unittest.skipUnless( @unittest.skipUnless(
check_whonix_updatevm() and device_connected_usbvm(), REQUIRED_DEV check_whonix_updatevm() and device_connected_usbvm(), REQUIRED_DEV
@ -469,7 +469,7 @@ class TestQubesFwupdmgr(unittest.TestCase):
raw = usbvm_device_info.read() raw = usbvm_device_info.read()
downgrades = self.q._parse_downgrades(raw) downgrades = self.q._parse_downgrades(raw)
new_version = downgrades[number]["Version"] new_version = downgrades[number]["Version"]
self.assertGreater(l_ver(old_version), l_ver(new_version)) self.assertGreater(Version(old_version), Version(new_version))
old_version = None old_version = None
new_version = None new_version = None
self.q._get_dom0_updates() self.q._get_dom0_updates()
@ -501,7 +501,7 @@ class TestQubesFwupdmgr(unittest.TestCase):
break break
if new_version is None: if new_version is None:
self.fail("Test device not found") self.fail("Test device not found")
self.assertLess(l_ver(old_version), l_ver(new_version)) self.assertLess(Version(old_version), Version(new_version))
@unittest.skipUnless(device_connected_usbvm(), REQUIRED_DEV) @unittest.skipUnless(device_connected_usbvm(), REQUIRED_DEV)
def test_downgrade_firmware_usbvm(self): def test_downgrade_firmware_usbvm(self):
@ -528,7 +528,7 @@ class TestQubesFwupdmgr(unittest.TestCase):
raw = usbvm_device_info.read() raw = usbvm_device_info.read()
downgrades = self.q._parse_downgrades(raw) downgrades = self.q._parse_downgrades(raw)
new_version = downgrades[number]["Version"] new_version = downgrades[number]["Version"]
self.assertGreater(l_ver(old_version), l_ver(new_version)) self.assertGreater(Version(old_version), Version(new_version))
def test_parse_downgrades(self): def test_parse_downgrades(self):
downgrades = self.q._parse_downgrades(GET_DEVICES) downgrades = self.q._parse_downgrades(GET_DEVICES)
@ -617,7 +617,7 @@ class TestQubesFwupdmgr(unittest.TestCase):
break break
if new_version is None: if new_version is None:
self.fail("Test device not found") self.fail("Test device not found")
self.assertLess(l_ver(old_version), l_ver(new_version)) self.assertLess(Version(old_version), Version(new_version))
@unittest.skipUnless(device_connected_usbvm(), REQUIRED_DEV) @unittest.skipUnless(device_connected_usbvm(), REQUIRED_DEV)
def test_update_firmware_usbvm(self): def test_update_firmware_usbvm(self):
@ -652,7 +652,7 @@ class TestQubesFwupdmgr(unittest.TestCase):
break break
if new_version is None: if new_version is None:
self.fail("Test device not found") self.fail("Test device not found")
self.assertLess(l_ver(old_version), l_ver(new_version)) self.assertLess(Version(old_version), Version(new_version))
@unittest.skipUnless(check_usbvm(), REQUIRED_USBVM) @unittest.skipUnless(check_usbvm(), REQUIRED_USBVM)
def test_get_usbvm_devices(self): def test_get_usbvm_devices(self):

View File

@ -4,10 +4,10 @@
import sys import sys
import markdown import markdown
from distutils.version import LooseVersion from packaging.version import Version
# https://github.com/fwupd/fwupd/pull/3337#issuecomment-858947695 # https://github.com/fwupd/fwupd/pull/3337#issuecomment-858947695
if LooseVersion(markdown.version) < LooseVersion("3.3.3"): if Version(markdown.version) < Version("3.3.3"):
print("python3-markdown version 3.3.3 required for gi-docgen") print("python3-markdown version 3.3.3 required for gi-docgen")
sys.exit(1) sys.exit(1)