[yocto] [layerindex-web][PATCH] views: support querying by layer name
Paul Eggleton
paul.eggleton at linux.intel.com
Wed May 24 17:16:54 PDT 2017
Hi Jose,
Sorry for the extreme delay reviewing this.
On Tuesday, 4 April 2017 7:31:29 AM NZST Jose Lamego wrote:
> 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.
>
> [YOCTO #6618]
>
> Signed-off-by: Jose Lamego <jose.a.lamego at linux.intel.com>
> ---
> layerindex/views.py | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/layerindex/views.py b/layerindex/views.py
> index 65a536a..5b66892 100644
> --- a/layerindex/views.py
> +++ b/layerindex/views.py
> @@ -383,13 +383,16 @@ class RecipeSearchView(ListView):
> query_string = self.request.GET.get('q', '')
> init_qs =
Recipe.objects.filter(layerbranch__branch__name=self.kwargs['branch'])
>
> - # Support slightly crude search on inherits field
> + # Support slightly crude search on inherits/layer fields
> query_items = query_string.split()
> inherits = []
> + layers = []
> query_terms = []
> for item in query_items:
> if item.startswith('inherits:'):
> inherits.append(item.split(':')[1])
> + elif item.startswith('layer:'):
> + layers.append(item.split(':')[1])
> else:
> query_terms.append(item)
> if inherits:
> @@ -397,6 +400,14 @@ class RecipeSearchView(ListView):
> 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)
> + if layers:
> + for layer in layers:
> + init_qs = init_qs.filter(
> + Q(layerbranch__layer__name=layer) |
> + Q(layerbranch__layer__name__startswith=layer + ' ') |
> + Q(layerbranch__layer__name__endswith=' ' + layer) |
> + Q(layerbranch__layer__name__contains=' %s ' % layer))
> + query_string = ' '.join(query_terms)
Could we instead determine which layers match the query (i.e. the IDs), and
then do an layerbranch__layer__in (or layerbranch__layer__id__in, not sure
which)? That way we can also return a specific message if no layers match the
query. I'm not sure we really need the fuzzy matches either - just exact name
match.
Cheers,
Paul
--
Paul Eggleton
Intel Open Source Technology Centre
More information about the yocto
mailing list