From ecc3e3d34e5b3ef11617978adb10ae6b3d6107e3 Mon Sep 17 00:00:00 2001 From: Cole Robinson Date: Fri, 7 Jun 2019 16:39:33 -0400 Subject: [PATCH] support: add is_libvirt_error_no_domain Repurpose the generic util.exception_is_libvirt_error for the one purpose that it's actually used, add it as a SupportCache staticmethod, and test it --- tests/xmlconfig.py | 7 +++++++ virtManager/domain.py | 9 ++++----- virtManager/manager.py | 6 ++---- virtManager/vmwindow.py | 8 ++------ virtinst/support.py | 12 ++++++++++++ virtinst/util.py | 5 ----- 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/tests/xmlconfig.py b/tests/xmlconfig.py index bb93d4389..e4984be51 100644 --- a/tests/xmlconfig.py +++ b/tests/xmlconfig.py @@ -228,3 +228,10 @@ class TestXMLMisc(unittest.TestCase): randommac = virtinst.DeviceInterface.generate_mac(realconn) self.assertTrue(randommac != testmac) self.assertTrue(len(randommac) == len(testmac)) + + def test_support_misc(self): + try: + self.conn.lookupByName("foobar-idontexist") + except Exception as e: + if not self.conn.support.is_libvirt_error_no_domain(e): + raise diff --git a/virtManager/domain.py b/virtManager/domain.py index 1f4154a77..36ca37beb 100644 --- a/virtManager/domain.py +++ b/virtManager/domain.py @@ -14,7 +14,6 @@ import libvirt from virtinst import DomainCapabilities from virtinst import DomainSnapshot from virtinst import Guest -from virtinst import util from virtinst import DeviceController from virtinst import DeviceDisk @@ -1343,10 +1342,10 @@ class vmmDomain(vmmLibvirtObject): if self._has_managed_save is None: try: self._has_managed_save = self._backend.hasManagedSaveImage(0) - except libvirt.libvirtError as e: - if not util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"): - raise - return False + except Exception as e: + if self.conn.support.is_libvirt_error_no_domain(e): + return False + raise return self._has_managed_save diff --git a/virtManager/manager.py b/virtManager/manager.py index dad9af8bc..95f24f4aa 100644 --- a/virtManager/manager.py +++ b/virtManager/manager.py @@ -11,8 +11,6 @@ from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GdkPixbuf -import libvirt - from virtinst import util from . import vmmenu @@ -704,8 +702,8 @@ class vmmManager(vmmGObjectUI): desc = vm.get_description() row[ROW_HINT] = util.xml_escape(desc) - except libvirt.libvirtError as e: - if util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"): + except Exception as e: + if vm.conn.support.is_libvirt_error_no_domain(e): return raise diff --git a/virtManager/vmwindow.py b/virtManager/vmwindow.py index eb16cf694..02520f1c7 100644 --- a/virtManager/vmwindow.py +++ b/virtManager/vmwindow.py @@ -9,10 +9,6 @@ import logging from gi.repository import Gdk from gi.repository import Gtk -import libvirt - -from virtinst import util - from . import vmmenu from .baseclass import vmmGObjectUI from .details import vmmDetails @@ -561,8 +557,8 @@ class vmmVMWindow(vmmGObjectUI): try: if self.is_visible(): self.vm.ensure_latest_xml() - except libvirt.libvirtError as e: - if util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"): + except Exception as e: + if self.conn.support.is_libvirt_error_no_domain(e): self.close() return raise diff --git a/virtinst/support.py b/virtinst/support.py index 48a75ac90..4789d7c3c 100644 --- a/virtinst/support.py +++ b/virtinst/support.py @@ -235,6 +235,18 @@ class SupportCache: Class containing all support checks and access APIs, and support for caching returned results """ + + @staticmethod + def is_libvirt_error_no_domain(err): + """ + Small helper to check if the passed exception is a libvirt error + with code VIR_ERR_NO_DOMAIN + """ + if not isinstance(err, libvirt.libvirtError): + return False + return err.get_error_code() == libvirt.VIR_ERR_NO_DOMAIN + + def __init__(self, virtconn): self._cache = {} self._virtconn = virtconn diff --git a/virtinst/util.py b/virtinst/util.py index e46b18810..cc93b7678 100644 --- a/virtinst/util.py +++ b/virtinst/util.py @@ -137,11 +137,6 @@ def is_error_nosupport(err): return False -def exception_is_libvirt_error(e, error): - return (hasattr(libvirt, error) and - e.get_error_code() == getattr(libvirt, error)) - - def local_libvirt_version(): """ Lookup the local libvirt library version, but cache the value since