Patchwork [bitbake-devel,5/9] toaster: fix filtering query for multiple filters

login
register
mail settings
Submitter Alexandru DAMIAN
Date April 9, 2014, 1:17 p.m.
Message ID <befe17a5084ebd878df11f67d0de0154a020a977.1397049329.git.alexandru.damian@intel.com>
Download mbox | patch
Permalink /patch/70381/
State New
Headers show

Comments

Alexandru DAMIAN - April 9, 2014, 1:17 p.m.
From: Alexandru DAMIAN <alexandru.damian@intel.com>

This is a fix for using multiple expressions in filters.
Three different issues are touched:
* added an explicit error message for incorrect filter usage
* changed the value separator to something that will pass
through from the browser to the actual code
* changed the "and" operator for combining Q from a dubios
lambda function to the standard operator.and_

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
---
 lib/toaster/toastergui/views.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Patch

diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index 96ce4d7..4ed9940 100644
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -80,7 +80,7 @@  def _redirect_parameters(view, g, mandatory_parameters, *args, **kwargs):
     return redirect(url + "?%s" % urllib.urlencode(params), *args, **kwargs)
 
 FIELD_SEPARATOR = ":"
-VALUE_SEPARATOR = ";"
+VALUE_SEPARATOR = "!"
 DESCENDING = "-"
 
 def __get_q_for_val(name, value):
@@ -102,7 +102,7 @@  def _get_filtering_query(filter_string):
     values = search_terms[1].split(VALUE_SEPARATOR)
 
     querydict = dict(zip(keys, values))
-    return reduce(lambda x, y: x & y, map(lambda x: __get_q_for_val(k, querydict[k]),[k for k in querydict]))
+    return reduce(operator.and_, map(lambda x: __get_q_for_val(x, querydict[x]), [k for k in querydict]))
 
 def _get_toggle_order(request, orderkey, reverse = False):
     if reverse:
@@ -128,7 +128,7 @@  def _validate_input(input, model):
 
         # Check we have only one colon
         if len(input_list) != 2:
-            invalid = "We have an invalid number of separators"
+            invalid = "We have an invalid number of separators: " + input + " -> " + str(input_list)
             return None, invalid
 
         # Check we have an equal number of terms both sides of the colon