api: allow usage of resource_metadata in query

When returning samples, they have a field called resource_metadata, and
therefore it may seem nature to filter on it using this as a prefix in
queries. Let's allow use of it.

Fixes-Bug: #1195765

Change-Id: I82f591e0d38a3063a9762de1ac64dc3ef9d29ee7
This commit is contained in:
Julien Danjou 2013-08-22 18:33:50 +02:00
parent 3eadb6b07d
commit 502824ad2c
2 changed files with 16 additions and 0 deletions

View File

@ -256,6 +256,8 @@ def _query_to_kwargs(query, db_func):
stamp['search_offset'] = i.value
elif i.field.startswith('metadata.'):
metaquery[i.field] = i._get_value_as_type()
elif i.field.startswith('resource_metadata.'):
metaquery[i.field[9:]] = i._get_value_as_type()
else:
trans[translation.get(i.field, i.field)] = i.value

View File

@ -173,6 +173,20 @@ class TestListMeters(FunctionalTest,
self.assertEqual(set(r['counter_name'] for r in data),
set(['meter.test']))
def test_list_meters_resource_metadata_query(self):
# NOTE(jd) Same test as above, but with the alias resource_metadata
# as query field
data = self.get_json('/meters/meter.test',
q=[{'field': 'resource_metadata.tag',
'op': 'eq',
'value': 'self.sample1',
}],)
self.assertEqual(1, len(data))
self.assertEqual(set(r['resource_id'] for r in data),
set(['resource-id']))
self.assertEqual(set(r['counter_name'] for r in data),
set(['meter.test']))
def test_list_meters_multi_metadata_query(self):
data = self.get_json('/meters/meter.test',
q=[{'field': 'metadata.tag',