[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