base: make WrapperObjectsCollection behave like a dict
In core-admin matching collections are real dicts, so clone this API behaviour here too. Specific changes: - iteration yields keys, not values - implement values and items methods Additionally fix keys method, it was broken on python2 (list have no copy method).
This commit is contained in:
parent
8584ca4057
commit
04f8d85819
@ -324,10 +324,20 @@ class WrapperObjectsCollection(object):
|
|||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
self.refresh_cache()
|
self.refresh_cache()
|
||||||
for obj in self._names_list:
|
for key in self._names_list:
|
||||||
yield self[obj]
|
yield key
|
||||||
|
|
||||||
def keys(self):
|
def keys(self):
|
||||||
'''Get list of names.'''
|
'''Get list of names.'''
|
||||||
self.refresh_cache()
|
self.refresh_cache()
|
||||||
return self._names_list.copy()
|
return [key for key in self._names_list]
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
'''Get list of (key, value) pairs'''
|
||||||
|
self.refresh_cache()
|
||||||
|
return [(key, self.get_blind(key)) for key in self._names_list]
|
||||||
|
|
||||||
|
def values(self):
|
||||||
|
'''Get list of objects'''
|
||||||
|
self.refresh_cache()
|
||||||
|
return [self.get_blind(key) for key in self._names_list]
|
||||||
|
@ -28,11 +28,42 @@ class TC_00_Label(qubesadmin.tests.QubesTestCase):
|
|||||||
('dom0', 'admin.label.List', None, None)] = \
|
('dom0', 'admin.label.List', None, None)] = \
|
||||||
b'0\x00green\nred\nblack\n'
|
b'0\x00green\nred\nblack\n'
|
||||||
seen = set()
|
seen = set()
|
||||||
for label in self.app.labels:
|
for label in self.app.labels.values():
|
||||||
self.assertNotIn(label.name, seen)
|
self.assertNotIn(label.name, seen)
|
||||||
seen.add(label.name)
|
seen.add(label.name)
|
||||||
self.assertEqual(seen, set(['green', 'red', 'black']))
|
self.assertEqual(seen, set(['green', 'red', 'black']))
|
||||||
|
|
||||||
|
def test_001_list_names(self):
|
||||||
|
self.app.expected_calls[
|
||||||
|
('dom0', 'admin.label.List', None, None)] = \
|
||||||
|
b'0\x00green\nred\nblack\n'
|
||||||
|
seen = set()
|
||||||
|
for label in self.app.labels:
|
||||||
|
self.assertNotIn(label, seen)
|
||||||
|
seen.add(label)
|
||||||
|
self.assertEqual(seen, set(['green', 'red', 'black']))
|
||||||
|
|
||||||
|
def test_002_list_keys(self):
|
||||||
|
self.app.expected_calls[
|
||||||
|
('dom0', 'admin.label.List', None, None)] = \
|
||||||
|
b'0\x00green\nred\nblack\n'
|
||||||
|
seen = set()
|
||||||
|
for label in self.app.labels.keys():
|
||||||
|
self.assertNotIn(label, seen)
|
||||||
|
seen.add(label)
|
||||||
|
self.assertEqual(seen, set(['green', 'red', 'black']))
|
||||||
|
|
||||||
|
def test_003_list_items(self):
|
||||||
|
self.app.expected_calls[
|
||||||
|
('dom0', 'admin.label.List', None, None)] = \
|
||||||
|
b'0\x00green\nred\nblack\n'
|
||||||
|
seen = set()
|
||||||
|
for name, label in self.app.labels.items():
|
||||||
|
self.assertEqual(name, label.name)
|
||||||
|
self.assertNotIn(name, seen)
|
||||||
|
seen.add(name)
|
||||||
|
self.assertEqual(seen, set(['green', 'red', 'black']))
|
||||||
|
|
||||||
def test_010_get(self):
|
def test_010_get(self):
|
||||||
self.app.expected_calls[
|
self.app.expected_calls[
|
||||||
('dom0', 'admin.label.List', None, None)] = \
|
('dom0', 'admin.label.List', None, None)] = \
|
||||||
|
@ -277,7 +277,7 @@ class TestPool(qubesadmin.tests.QubesTestCase):
|
|||||||
self.app.expected_calls[('dom0', 'admin.pool.List', None, None)] = \
|
self.app.expected_calls[('dom0', 'admin.pool.List', None, None)] = \
|
||||||
b'0\x00file\nlvm\n'
|
b'0\x00file\nlvm\n'
|
||||||
seen = set()
|
seen = set()
|
||||||
for pool in self.app.pools:
|
for pool in self.app.pools.values():
|
||||||
self.assertIsInstance(pool, qubesadmin.storage.Pool)
|
self.assertIsInstance(pool, qubesadmin.storage.Pool)
|
||||||
self.assertIn(pool.name, ('file', 'lvm'))
|
self.assertIn(pool.name, ('file', 'lvm'))
|
||||||
self.assertNotIn(pool.name, seen)
|
self.assertNotIn(pool.name, seen)
|
||||||
|
@ -54,7 +54,7 @@ def pool_info(pool):
|
|||||||
def list_pools(app):
|
def list_pools(app):
|
||||||
''' Prints out all known pools and their drivers '''
|
''' Prints out all known pools and their drivers '''
|
||||||
result = [('NAME', 'DRIVER')]
|
result = [('NAME', 'DRIVER')]
|
||||||
for pool in app.pools:
|
for pool in app.pools.values():
|
||||||
result += [(pool.name, pool.driver)]
|
result += [(pool.name, pool.driver)]
|
||||||
qubesadmin.tools.print_table(result)
|
qubesadmin.tools.print_table(result)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user