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)
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

View File

@ -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
except Exception as e:
if self.conn.support.is_libvirt_error_no_domain(e):
return False
raise
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 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

View File

@ -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

View File

@ -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

View File

@ -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