Lookup path added to values/overrides

For debug purposes it is useful to know from which level value
or override came. Fetching lookup path debug info can be enabled
by adding parameter show_lookup to the get request.

Change-Id: Ic9e68930a206d36c00212289d6842c2c6eaea09c
This commit is contained in:
Alexander Kislitsky 2016-08-25 00:26:23 +03:00
parent a175c31291
commit 9656a2d718
3 changed files with 99 additions and 2 deletions

View File

@ -70,16 +70,35 @@ class ResourceValues(flask_restful.Resource):
environment, levels))
if 'effective' in flask.request.args:
show_lookup = 'show_lookup' in flask.request.args
resource_values = db.ResourceValues.query.filter_by(
resource_definition=res_def,
environment=environment,
).all()
result = {}
lookup_path = ''
for level_value in itertools.chain([None], level_values):
if level_value is not None:
name = level_value.level.name
value = level_value.value
lookup_path += name + '/' + value + '/'
else:
lookup_path += '/'
for resource_value in resource_values:
if resource_value.level_value == level_value:
result.update(resource_value.values)
result.update(resource_value.overrides)
if show_lookup:
values = {}
for k, v in resource_value.values.items():
values[k] = (v, lookup_path)
overrides = {}
for k, v in resource_value.overrides.items():
overrides[k] = (v, lookup_path)
else:
values = resource_value.values
overrides = resource_value.overrides
result.update(values)
result.update(overrides)
break
return result
else:

View File

@ -246,3 +246,46 @@ class TestResourceOverrides(BaseTest):
data = [['key_0', 'val_0']]
res = self.client.put(obj_keys_url, data=data)
self.assertEqual(409, res.status_code)
def test_get_resource_overrides_effective_with_lookup(self):
self._fixture()
res = self.client.put('/environments/9/resources/5/values',
data={'key0': 'root_value_0',
'key1': 'root_value_1',
'key2': 'root_value_2',
'key3': 'root_value_3'})
self.assertEqual(res.status_code, 204)
res = self.client.put('/environments/9/lvl1/1/resources/5/values',
data={'key0': 'lvl1_value_0'})
self.assertEqual(res.status_code, 204)
# Override key0 on level1
res = self.client.put('/environments/9/lvl1/1/resources/5/overrides',
data={'key0': 'lvl1_overrides_0'})
self.assertEqual(res.status_code, 204)
# Override key1 on level1/level2
res = self.client.put(
'/environments/9/lvl1/1/lvl2/2/resources/5/values',
data={'key1': 'lvl2_value_1', 'key2': 'lvl2_value_2'}
)
self.assertEqual(res.status_code, 204)
res = self.client.put(
'/environments/9/lvl1/1/lvl2/2/resources/5/overrides',
data={'key1': 'lvl2_overrides_1'}
)
self.assertEqual(res.status_code, 204)
# Checking lookup info
res = self.client.get(
'/environments/9/lvl1/1/lvl2/2/resources/5/values?'
'effective&show_lookup',
)
self.assertEqual(res.status_code, 200)
expected = {
'key0': ['lvl1_overrides_0', '/lvl1/1/'],
'key1': ['lvl2_overrides_1', '/lvl1/1/lvl2/2/'],
'key2': ['lvl2_value_2', '/lvl1/1/lvl2/2/'],
'key3': ['root_value_3', '/']
}
self.assertEqual(expected, res.json)

View File

@ -258,3 +258,38 @@ class TestResourceValues(BaseTest):
data = [['key_0', 'val_0']]
res = self.client.put(obj_keys_url, data=data)
self.assertEqual(409, res.status_code)
def test_get_resource_values_effective_with_lookup(self):
self._fixture()
res = self.client.put('/environments/9/resources/5/values',
data={'key0': 'root_value_0',
'key1': 'root_value_1',
'key2': 'root_value_2',
'key3': 'root_value_3'})
self.assertEqual(res.status_code, 204)
# Set key0 value on level1
res = self.client.put('/environments/9/lvl1/1/resources/5/values',
data={'key0': 'lvl1_value_0'})
self.assertEqual(res.status_code, 204)
# Set key1, key2 values on level1/level2
res = self.client.put(
'/environments/9/lvl1/1/lvl2/2/resources/5/values',
data={'key1': 'lvl2_value_1', 'key2': 'lvl2_value_2'}
)
self.assertEqual(res.status_code, 204)
# Checking lookup info
res = self.client.get(
'/environments/9/lvl1/1/lvl2/2/resources/5/values?'
'effective&show_lookup',
)
self.assertEqual(res.status_code, 200)
expected = {
'key0': ['lvl1_value_0', '/lvl1/1/'],
'key1': ['lvl2_value_1', '/lvl1/1/lvl2/2/'],
'key2': ['lvl2_value_2', '/lvl1/1/lvl2/2/'],
'key3': ['root_value_3', '/']
}
self.assertEqual(expected, res.json)