From: mathieu Date: Tue, 17 May 2016 10:49:28 +0000 (+0200) Subject: Remove parameter type get_boolean_query + verify boolean when searching X-Git-Tag: 1.6.2^2~15^2~3^2~3 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=d131764c6b9c78aae408605c0d8fd7530d00a4d0;p=telemeta.git Remove parameter type get_boolean_query + verify boolean when searching --- diff --git a/telemeta/forms/haystack_form.py b/telemeta/forms/haystack_form.py index 5292c1c3..fdc42c9d 100644 --- a/telemeta/forms/haystack_form.py +++ b/telemeta/forms/haystack_form.py @@ -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 diff --git a/telemeta/util/backend.py b/telemeta/util/backend.py index 04b29950..7c25ecc1 100644 --- a/telemeta/util/backend.py +++ b/telemeta/util/backend.py @@ -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 diff --git a/telemeta/views/search.py b/telemeta/views/search.py index 89db95c6..a736cb0e 100644 --- a/telemeta/views/search.py +++ b/telemeta/views/search.py @@ -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 #