[yocto] [layerindex-web][PATCH v2] layerindex/views: support querying by layer name

Jose Lamego jose.a.lamego at linux.intel.com
Wed May 31 13:47:24 PDT 2017


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 <jose.a.lamego at linux.intel.com>
---
 layerindex/views.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/layerindex/views.py b/layerindex/views.py
index 65a536a..3eac3ac 100644
--- a/layerindex/views.py
+++ b/layerindex/views.py
@@ -390,13 +390,28 @@ 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.')
+                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')
-- 
2.7.4




More information about the yocto mailing list