]> git.parisson.com Git - telemeta.git/commitdiff
Remove parameter type get_boolean_query + verify boolean when searching
authormathieu <mathieu.boye28@gmail.com>
Tue, 17 May 2016 10:49:28 +0000 (12:49 +0200)
committermathieu <mathieu.boye28@gmail.com>
Tue, 17 May 2016 10:49:28 +0000 (12:49 +0200)
telemeta/forms/haystack_form.py
telemeta/util/backend.py
telemeta/views/search.py

index 5292c1c3123d46deba1748b5eb983b20aebf5042..fdc42c9dede4645de4aeb5b95da469ece5760a83 100644 (file)
@@ -156,6 +156,14 @@ class HayAdvanceForm(SearchForm):
     code = forms.CharField(required=False, label=(_('code')), widget=forms.TextInput(attrs={'class': 'form-control', 'type': 'search'}))
 
     def filterInstru(self, query):
+
+        from telemeta.views.search import BooleanSearchView, Erreur
+
+        try:
+            BooleanSearchView().isCorrectQuery(query)
+        except Erreur:
+            return SQ(instruments__startswith=query)
+
         operateur = "ET"
         if isinstance(query, list):
             queryTerms = query
index 04b299505611e24cfc75e0d3908fdb21dfb4801b..7c25ecc138e13268b433e8d8d54ff77416eb53f5 100644 (file)
@@ -30,6 +30,13 @@ class CustomElasticSearchQuery(ElasticsearchSearchQuery):
         valeur = super(CustomElasticSearchQuery, self).build_query_fragment(field, filter_type, value)
         return valeur
 
+    def build_query(self):
+        val = super(CustomElasticSearchQuery, self).build_query()
+        import sys
+        print(val)
+        sys.stdout.flush()
+        return val
+
 class CustomElasticEngine(ElasticsearchSearchEngine):
     backend = CustomElasticBackend
     query = CustomElasticSearchQuery
index 89db95c6810fb3fccb364ed890fa1c08262b7df2..a736cb0e7dc54cc44561a5c83cb622f58b85ee24 100644 (file)
@@ -28,8 +28,8 @@ from telemeta.forms.boolean_form import *
 from django.forms.formsets import formset_factory
 import re
 
-class HaystackSearch(FacetedSearchView, SavedSearchView):
 
+class HaystackSearch(FacetedSearchView, SavedSearchView):
     search_key = 'quick'
 
     def __call__(self, request, type=None):
@@ -47,11 +47,11 @@ class HaystackSearch(FacetedSearchView, SavedSearchView):
         return super(HaystackSearch, self).get_query()
 
     def get_results(self):
-        if(self.type == 'item'):
+        if (self.type == 'item'):
             return super(HaystackSearch, self).get_results().models(MediaItem)
-        elif(self.type == 'corpus'):
+        elif (self.type == 'corpus'):
             return super(HaystackSearch, self).get_results().models(MediaCorpus)
-        elif(self.type == 'fonds'):
+        elif (self.type == 'fonds'):
             return super(HaystackSearch, self).get_results().models(MediaFonds)
         else:
             return super(HaystackSearch, self).get_results().models(MediaCollection)
@@ -89,7 +89,8 @@ class HaystackSearch(FacetedSearchView, SavedSearchView):
 
             extra['Published_count'] = self.get_results().narrow('item_status:Published').count()
             extra['Unpublished_count'] = self.get_results().narrow('item_status:Unpublished').count()
-            extra['viewable_count'] = self.get_results().narrow('item_acces:full OR item_acces:mixed').narrow('digitized:T').count()
+            extra['viewable_count'] = self.get_results().narrow('item_acces:full OR item_acces:mixed').narrow(
+                'digitized:T').count()
             extra['digitized_count'] = self.get_results().narrow('digitized:T').count()
             extra['CDR_count'] = self.get_results().narrow('physical_format:CDR').count()
             extra['Disque_count'] = self.get_results().narrow('physical_format:Disque').count()
@@ -116,7 +117,6 @@ class HaystackSearch(FacetedSearchView, SavedSearchView):
 
 
 class HaystackAdvanceSearch(SavedSearchView):
-
     search_key = 'advanced'
 
     def __call__(self, request, type=None):
@@ -129,17 +129,17 @@ class HaystackAdvanceSearch(SavedSearchView):
         return super(HaystackAdvanceSearch, self).__call__(request)
 
     def get_query(self):
-        #overwrite the get_query for begin search with any form
+        # overwrite the get_query for begin search with any form
         if self.form.is_valid():
             return self.form.cleaned_data
         return ''
 
     def get_results(self):
-        if(self.type == 'item'):
+        if (self.type == 'item'):
             return self.form.search().models(MediaItem)
-        elif(self.type == 'fonds'):
+        elif (self.type == 'fonds'):
             return self.form.search().models(MediaFonds)
-        elif(self.type == 'corpus'):
+        elif (self.type == 'corpus'):
             return self.form.search().models(MediaCorpus)
         else:
             return self.form.search().models(MediaCollection)
@@ -153,9 +153,9 @@ class HaystackAdvanceSearch(SavedSearchView):
 
         if self.type == 'item':
             extra['type'] = 'item'
-        elif  self.type == 'fonds':
+        elif self.type == 'fonds':
             extra['type'] = 'fonds'
-        elif(self.type == 'corpus'):
+        elif (self.type == 'corpus'):
             extra['type'] = 'corpus'
         else:
             extra['type'] = 'collection'
@@ -165,6 +165,7 @@ class HaystackAdvanceSearch(SavedSearchView):
         extra['request_url'] = self.requestURL
         return extra
 
+
 def autocomplete(request):
     attribut = request.GET.get('attr', '')
     sqs = SearchQuerySet().load_all()
@@ -203,16 +204,18 @@ def autocomplete(request):
     })
     return HttpResponse(the_data, content_type='application/json')
 
+
 import unicodedata
 
+
 def escapeAccentAndLower(chaine):
     return unicodedata.normalize('NFD', chaine).encode('ascii', 'ignore').lower()
 
-class BooleanSearchView(object):
 
+class BooleanSearchView(object):
     form = formset_factory(BooleanSearch)
 
-    def getBooleanQuery(self, request, type='json'):
+    def getBooleanQuery(self, request):
         if request.method != 'GET':
             return HttpResponse(json.dumps({'result': '[ERROR]:Not Request GET'}), content_type='application/json')
 
@@ -221,34 +224,31 @@ class BooleanSearchView(object):
             query = ""
             for i in range(len(formset.forms)):
                 formul = formset.forms[i]
-                if i!=0:
-                    query+=formul.cleaned_data["boolean"]+" "
-                query+=formul.cleaned_data["startBracket"]
-                query+=formul.cleaned_data["textField"].strip()+" "
-                query+=formul.cleaned_data["endBracket"]
+                if i != 0:
+                    query += formul.cleaned_data["boolean"] + " "
+                query += formul.cleaned_data["startBracket"]
+                query += formul.cleaned_data["textField"].strip() + " "
+                query += formul.cleaned_data["endBracket"]
             try:
                 self.isCorrectQuery(query.strip())
             except Erreur as e:
-                if type=="json":
-                    return HttpResponse(json.dumps({'result': e.message}), content_type='application/json')
-            if type=="json":
-                return HttpResponse(json.dumps({'result': query.strip()}), content_type='application/json')
+                return HttpResponse(json.dumps({'result': e.message}), content_type='application/json')
+            return HttpResponse(json.dumps({'result': query.strip()}), content_type='application/json')
         else:
-            if type=="json":
-                return HttpResponse(json.dumps({'result': '[ERROR]Field(s) missing'}), content_type='application/json')
+            return HttpResponse(json.dumps({'result': '[ERROR]Field(s) missing'}), content_type='application/json')
 
-    def isCorrectQuery(self, query):#
+    def isCorrectQuery(self, query):
         tabQuery = query.split()
         openBracket = 0
         boolean = False
         for mot in tabQuery:
-            if mot ==")":#
+            if mot == ")":  #
                 if openBracket == 0:
                     raise Erreur("[ERROR]Open Bracket Is Missing !")
                 else:
                     openBracket -= 1
                     boolean = False
-            elif mot=="ET" or mot=="OU":
+            elif mot == "ET" or mot == "OU":
                 if boolean:
                     raise Erreur("[ERROR]Two boolean follow")
                 else:
@@ -265,6 +265,5 @@ class BooleanSearchView(object):
             return True
 
 
-
-class Erreur(Exception):#
-    pass#
\ No newline at end of file
+class Erreur(Exception):  #
+    pass  #