improvemnets to filters provided by product search results
This commit is contained in:
@@ -471,8 +471,6 @@ class ProductSearchTest(TestCase):
|
|||||||
self.factory(tags="azules"),
|
self.factory(tags="azules"),
|
||||||
]
|
]
|
||||||
|
|
||||||
self.factory(tags="azul")
|
|
||||||
|
|
||||||
query_string = quote("zapatos rojos")
|
query_string = quote("zapatos rojos")
|
||||||
|
|
||||||
url = f"{self.endpoint}?query_string={query_string}"
|
url = f"{self.endpoint}?query_string={query_string}"
|
||||||
@@ -483,6 +481,8 @@ class ProductSearchTest(TestCase):
|
|||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
# check for object creation
|
# check for object creation
|
||||||
self.assertEquals(len(payload['products']), len(expected_instances))
|
self.assertEquals(len(payload['products']), len(expected_instances))
|
||||||
|
# check for filters
|
||||||
|
self.assertNotEquals([], payload['filters']['singles'])
|
||||||
|
|
||||||
|
|
||||||
class MyProductsViewTest(APITestCase):
|
class MyProductsViewTest(APITestCase):
|
||||||
|
|||||||
@@ -1,9 +1,52 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
def extract_search_filters(result_set):
|
def extract_search_filters(result_set):
|
||||||
filters = set()
|
"""
|
||||||
|
Returned object should look something like:
|
||||||
|
|
||||||
|
{
|
||||||
|
"singles": [], # non tree tags
|
||||||
|
"entry_1": [ 'tag1', 'tag2' ],
|
||||||
|
"entry_2": [ 'tag1', 'tag2' ],
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
filter_dict = {
|
||||||
|
'singles': set(),
|
||||||
|
}
|
||||||
for item in result_set:
|
for item in result_set:
|
||||||
|
# import ipdb; ipdb.set_trace()
|
||||||
|
try:
|
||||||
|
# extract tags
|
||||||
tags = item.tags.all()
|
tags = item.tags.all()
|
||||||
for tag in tags:
|
for tag in tags:
|
||||||
filters.add(tag.name)
|
if len(tag.name.split('/')) == 1:
|
||||||
return list(filters)
|
filter_dict['singles'].add(tag.name)
|
||||||
|
else:
|
||||||
|
# set penultimate tag as header
|
||||||
|
chunks = tag.name.split('/')
|
||||||
|
header = chunks[-2]
|
||||||
|
name = chunks[-1]
|
||||||
|
# check if
|
||||||
|
entry = filter_dict.get(header)
|
||||||
|
if entry is None:
|
||||||
|
filter_dict[header] = set()
|
||||||
|
filter_dict[header].add(name)
|
||||||
|
# extract attributes
|
||||||
|
attributes = item.attributes.all()
|
||||||
|
for tag in attributes:
|
||||||
|
if len(tag.name.split('/')) == 1:
|
||||||
|
filter_dict['singles'].add(tag.name)
|
||||||
|
else:
|
||||||
|
# set penultimate tag as header
|
||||||
|
chunks = tag.name.split('/')
|
||||||
|
header = chunks[-2]
|
||||||
|
name = chunks[-1]
|
||||||
|
# check if
|
||||||
|
entry = filter_dict.get(header)
|
||||||
|
if entry is None:
|
||||||
|
filter_dict[header] = set()
|
||||||
|
filter_dict[header].add(name)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f'Extacting filters for {item}')
|
||||||
|
return filter_dict
|
||||||
|
|||||||
Reference in New Issue
Block a user