summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui')
-rw-r--r--bitbake/lib/toaster/toastergui/typeaheads.py80
-rw-r--r--bitbake/lib/toaster/toastergui/widgets.py8
2 files changed, 45 insertions, 43 deletions
diff --git a/bitbake/lib/toaster/toastergui/typeaheads.py b/bitbake/lib/toaster/toastergui/typeaheads.py
index 4ded9ac2e6..2c6c1454a1 100644
--- a/bitbake/lib/toaster/toastergui/typeaheads.py
+++ b/bitbake/lib/toaster/toastergui/typeaheads.py
@@ -23,8 +23,6 @@ from django.core.urlresolvers import reverse
23class LayersTypeAhead(ToasterTypeAhead): 23class LayersTypeAhead(ToasterTypeAhead):
24 """ Typeahead for layers available and not added in the current project's 24 """ Typeahead for layers available and not added in the current project's
25 configuration """ 25 configuration """
26 def __init__(self):
27 super(LayersTypeAhead, self).__init__()
28 26
29 def apply_search(self, search_term, prj, request): 27 def apply_search(self, search_term, prj, request):
30 layers = prj.get_all_compatible_layer_versions() 28 layers = prj.get_all_compatible_layer_versions()
@@ -33,13 +31,15 @@ class LayersTypeAhead(ToasterTypeAhead):
33 # Unlike the other typeaheads we also don't want to show suggestions 31 # Unlike the other typeaheads we also don't want to show suggestions
34 # for layers already in the project unless required such as when adding 32 # for layers already in the project unless required such as when adding
35 # layerdeps to a new layer. 33 # layerdeps to a new layer.
36 if ("include_added" in request.GET and 34 if "include_added" in request.GET and \
37 request.GET['include_added'] != "true"): 35 request.GET['include_added'] != "true":
38 layers = layers.exclude( 36 layers = layers.exclude(
39 pk__in=prj.get_project_layer_versions(pk=True)) 37 pk__in=prj.get_project_layer_versions(pk=True))
40 38
41 primary_results = layers.filter(layer__name__istartswith=search_term) 39 primary_results = layers.filter(layer__name__istartswith=search_term)
42 secondary_results = layers.filter(layer__name__icontains=search_term).exclude(pk__in=primary_results) 40 secondary_results = layers.filter(
41 layer__name__icontains=search_term).exclude(
42 pk__in=primary_results)
43 43
44 results = [] 44 results = []
45 45
@@ -49,97 +49,99 @@ class LayersTypeAhead(ToasterTypeAhead):
49 detail = "[ %s | %s ]" % (layer_version.layer.vcs_url, 49 detail = "[ %s | %s ]" % (layer_version.layer.vcs_url,
50 vcs_reference) 50 vcs_reference)
51 needed_fields = { 51 needed_fields = {
52 'id' : layer_version.pk, 52 'id': layer_version.pk,
53 'name' : layer_version.layer.name, 53 'name': layer_version.layer.name,
54 'layerdetailurl' : layer_version.get_detailspage_url(prj.pk), 54 'layerdetailurl': layer_version.get_detailspage_url(prj.pk),
55 'vcs_url' : layer_version.layer.vcs_url, 55 'vcs_url': layer_version.layer.vcs_url,
56 'vcs_reference' : vcs_reference, 56 'vcs_reference': vcs_reference,
57 'detail' : detail, 57 'detail': detail,
58 'local_source_dir' : layer_version.layer.local_source_dir, 58 'local_source_dir': layer_version.layer.local_source_dir,
59 } 59 }
60 60
61 results.append(needed_fields) 61 results.append(needed_fields)
62 62
63 return results 63 return results
64 64
65
65class MachinesTypeAhead(ToasterTypeAhead): 66class MachinesTypeAhead(ToasterTypeAhead):
66 """ Typeahead for all the machines available in the current project's 67 """ Typeahead for all the machines available in the current project's
67 configuration """ 68 configuration """
68 def __init__(self):
69 super(MachinesTypeAhead, self).__init__()
70 69
71 def apply_search(self, search_term, prj, request): 70 def apply_search(self, search_term, prj, request):
72 machines = prj.get_available_machines() 71 machines = prj.get_available_machines()
73 machines = machines.order_by("name") 72 machines = machines.order_by("name")
74 73
75 primary_results = machines.filter(name__istartswith=search_term) 74 primary_results = machines.filter(name__istartswith=search_term)
76 secondary_results = machines.filter(name__icontains=search_term).exclude(pk__in=primary_results) 75 secondary_results = machines.filter(
77 tertiary_results = machines.filter(layer_version__layer__name__icontains=search_term).exclude(pk__in=primary_results).exclude(pk__in=secondary_results) 76 name__icontains=search_term).exclude(pk__in=primary_results)
77 tertiary_results = machines.filter(
78 layer_version__layer__name__icontains=search_term).exclude(
79 pk__in=primary_results).exclude(pk__in=secondary_results)
78 80
79 results = [] 81 results = []
80 82
81 for machine in list(primary_results) + list(secondary_results) + list(tertiary_results): 83 for machine in list(primary_results) + list(secondary_results) + \
84 list(tertiary_results):
82 85
83 detail = "[ %s ]" % (machine.layer_version.layer.name) 86 detail = "[ %s ]" % (machine.layer_version.layer.name)
84 needed_fields = { 87 needed_fields = {
85 'id' : machine.pk, 88 'id': machine.pk,
86 'name' : machine.name, 89 'name': machine.name,
87 'detail' : detail, 90 'detail': detail,
88 } 91 }
89 92
90 results.append(needed_fields) 93 results.append(needed_fields)
91
92 return results 94 return results
93 95
96
94class RecipesTypeAhead(ToasterTypeAhead): 97class RecipesTypeAhead(ToasterTypeAhead):
95 """ Typeahead for all the recipes available in the current project's 98 """ Typeahead for all the recipes available in the current project's
96 configuration """ 99 configuration """
97 def __init__(self):
98 super(RecipesTypeAhead, self).__init__()
99
100 def apply_search(self, search_term, prj, request): 100 def apply_search(self, search_term, prj, request):
101 recipes = prj.get_available_recipes() 101 recipes = prj.get_available_recipes()
102 recipes = recipes.order_by("name") 102 recipes = recipes.order_by("name")
103 103
104
105 primary_results = recipes.filter(name__istartswith=search_term) 104 primary_results = recipes.filter(name__istartswith=search_term)
106 secondary_results = recipes.filter(name__icontains=search_term).exclude(pk__in=primary_results) 105 secondary_results = recipes.filter(
107 tertiary_results = recipes.filter(layer_version__layer__name__icontains=search_term).exclude(pk__in=primary_results).exclude(pk__in=secondary_results) 106 name__icontains=search_term).exclude(pk__in=primary_results)
107 tertiary_results = recipes.filter(
108 layer_version__layer__name__icontains=search_term).exclude(
109 pk__in=primary_results).exclude(pk__in=secondary_results)
108 110
109 results = [] 111 results = []
110 112
111 for recipe in list(primary_results) + list(secondary_results) + list(tertiary_results): 113 for recipe in list(primary_results) + list(secondary_results) + \
114 list(tertiary_results):
112 115
113 detail = "[ %s ]" % (recipe.layer_version.layer.name) 116 detail = "[ %s ]" % (recipe.layer_version.layer.name)
114 needed_fields = { 117 needed_fields = {
115 'id' : recipe.pk, 118 'id': recipe.pk,
116 'name' : recipe.name, 119 'name': recipe.name,
117 'detail' : detail, 120 'detail': detail,
118 } 121 }
119 122
120 results.append(needed_fields) 123 results.append(needed_fields)
121 124
122 return results 125 return results
123 126
127
124class ProjectsTypeAhead(ToasterTypeAhead): 128class ProjectsTypeAhead(ToasterTypeAhead):
125 """ Typeahead for all the projects, except for command line builds """ 129 """ Typeahead for all the projects, except for command line builds """
126 def __init__(self):
127 super(ProjectsTypeAhead, self).__init__()
128
129 def apply_search(self, search_term, prj, request): 130 def apply_search(self, search_term, prj, request):
130 projects = Project.objects.exclude(is_default=True).order_by("name") 131 projects = Project.objects.exclude(is_default=True).order_by("name")
131 132
132 primary_results = projects.filter(name__istartswith=search_term) 133 primary_results = projects.filter(name__istartswith=search_term)
133 secondary_results = projects.filter(name__icontains=search_term).exclude(pk__in=primary_results) 134 secondary_results = projects.filter(
135 name__icontains=search_term).exclude(pk__in=primary_results)
134 136
135 results = [] 137 results = []
136 138
137 for project in list(primary_results) + list(secondary_results): 139 for project in list(primary_results) + list(secondary_results):
138 needed_fields = { 140 needed_fields = {
139 'id' : project.pk, 141 'id': project.pk,
140 'name' : project.name, 142 'name': project.name,
141 'detail' : "", 143 'detail': "",
142 'projectPageUrl' : reverse('project', args=(project.pk,)) 144 'projectPageUrl': reverse('project', args=(project.pk,))
143 } 145 }
144 146
145 results.append(needed_fields) 147 results.append(needed_fields)
diff --git a/bitbake/lib/toaster/toastergui/widgets.py b/bitbake/lib/toaster/toastergui/widgets.py
index 026903d35d..6b7b981f3b 100644
--- a/bitbake/lib/toaster/toastergui/widgets.py
+++ b/bitbake/lib/toaster/toastergui/widgets.py
@@ -42,6 +42,8 @@ import json
42import collections 42import collections
43import re 43import re
44 44
45from toastergui.tablefilter import TableFilterMap
46
45try: 47try:
46 from urllib import unquote_plus 48 from urllib import unquote_plus
47except ImportError: 49except ImportError:
@@ -50,8 +52,6 @@ except ImportError:
50import logging 52import logging
51logger = logging.getLogger("toaster") 53logger = logging.getLogger("toaster")
52 54
53from toastergui.tablefilter import TableFilterMap
54
55 55
56class NoFieldOrDataName(Exception): 56class NoFieldOrDataName(Exception):
57 pass 57 pass
@@ -259,9 +259,9 @@ class ToasterTable(TemplateView):
259 queries = query 259 queries = query
260 260
261 if search_queries: 261 if search_queries:
262 search_queries &= queries 262 search_queries &= queries
263 else: 263 else:
264 search_queries = queries 264 search_queries = queries
265 265
266 self.queryset = self.queryset.filter(search_queries) 266 self.queryset = self.queryset.filter(search_queries)
267 267