[svn] commit: r4129 - in /branches/trac384/src/lib/python/isc/config: config_data.py tests/config_data_test.py
BIND 10 source code commits
bind10-changes at lists.isc.org
Mon Jan 3 17:19:05 UTC 2011
Author: jelte
Date: Mon Jan 3 17:19:05 2011
New Revision: 4129
Log:
fix for getting default values within lists where the whole list (also) has a default (not just individual elements)
Modified:
branches/trac384/src/lib/python/isc/config/config_data.py
branches/trac384/src/lib/python/isc/config/tests/config_data_test.py
Modified: branches/trac384/src/lib/python/isc/config/config_data.py
==============================================================================
--- branches/trac384/src/lib/python/isc/config/config_data.py (original)
+++ branches/trac384/src/lib/python/isc/config/config_data.py Mon Jan 3 17:19:05 2011
@@ -364,34 +364,44 @@
See get_value() for a general way to find a configuration
value
"""
- if identifier[0] == '/':
- identifier = identifier[1:]
- module, sep, id = identifier.partition("/")
try:
+ if identifier[0] == '/':
+ identifier = identifier[1:]
+ module, sep, id = identifier.partition("/")
+ # if there is a 'higher-level' list index specified, we need
+ # to check if that list specification has a default that
+ # overrides the more specific default in the final spec item
+ # (ie. list_default = [1, 2, 3], list_item_spec=int, default=0)
+ # def default list[1] should return 2, not 0
+ id_parts = isc.cc.data.split_identifier(id)
+ id_prefix = ""
+ while len(id_parts) > 0:
+ id_part = id_parts.pop(0)
+ item_id, list_indices = isc.cc.data.split_identifier_list_indices(id_part)
+ id_prefix += "/" + id_part
+ if list_indices is not None:
+ spec = find_spec_part(self._specifications[module].get_config_spec(), id_prefix)
+ if 'item_default' in spec:
+ list_value = spec['item_default']
+ for i in list_indices:
+ if i < len(list_value):
+ list_value = list_value[i]
+ else:
+ # out of range, return None
+ return None
+
+ if len(id_parts) > 0:
+ rest_of_id = "/".join(id_parts)
+ return isc.cc.data.find(list_value, rest_of_id)
+ else:
+ return list_value
+
spec = find_spec_part(self._specifications[module].get_config_spec(), id)
- if type(spec) == dict and 'item_default' in spec:
- id, list_indices = isc.cc.data.split_identifier_list_indices(id)
- if list_indices is not None and \
- type(spec['item_default']) == list:
- if len(list_indices) == 1:
- default_list = spec['item_default']
- index = list_indices[0]
- if index < len(default_list):
- return default_list[index]
- else:
- return None
- else:
- return spec['item_default']
- elif type(spec) == list:
- result = {}
- for i in spec:
- if type(i) == dict and 'item_default' in i:
- result[i['item_name']] = i['item_default']
- else:
- result[i['item_name']] = None
- return result
+ if 'item_default' in spec:
+ return spec['item_default']
else:
return None
+
except isc.cc.data.DataNotFoundError as dnfe:
return None
Modified: branches/trac384/src/lib/python/isc/config/tests/config_data_test.py
==============================================================================
--- branches/trac384/src/lib/python/isc/config/tests/config_data_test.py (original)
+++ branches/trac384/src/lib/python/isc/config/tests/config_data_test.py Mon Jan 3 17:19:05 2011
@@ -360,6 +360,8 @@
self.assertEqual(1, value)
value = self.mcd.get_default_value("Spec2/item5[0]")
self.assertEqual('a', value)
+ value = self.mcd.get_default_value("Spec2/item5[1]")
+ self.assertEqual('b', value)
value = self.mcd.get_default_value("Spec2/item5[5]")
self.assertEqual(None, value)
value = self.mcd.get_default_value("Spec2/item5[0][1]")
@@ -394,6 +396,10 @@
self.assertEqual(None, value)
self.assertEqual(MultiConfigData.NONE, status)
+ value, status = self.mcd.get_value("Spec2/item5")
+ self.assertEqual(['a', 'b'], value)
+ self.assertEqual(MultiConfigData.DEFAULT, status)
+
value, status = self.mcd.get_value("Spec2/item5[0]")
self.assertEqual("a", value)
self.assertEqual(MultiConfigData.DEFAULT, status)
@@ -401,6 +407,11 @@
value, status = self.mcd.get_value("Spec2/item5[0]", False)
self.assertEqual(None, value)
self.assertEqual(MultiConfigData.NONE, status)
+
+ value, status = self.mcd.get_value("Spec2/item5[1]")
+ self.assertEqual("b", value)
+ self.assertEqual(MultiConfigData.DEFAULT, status)
+
def test_get_value_maps(self):
@@ -425,21 +436,21 @@
self.mcd._set_current_config({ "Spec2": { "item1": 2 } })
self.mcd.set_value("Spec2/item3", False)
maps = self.mcd.get_value_maps("/Spec2")
- print("[XX] MAPS:")
- print(maps)
self.assertEqual([{'default': False, 'type': 'integer', 'name': 'Spec2/item1', 'value': 2, 'modified': False},
{'default': True, 'type': 'real', 'name': 'Spec2/item2', 'value': 1.1, 'modified': False},
{'default': False, 'type': 'boolean', 'name': 'Spec2/item3', 'value': False, 'modified': True},
{'default': True, 'type': 'string', 'name': 'Spec2/item4', 'value': 'test', 'modified': False},
{'default': True, 'type': 'list', 'name': 'Spec2/item5', 'value': ['a', 'b'], 'modified': False},
- {'default': True, 'type': 'map', 'name': 'Spec2/item6', 'value': {}, 'modified': False}], maps)
+ {'default': True, 'type': 'string', 'name': 'Spec2/item6/value1', 'value': 'default', 'modified': False},
+ {'default': False, 'type': 'integer', 'name': 'Spec2/item6/value2', 'value': None, 'modified': False}], maps)
maps = self.mcd.get_value_maps("Spec2")
self.assertEqual([{'default': False, 'type': 'integer', 'name': 'Spec2/item1', 'value': 2, 'modified': False},
{'default': True, 'type': 'real', 'name': 'Spec2/item2', 'value': 1.1, 'modified': False},
{'default': False, 'type': 'boolean', 'name': 'Spec2/item3', 'value': False, 'modified': True},
{'default': True, 'type': 'string', 'name': 'Spec2/item4', 'value': 'test', 'modified': False},
{'default': True, 'type': 'list', 'name': 'Spec2/item5', 'value': ['a', 'b'], 'modified': False},
- {'default': True, 'type': 'map', 'name': 'Spec2/item6', 'value': {}, 'modified': False}], maps)
+ {'default': True, 'type': 'string', 'name': 'Spec2/item6/value1', 'value': 'default', 'modified': False},
+ {'default': False, 'type': 'integer', 'name': 'Spec2/item6/value2', 'value': None, 'modified': False}], maps)
maps = self.mcd.get_value_maps("/Spec2/item5")
self.assertEqual([{'default': True, 'type': 'string', 'name': 'Spec2/item5[0]', 'value': 'a', 'modified': False},
{'default': True, 'type': 'string', 'name': 'Spec2/item5[1]', 'value': 'b', 'modified': False}], maps)
@@ -471,9 +482,15 @@
'value': 'def'},
{'default': True,
'modified': False,
- 'name': 'Spec22/value9/v92',
- 'type': 'map',
- 'value': {}
+ 'name': 'Spec22/value9/v92/v92a',
+ 'type': 'string',
+ 'value': 'Hello'
+ },
+ {'default': True,
+ 'modified': False,
+ 'name': 'Spec22/value9/v92/v92b',
+ 'type': 'integer',
+ 'value': 47806
}
]
maps = self.mcd.get_value_maps("/Spec22/value9")
More information about the bind10-changes
mailing list