Browse Source

Dedeuplication bufix in prepare_filter

The dedup mechanism was using a cast of list to set. But sometimes, filters contains list, and list are not hashable...
Yann Weber 8 years ago
parent
commit
60acfd80f1
1 changed files with 11 additions and 2 deletions
  1. 11
    2
      lodel/leapi/query.py

+ 11
- 2
lodel/leapi/query.py View File

@@ -188,9 +188,18 @@ class LeFilteredQuery(LeQuery):
188 188
                 other_ds_filters[cur_ds].append(
189 189
                     ((rfield, ref_dict), op, value))
190 190
         #deduplication of std filters
191
+        filters_cp = set()
191 192
         if not isinstance(filters_orig, set):
192
-            filters_orig = set(filters_orig)
193
-        filters_orig = list(filters_orig)
193
+            for i, cfilt in enumerate(filters_orig):
194
+                a,b,c = cfilt
195
+                if isinstance(c, list): #list are not hashable
196
+                    newc = tuple(c)
197
+                else:
198
+                    newc = c
199
+                old_len = len(filters_cp)
200
+                filters_cp |= set((a,b,newc))
201
+                if len(filters_cp) == old_len:
202
+                    del(filters_orig[i])
194 203
         # Sets _query_filter attribute of self query
195 204
         self._query_filter = (filters_orig, result_rel_filters)
196 205
 

Loading…
Cancel
Save