Merge "Support new facet response format"

This commit is contained in:
Jenkins
2016-07-26 18:59:25 +00:00
committed by Gerrit Code Review
4 changed files with 36 additions and 6 deletions

View File

@@ -64,7 +64,12 @@ class ListFacet(command.Lister):
data = search_client.facets.list(**params) data = search_client.facets.list(**params)
result = [] result = []
for resource_type, values in six.iteritems(data): for resource_type, values in six.iteritems(data):
for s in values: if isinstance(values, list):
# Cope with pre-1.0 service APIs
facets = values
else:
facets = values['facets']
for s in facets:
options = [] options = []
for o in s.get('options', []): for o in s.get('options', []):
options.append( options.append(

View File

@@ -26,7 +26,7 @@ ResourceType = {
} }
Facet = { OldFacet = {
"OS::Nova::Server": "OS::Nova::Server":
[ [
{"type": "string", "name": "id"}, {"type": "string", "name": "id"},
@@ -35,6 +35,20 @@ Facet = {
} }
# The alternate facet format introduced in
# https://blueprints.launchpad.net/searchlight/+spec/count-endpoint
Facet = {
"OS::Nova::Server":
{
"doc_count": 2,
"facets": [
{"type": "string", "name": "id"},
{"type": "date", "name": "created_at"},
]
}
}
Resource = { Resource = {
"hits": "hits":
{"hits": {"hits":

View File

@@ -21,10 +21,9 @@ class TestFacet(searchlight_fakes.TestSearchv1):
self.facet_client = self.app.client_manager.search.facets self.facet_client = self.app.client_manager.search.facets
class TestFacetList(TestFacet): class TestFacetListBase(TestFacet):
def setUp(self): def setUp(self):
super(TestFacetList, self).setUp() super(TestFacetListBase, self).setUp()
self.cmd = facet.ListFacet(self.app, None) self.cmd = facet.ListFacet(self.app, None)
self.facet_client.list.return_value = searchlight_fakes.Facet self.facet_client.list.return_value = searchlight_fakes.Facet
@@ -42,6 +41,8 @@ class TestFacetList(TestFacet):
) )
self.assertEqual(datalist, tuple(data)) self.assertEqual(datalist, tuple(data))
class TestFacetList(TestFacetListBase):
def test_list(self): def test_list(self):
self._test_list([], all_projects=False, limit_terms=None, type=None) self._test_list([], all_projects=False, limit_terms=None, type=None)
@@ -58,3 +59,12 @@ class TestFacetList(TestFacet):
self._test_list(['--limit-terms', 'fake_limit'], self._test_list(['--limit-terms', 'fake_limit'],
all_projects=False, all_projects=False,
limit_terms='fake_limit', type=None) limit_terms='fake_limit', type=None)
class TestOldFacetList(TestFacetListBase):
def setUp(self):
super(TestOldFacetList, self).setUp()
self.facet_client.list.return_value = searchlight_fakes.OldFacet
def test_list(self):
self._test_list([], all_projects=False, limit_terms=None, type=None)

View File

@@ -37,7 +37,8 @@ class FacetsManager(base.BaseManager):
that support facet terms. that support facet terms.
:param type: Request facets for a particular type by adding a type :param type: Request facets for a particular type by adding a type
query parameter. query parameter.
:rtype: list of :class:`Facets` :rtype: dict of {resource_type: {'facets': [:class:`Facets`],
'doc_count':, :class:int}}
""" """
params = {} params = {}
if kwargs.get('index'): if kwargs.get('index'):