[PATCH 2/5] opensearch: make the completion compatible with OpenSearch
OpenSearch completion expects an array containing the following
elements:
- the prefix
- the list of completions
- the list of descriptions (optional)
- the list of URL (optional)
See:
http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0
---
distro_tracker/core/static/js/main.js | 10 ++++++++--
distro_tracker/core/tests/tests_views.py | 30 +++++++++++++++++++++---------
distro_tracker/core/views.py | 4 +++-
3 files changed, 32 insertions(+), 12 deletions(-)
diff --git a/distro_tracker/core/static/js/main.js b/distro_tracker/core/static/js/main.js
index d13e2ee6cbdd..3eee6aa17eb4 100644
--- a/distro_tracker/core/static/js/main.js
+++ b/distro_tracker/core/static/js/main.js
@@ -15,14 +15,20 @@ $(function() {
$('#package-search-input, .package-search-input').typeahead([
{
name: 'source-packages',
- remote: '/api/package/search/autocomplete?q=%QUERY&package_type=source',
+ remote: {
+ url: '/api/package/search/autocomplete?q=%QUERY&package_type=source',
+ filter: function(r) { return r[1]; }
+ },
header: '<h5 class="text-center typeahead-package-title">Source packages</h5>',
// Use a slightly larger delay between requests than the default
rateLimitWait: 500
},
{
name: 'pseudo-packages',
- remote: '/api/package/search/autocomplete?q=%QUERY&package_type=pseudo',
+ remote: {
+ url: '/api/package/search/autocomplete?q=%QUERY&package_type=pseudo',
+ filter: function(r) { return r[1]; }
+ },
header: '<h5 class="text-center typeahead-package-title">Pseudo Packages</h5>',
// Use a slightly larger delay between requests than the default
rateLimitWait: 500
diff --git a/distro_tracker/core/tests/tests_views.py b/distro_tracker/core/tests/tests_views.py
index ab4bf0848e97..9d8db7c92d1c 100644
--- a/distro_tracker/core/tests/tests_views.py
+++ b/distro_tracker/core/tests/tests_views.py
@@ -279,8 +279,10 @@ class PackageAutocompleteViewTest(TestCase):
response = json.loads(response.content.decode('utf-8'))
self.assertEqual(len(response), 2)
- self.assertIn('dummy-package', response)
- self.assertIn('d-package', response)
+ self.assertEqual(response[0], 'd')
+ self.assertEqual(len(response[1]), 2)
+ self.assertIn('dummy-package', response[1])
+ self.assertIn('d-package', response[1])
# No packages given when there are no matching source packages
response = self.client.get(reverse('dtracker-api-package-autocomplete'), {
@@ -288,7 +290,9 @@ class PackageAutocompleteViewTest(TestCase):
'q': 'z',
})
response = json.loads(response.content.decode('utf-8'))
- self.assertEqual(len(response), 0)
+ self.assertEqual(len(response), 2)
+ self.assertEqual(response[0], 'z')
+ self.assertEqual(len(response[1]), 0)
def test_pseudo_package_autocomplete(self):
"""
@@ -301,8 +305,10 @@ class PackageAutocompleteViewTest(TestCase):
})
response = json.loads(response.content.decode('utf-8'))
- self.assertEqual(len(response), 1)
- self.assertIn('pseudo-package', response)
+ self.assertEqual(len(response), 2)
+ self.assertEqual(response[0], 'p')
+ self.assertEqual(len(response[1]), 1)
+ self.assertIn('pseudo-package', response[1])
# No packages given when there are no matching pseudo packages
response = self.client.get(reverse('dtracker-api-package-autocomplete'), {
@@ -310,7 +316,9 @@ class PackageAutocompleteViewTest(TestCase):
'q': '-',
})
response = json.loads(response.content.decode('utf-8'))
- self.assertEqual(len(response), 0)
+ self.assertEqual(len(response), 2)
+ self.assertEqual(response[0], '-')
+ self.assertEqual(len(response[1]), 0)
def test_all_packages_autocomplete(self):
"""
@@ -323,15 +331,19 @@ class PackageAutocompleteViewTest(TestCase):
response = json.loads(response.content.decode('utf-8'))
self.assertEqual(len(response), 2)
- self.assertIn('package', response)
- self.assertIn('pseudo-package', response)
+ self.assertEqual(response[0], 'p')
+ self.assertEqual(len(response[1]), 2)
+ self.assertIn('package', response[1])
+ self.assertIn('pseudo-package', response[1])
# No packages given when there are no matching packages
response = self.client.get(reverse('dtracker-api-package-autocomplete'), {
'q': '-',
})
response = json.loads(response.content.decode('utf-8'))
- self.assertEqual(len(response), 0)
+ self.assertEqual(len(response), 2)
+ self.assertEqual(response[0], '-')
+ self.assertEqual(len(response[1]), 0)
def test_no_query_given(self):
"""
diff --git a/distro_tracker/core/views.py b/distro_tracker/core/views.py
index 1b54f82e40dd..0622ce34259e 100644
--- a/distro_tracker/core/views.py
+++ b/distro_tracker/core/views.py
@@ -147,7 +147,9 @@ class PackageAutocompleteView(View):
# Limit the number of packages returned from the autocomplete
AUTOCOMPLETE_ITEMS_LIMIT = 10
filtered = filtered[:AUTOCOMPLETE_ITEMS_LIMIT]
- return render_to_json_response([package['name'] for package in filtered])
+ return render_to_json_response([query_string,
+ [package['name']
+ for package in filtered]])
def news_page(request, news_id):
--
2.0.1
Reply to: