From b958a991caa947fde2ccb073e3cb7924e162562d Mon Sep 17 00:00:00 2001 From: Jose Lamego Date: Wed, 31 May 2017 15:47:24 -0500 Subject: [PATCH] layerindex/views: support querying by layer name This change supports querying recipes that belong to a specific layer by using the prefix "layer:" + the desired layer name, for example: "layer: openembedded-core" and this string can be used by itself or combined with other supported options. A descriptive error message is displayed when the query string has an unexpected formatting or a non-valid layer name is searched. [YOCTO #6618] Signed-off-by: Jose Lamego Signed-off-by: Paul Eggleton --- layerindex/views.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/layerindex/views.py b/layerindex/views.py index 65a536a..2f7d45e 100644 --- a/layerindex/views.py +++ b/layerindex/views.py @@ -390,13 +390,29 @@ class RecipeSearchView(ListView): for item in query_items: if item.startswith('inherits:'): inherits.append(item.split(':')[1]) + # support searches by layer name + elif item.startswith('layer:'): + query_layername = item.split(':')[1].strip().lower() + if not query_layername: + messages.add_message(self.request, messages.ERROR, 'The \ +layer name is expected to follow the \"layer:\" prefix without any spaces.') + else: + query_layer = LayerBranch.objects.filter( + layer__name=query_layername) + if query_layer: + init_qs = init_qs.filter( + layerbranch__layer__id=query_layer[0].id) + else: + messages.add_message(self.request, messages.ERROR, + 'No layer \"%s\" was found.' + % query_layername) else: query_terms.append(item) if inherits: # FIXME This is a bit ugly, perhaps we should consider having this as a one-many relationship instead for inherit in inherits: init_qs = init_qs.filter(Q(inherits=inherit) | Q(inherits__startswith=inherit + ' ') | Q(inherits__endswith=' ' + inherit) | Q(inherits__contains=' %s ' % inherit)) - query_string = ' '.join(query_terms) + query_string = ' '.join(query_terms) if query_string.strip(): order_by = ('pn', 'layerbranch__layer')