Optional data for resource_data_get_all
resource_data_get_all queries the database for the data, and transforms the results to a decrypted dict. If the data is already loaded then it is unnecessary to do the database query again. This change allows data to be passed in as an optional argument. If the passed data is not None then no database call will be made and the dict transformation will occur on passed data. Change-Id: I579225d9a3f3b038e0ca41a5900c58413d6e25ac Related-Bug: #1306743
This commit is contained in:
parent
772192047a
commit
5808fbffe0
|
@ -55,8 +55,8 @@ def raw_template_create(context, values):
|
|||
return IMPL.raw_template_create(context, values)
|
||||
|
||||
|
||||
def resource_data_get_all(resource):
|
||||
return IMPL.resource_data_get_all(resource)
|
||||
def resource_data_get_all(resource, data=None):
|
||||
return IMPL.resource_data_get_all(resource, data)
|
||||
|
||||
|
||||
def resource_data_get(resource, key):
|
||||
|
|
|
@ -138,20 +138,21 @@ def resource_get_all(context):
|
|||
return results
|
||||
|
||||
|
||||
def resource_data_get_all(resource):
|
||||
def resource_data_get_all(resource, data=None):
|
||||
"""
|
||||
Looks up resource_data by resource.id. If data is encrypted,
|
||||
this method will decrypt the results.
|
||||
"""
|
||||
result = (model_query(resource.context, models.ResourceData)
|
||||
.filter_by(resource_id=resource.id))
|
||||
if data is None:
|
||||
data = (model_query(resource.context, models.ResourceData)
|
||||
.filter_by(resource_id=resource.id))
|
||||
|
||||
if not result:
|
||||
if not data:
|
||||
raise exception.NotFound(_('no resource data found'))
|
||||
|
||||
ret = {}
|
||||
|
||||
for res in result:
|
||||
for res in data:
|
||||
if res.redact:
|
||||
ret[res.key] = _decrypt(res.value, res.decrypt_method)
|
||||
else:
|
||||
|
|
|
@ -1399,11 +1399,18 @@ class DBAPIResourceDataTest(HeatTestCase):
|
|||
val = db_api.resource_data_get(self.resource, 'encryped_resource_key')
|
||||
self.assertEqual('test_value', val)
|
||||
|
||||
# get all by querying for data
|
||||
vals = db_api.resource_data_get_all(self.resource)
|
||||
self.assertEqual(2, len(vals))
|
||||
self.assertEqual('foo', vals.get('test_resource_key'))
|
||||
self.assertEqual('test_value', vals.get('encryped_resource_key'))
|
||||
|
||||
# get all by using associated resource data
|
||||
vals = db_api.resource_data_get_all(None, self.resource.data)
|
||||
self.assertEqual(2, len(vals))
|
||||
self.assertEqual('foo', vals.get('test_resource_key'))
|
||||
self.assertEqual('test_value', vals.get('encryped_resource_key'))
|
||||
|
||||
def test_resource_data_delete(self):
|
||||
create_resource_data(self.ctx, self.resource)
|
||||
res_data = db_api.resource_data_get_by_key(self.ctx, self.resource.id,
|
||||
|
|
Loading…
Reference in New Issue