Merge branch 'devices-api'
* devices-api: devices: include devclass when comparing devices events: deserialize DeviceInfo class in device-* events devices: drop DeviceInfo.options
This commit is contained in:
commit
0dfdab32e1
@ -77,7 +77,7 @@ class DeviceInfo(object):
|
|||||||
''' Holds all information about a device '''
|
''' Holds all information about a device '''
|
||||||
# pylint: disable=too-few-public-methods
|
# pylint: disable=too-few-public-methods
|
||||||
def __init__(self, backend_domain, devclass, ident, description=None,
|
def __init__(self, backend_domain, devclass, ident, description=None,
|
||||||
options=None, **kwargs):
|
**kwargs):
|
||||||
#: domain providing this device
|
#: domain providing this device
|
||||||
self.backend_domain = backend_domain
|
self.backend_domain = backend_domain
|
||||||
#: device class
|
#: device class
|
||||||
@ -86,7 +86,6 @@ class DeviceInfo(object):
|
|||||||
self.ident = ident
|
self.ident = ident
|
||||||
#: human readable description/name of the device
|
#: human readable description/name of the device
|
||||||
self.description = description
|
self.description = description
|
||||||
self.options = options or dict()
|
|
||||||
self.data = kwargs
|
self.data = kwargs
|
||||||
|
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
@ -95,6 +94,7 @@ class DeviceInfo(object):
|
|||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
try:
|
try:
|
||||||
return (
|
return (
|
||||||
|
self.devclass == other.devclass and
|
||||||
self.backend_domain == other.backend_domain and
|
self.backend_domain == other.backend_domain and
|
||||||
self.ident == other.ident
|
self.ident == other.ident
|
||||||
)
|
)
|
||||||
@ -233,7 +233,7 @@ class DeviceCollection(object):
|
|||||||
for info_single in info.split(' ') if info_single)
|
for info_single in info.split(' ') if info_single)
|
||||||
yield DeviceInfo(self._vm, self._class, ident,
|
yield DeviceInfo(self._vm, self._class, ident,
|
||||||
description=description,
|
description=description,
|
||||||
options=None, **info_dict)
|
**info_dict)
|
||||||
|
|
||||||
def update_persistent(self, device, persistent):
|
def update_persistent(self, device, persistent):
|
||||||
'''Update `persistent` flag of already attached device.
|
'''Update `persistent` flag of already attached device.
|
||||||
|
@ -202,6 +202,15 @@ class EventsDispatcher(object):
|
|||||||
if event in ['domain-add', 'domain-delete']:
|
if event in ['domain-add', 'domain-delete']:
|
||||||
self.app.domains.clear_cache()
|
self.app.domains.clear_cache()
|
||||||
subject = None
|
subject = None
|
||||||
|
# deserialize known attributes
|
||||||
|
if event.startswith('device-') and 'device' in kwargs:
|
||||||
|
try:
|
||||||
|
devclass = event.split(':', 1)[1]
|
||||||
|
backend_domain, ident = kwargs['device'].split(':', 1)
|
||||||
|
kwargs['device'] = self.app.domains.get_blind(backend_domain)\
|
||||||
|
.devices[devclass][ident]
|
||||||
|
except (KeyError, ValueError):
|
||||||
|
pass
|
||||||
handlers = [h_func for h_name, h_func_set in self.handlers.items()
|
handlers = [h_func for h_name, h_func_set in self.handlers.items()
|
||||||
for h_func in h_func_set
|
for h_func in h_func_set
|
||||||
if fnmatch.fnmatch(event, h_name)]
|
if fnmatch.fnmatch(event, h_name)]
|
||||||
|
@ -42,7 +42,6 @@ class TC_00_DeviceCollection(qubesadmin.tests.QubesTestCase):
|
|||||||
self.assertEqual(dev.backend_domain, self.vm)
|
self.assertEqual(dev.backend_domain, self.vm)
|
||||||
self.assertEqual(dev.ident, 'dev1')
|
self.assertEqual(dev.ident, 'dev1')
|
||||||
self.assertEqual(dev.description, '')
|
self.assertEqual(dev.description, '')
|
||||||
self.assertEqual(dev.options, {})
|
|
||||||
self.assertEqual(dev.data, {})
|
self.assertEqual(dev.data, {})
|
||||||
self.assertEqual(str(dev), 'test-vm:dev1')
|
self.assertEqual(str(dev), 'test-vm:dev1')
|
||||||
self.assertAllCalled()
|
self.assertAllCalled()
|
||||||
@ -58,7 +57,6 @@ class TC_00_DeviceCollection(qubesadmin.tests.QubesTestCase):
|
|||||||
self.assertEqual(dev.backend_domain, self.vm)
|
self.assertEqual(dev.backend_domain, self.vm)
|
||||||
self.assertEqual(dev.ident, 'dev1')
|
self.assertEqual(dev.ident, 'dev1')
|
||||||
self.assertEqual(dev.description, 'This is description')
|
self.assertEqual(dev.description, 'This is description')
|
||||||
self.assertEqual(dev.options, {})
|
|
||||||
self.assertEqual(dev.data, {})
|
self.assertEqual(dev.data, {})
|
||||||
self.assertEqual(str(dev), 'test-vm:dev1')
|
self.assertEqual(str(dev), 'test-vm:dev1')
|
||||||
|
|
||||||
@ -73,7 +71,6 @@ class TC_00_DeviceCollection(qubesadmin.tests.QubesTestCase):
|
|||||||
self.assertEqual(dev.backend_domain, self.vm)
|
self.assertEqual(dev.backend_domain, self.vm)
|
||||||
self.assertEqual(dev.ident, 'dev1')
|
self.assertEqual(dev.ident, 'dev1')
|
||||||
self.assertEqual(dev.description, 'This is description')
|
self.assertEqual(dev.description, 'This is description')
|
||||||
self.assertEqual(dev.options, {})
|
|
||||||
self.assertEqual(dev.data, {'ro': 'True', 'other': '123'})
|
self.assertEqual(dev.data, {'ro': 'True', 'other': '123'})
|
||||||
self.assertEqual(str(dev), 'test-vm:dev1')
|
self.assertEqual(str(dev), 'test-vm:dev1')
|
||||||
self.assertAllCalled()
|
self.assertAllCalled()
|
||||||
@ -87,7 +84,6 @@ class TC_00_DeviceCollection(qubesadmin.tests.QubesTestCase):
|
|||||||
self.assertEqual(dev.backend_domain, self.vm)
|
self.assertEqual(dev.backend_domain, self.vm)
|
||||||
self.assertEqual(dev.ident, 'dev1')
|
self.assertEqual(dev.ident, 'dev1')
|
||||||
self.assertEqual(dev.description, 'This is description')
|
self.assertEqual(dev.description, 'This is description')
|
||||||
self.assertEqual(dev.options, {})
|
|
||||||
self.assertEqual(dev.data, {})
|
self.assertEqual(dev.data, {})
|
||||||
self.assertEqual(str(dev), 'test-vm:dev1')
|
self.assertEqual(str(dev), 'test-vm:dev1')
|
||||||
self.assertAllCalled()
|
self.assertAllCalled()
|
||||||
@ -101,7 +97,6 @@ class TC_00_DeviceCollection(qubesadmin.tests.QubesTestCase):
|
|||||||
self.assertEqual(dev.backend_domain, self.vm)
|
self.assertEqual(dev.backend_domain, self.vm)
|
||||||
self.assertEqual(dev.ident, 'dev2')
|
self.assertEqual(dev.ident, 'dev2')
|
||||||
self.assertEqual(dev.description, 'Unknown device')
|
self.assertEqual(dev.description, 'Unknown device')
|
||||||
self.assertEqual(dev.options, {})
|
|
||||||
self.assertEqual(dev.data, {})
|
self.assertEqual(dev.data, {})
|
||||||
self.assertEqual(str(dev), 'test-vm:dev2')
|
self.assertEqual(str(dev), 'test-vm:dev2')
|
||||||
self.assertAllCalled()
|
self.assertAllCalled()
|
||||||
|
@ -253,3 +253,13 @@ class TC_00_Events(qubesadmin.tests.QubesTestCase):
|
|||||||
unittest.mock.call().kill.assert_called_once_with()
|
unittest.mock.call().kill.assert_called_once_with()
|
||||||
|
|
||||||
loop.close()
|
loop.close()
|
||||||
|
|
||||||
|
def test_030_events_device(self):
|
||||||
|
handler = unittest.mock.Mock()
|
||||||
|
self.dispatcher.add_handler('device-attach:test', handler)
|
||||||
|
self.dispatcher.handle('test-vm', 'device-attach:test',
|
||||||
|
device='test-vm2:dev', options='{}')
|
||||||
|
vm = self.app.domains.get_blind('test-vm')
|
||||||
|
dev = self.app.domains.get_blind('test-vm2').devices['test']['dev']
|
||||||
|
handler.assert_called_once_with(vm, 'device-attach:test', device=dev,
|
||||||
|
options='{}')
|
||||||
|
Loading…
Reference in New Issue
Block a user