diff options
author | Michael Wood <michael.g.wood@intel.com> | 2015-08-04 22:46:32 +0300 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-08-06 16:04:45 -0500 |
commit | f4e51fff4a9dc8d44390482af11551dfa10e6f4b (patch) | |
tree | 8b006f8c3650cc8bca9a158a53e1f9c065571234 /bitbake | |
parent | 68128ad2f1ab2004e64511c2ce9162cdfa6a9cb5 (diff) | |
download | openembedded-core-contrib-f4e51fff4a9dc8d44390482af11551dfa10e6f4b.tar.gz |
bitbake: toastergui: widgets Add a typeahead widget
The typeahead behaviour is significantly different from searching in a
table so we need a separate widget to do this.
[YOCTO #7152]
(Bitbake rev: 195c5407a9de29d97f2525b9ae6c827afb934e37)
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/toaster/toastergui/widgets.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/bitbake/lib/toaster/toastergui/widgets.py b/bitbake/lib/toaster/toastergui/widgets.py index 08854024f5..2adf574783 100644 --- a/bitbake/lib/toaster/toastergui/widgets.py +++ b/bitbake/lib/toaster/toastergui/widgets.py @@ -354,3 +354,55 @@ class ToasterTemplateView(TemplateView): content_type = "application/json; charset=utf-8") return super(ToasterTemplateView, self).get(*args, **kwargs) + +class ToasterTypeAhead(View): + """ A typeahead mechanism to support the front end typeahead widgets """ + MAX_RESULTS = 6 + + class MissingFieldsException(Exception): + pass + + def __init__(self, *args, **kwargs): + super(ToasterTypeAhead, self).__init__() + + def get(self, request, *args, **kwargs): + def response(data): + return HttpResponse(json.dumps(data, + indent=2, + cls=DjangoJSONEncoder), + content_type="application/json") + + error = "ok" + + search_term = request.GET.get("search", None) + if search_term == None: + # We got no search value so return empty reponse + return response({'error' : error , 'results': []}) + + try: + prj = Project.objects.get(pk=kwargs['pid']) + except KeyError: + prj = None + + results = self.apply_search(search_term, prj, request)[:ToasterTypeAhead.MAX_RESULTS] + + if len(results) > 0: + try: + self.validate_fields(results[0]) + except MissingFieldsException as e: + error = e + + data = { 'results' : results, + 'error' : error, + } + + return response(data) + + def validate_fields(self, result): + if 'name' in result == False or 'detail' in result == False: + raise MissingFieldsException("name and detail are required fields") + + def apply_search(self, search_term, prj): + """ Override this function to implement search. Return an array of + dictionaries with a minium of a name and detail field""" + pass |