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
This commit is contained in:
Cole Robinson 2019-06-07 16:39:33 -04:00
parent f85e6def55
commit ecc3e3d34e
6 changed files with 27 additions and 20 deletions

View File

@ -228,3 +228,10 @@ class TestXMLMisc(unittest.TestCase):
randommac = virtinst.DeviceInterface.generate_mac(realconn) randommac = virtinst.DeviceInterface.generate_mac(realconn)
self.assertTrue(randommac != testmac) self.assertTrue(randommac != testmac)
self.assertTrue(len(randommac) == len(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

View File

@ -14,7 +14,6 @@ import libvirt
from virtinst import DomainCapabilities from virtinst import DomainCapabilities
from virtinst import DomainSnapshot from virtinst import DomainSnapshot
from virtinst import Guest from virtinst import Guest
from virtinst import util
from virtinst import DeviceController from virtinst import DeviceController
from virtinst import DeviceDisk from virtinst import DeviceDisk
@ -1343,10 +1342,10 @@ class vmmDomain(vmmLibvirtObject):
if self._has_managed_save is None: if self._has_managed_save is None:
try: try:
self._has_managed_save = self._backend.hasManagedSaveImage(0) self._has_managed_save = self._backend.hasManagedSaveImage(0)
except libvirt.libvirtError as e: except Exception as e:
if not util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"): if self.conn.support.is_libvirt_error_no_domain(e):
raise return False
return False raise
return self._has_managed_save return self._has_managed_save

View File

@ -11,8 +11,6 @@ from gi.repository import Gtk
from gi.repository import Gdk from gi.repository import Gdk
from gi.repository import GdkPixbuf from gi.repository import GdkPixbuf
import libvirt
from virtinst import util from virtinst import util
from . import vmmenu from . import vmmenu
@ -704,8 +702,8 @@ class vmmManager(vmmGObjectUI):
desc = vm.get_description() desc = vm.get_description()
row[ROW_HINT] = util.xml_escape(desc) row[ROW_HINT] = util.xml_escape(desc)
except libvirt.libvirtError as e: except Exception as e:
if util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"): if vm.conn.support.is_libvirt_error_no_domain(e):
return return
raise raise

View File

@ -9,10 +9,6 @@ import logging
from gi.repository import Gdk from gi.repository import Gdk
from gi.repository import Gtk from gi.repository import Gtk
import libvirt
from virtinst import util
from . import vmmenu from . import vmmenu
from .baseclass import vmmGObjectUI from .baseclass import vmmGObjectUI
from .details import vmmDetails from .details import vmmDetails
@ -561,8 +557,8 @@ class vmmVMWindow(vmmGObjectUI):
try: try:
if self.is_visible(): if self.is_visible():
self.vm.ensure_latest_xml() self.vm.ensure_latest_xml()
except libvirt.libvirtError as e: except Exception as e:
if util.exception_is_libvirt_error(e, "VIR_ERR_NO_DOMAIN"): if self.conn.support.is_libvirt_error_no_domain(e):
self.close() self.close()
return return
raise raise

View File

@ -235,6 +235,18 @@ class SupportCache:
Class containing all support checks and access APIs, and support for Class containing all support checks and access APIs, and support for
caching returned results 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): def __init__(self, virtconn):
self._cache = {} self._cache = {}
self._virtconn = virtconn self._virtconn = virtconn

View File

@ -137,11 +137,6 @@ def is_error_nosupport(err):
return False 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(): def local_libvirt_version():
""" """
Lookup the local libvirt library version, but cache the value since Lookup the local libvirt library version, but cache the value since