]> git.parisson.com Git - telemeta.git/commitdiff
Merge branch 'feature/haystack' of github.com:afilsaime/Telemeta into feature/haystack
authorKaltar5679 <killian.mary@outlook.fr>
Wed, 29 Apr 2015 07:57:33 +0000 (09:57 +0200)
committerKaltar5679 <killian.mary@outlook.fr>
Wed, 29 Apr 2015 07:57:33 +0000 (09:57 +0200)
Conflicts:
telemeta/search_indexes.py
telemeta/views/haystack_search.py

1  2 
telemeta/forms/haystack_form.py
telemeta/haystack_urls.py
telemeta/search_indexes.py
telemeta/views/haystack_search.py

index f28688d16a370b997fda1ae7efb6786ffd695c98,dfad2010e9a3a0e3e4dc2bedaf29d476498aa384..6ff97c0def4cce7b15ea1ec30e7dd623941b6db8
@@@ -12,82 -12,21 +12,82 @@@ class HaySearchForm(FacetedSearchForm)
              return sqs
  
          if self.cleaned_data['q']:
-             sqs=sqs.models(MediaItem).filter(content__contains=self.cleaned_data['q'])
+             sqs=sqs.filter(content__contains=self.cleaned_data['q']).facet('item_acces').facet('item_status').facet('digitized')
  
-         return sqs
+         for facet in self.selected_facets:
+             if ":" not in facet:
+                 continue
  
- class HaySearchFormCollection(SearchForm):
+             field, value = facet.split(":", 1)
  
-     def search(self):
-         sqs=SearchQuerySet().load_all()
+             if value:
+                 if value == 'viewable':
+                     sqs = sqs.narrow('item_acces:full OR item_acces:metadata OR item_acces:mixed')
+                 else:
+                     sqs = sqs.narrow(u'%s:"%s"' % (field, sqs.query.clean(value)))
  
-         if not self.is_valid():
-             return sqs
+         return sqs
  
-         if self.cleaned_data['q']:
-             sqs=sqs.models(MediaCollection).filter(content__contains=self.cleaned_data['q'])
  
-         return sqs
  
 +
 +class HayAdvanceFormItem(SearchForm):
 +
 +    cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'}))
 +
 +    def search(self):
 +        sqs = super(HayAdvanceFormItem, self).search().models(MediaItem)
 +
 +        if not self.is_valid():
 +            return sqs
 +
 +        if self.cleaned_data['q']:
 +            sqs = sqs.filter(content__contains=self.cleaned_data['q'])
 +
 +        if self.cleaned_data['cote']:
 +            sqs = sqs.filter(content__cote__contains=self.cleaned_data['cote'])
 +
 +        return sqs
 +
 +
 +class HayAdvanceFormCollection(SearchForm):
 +
 +    cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'}))
 +
 +    def search(self):
 +        sqs = super(HayAdvanceFormCollection, self).search().models(MediaCollection)
 +
 +        if not self.is_valid():
 +            return sqs
 +
 +        if self.cleaned_data['q']:
 +            sqs = sqs.filter(content__contains=self.cleaned_data['q'])
 +
 +        if self.cleaned_data['cote']:
 +            sqs = sqs.filter(content__cote__contains=self.cleaned_data['cote'])
 +
 +        return sqs
 +
 +
 +class HayAdvanceForm(SearchForm):
 +    #to replace de basic search form field
 +    q = forms.CharField(required=False, label=('Title'), widget=forms.TextInput(attrs={'type': 'search'}))
 +    cote = forms.CharField(required=False, label=('Cote'), widget=forms.TextInput(attrs={'type': 'search'}))
 +    location = forms.CharField(required=False, label=('Location'), widget=forms.TextInput(attrs={'type': 'search'}))
 +
-         return sqs
 +    def search(self):
 +        sqs = SearchQuerySet().load_all()
 +
 +        if not self.is_valid():
 +            return self.no_query_found()
 +
 +        if self.cleaned_data.get('q'):
 +            sqs = sqs.filter(title__title__contains=self.cleaned_data['q'])
 +
 +        if self.cleaned_data.get('cote'):
 +            sqs = sqs.filter(cote__cote__contains=self.cleaned_data['cote'])
 +
 +        if self.cleaned_data.get('location'):
 +            sqs = sqs.filter(location__location__contains=self.cleaned_data['location'])
 +
++        return sqs
Simple merge
index 70b610f1a2d0da4a5269e9097ed1d0e791d05d8a,b845312b59ea6f281f998bf0b6956815263ae91e..27c45ce21f0b8172c806ed156d2dcd5ac21b65cf
@@@ -5,11 -5,17 +5,20 @@@ from telemeta.models import 
  class MediaItemIndex(indexes.SearchIndex, indexes.Indexable):
  
      text = indexes.CharField(document=True, use_template=True)
--    item_acces = indexes.CharField(model_attr= 'collection__public_access' , faceted=True)
--    item_status = indexes.CharField(model_attr= 'collection__document_status' , faceted=True)
 -    digitized = indexes.BooleanField(default=False , faceted=True)
 -
 -    def prepare_digitized(self,obj):
++    item_acces = indexes.CharField(model_attr='collection__public_access', faceted=True)
++    item_status = indexes.CharField(model_attr='collection__document_status', faceted=True)
 +    title = indexes.NgramField(model_attr='title')
 +    code = indexes.NgramField(model_attr='code')
 +    location = indexes.NgramField(model_attr='location__name', default='')
++    digitized = indexes.BooleanField(default=False, faceted=True)
++
++    def prepare_digitized(self, obj):
+         if obj.file.name:
+             return True
+         elif '/' in obj.url:
+             return True
+         else:
+             return False
  
      def get_model(self):
          return MediaItem
  class MediaCollectionIndex(indexes.SearchIndex, indexes.Indexable):
  
      text = indexes.NgramField(document=True, use_template=True)
 -    item_acces = indexes.CharField(model_attr= 'public_access' , faceted=True)
 -    item_status = indexes.CharField(model_attr= 'document_status' , faceted=True)
 -    digitized = indexes.BooleanField(default=False , faceted=True)
 -
 -    def prepare_digitized(self,obj):
 +    #rec_date = indexes.DateTimeField(use_template=True, null=True)
 +    title = indexes.NgramField(model_attr='title')
 +    code = indexes.NgramField(model_attr='code')
 +    location = indexes.NgramField(default='')
++    item_acces = indexes.CharField(model_attr='public_access', faceted=True)
++    item_status = indexes.CharField(model_attr='document_status', faceted=True)
++    digitized = indexes.BooleanField(default=False, faceted=True)
++
++    def prepare_digitized(self, obj):
+         return obj.has_mediafile
  
      def get_model(self):
 -        return MediaCollection
 +        return MediaCollection
 +
 +    def prepare_location(self, obj):
-         return "%s" % obj.countries()
++        return "%s" % obj.countries()
index 7dd303fbae8184b2f216308b123f5fc0680b9af4,d6cd0cfa18a9f085ce086e81e2da336c46c493e5..47127d6f96c592e74701fc9027bd8eb6d0c76abb
@@@ -1,75 -1,45 +1,87 @@@
  # -*- coding: utf-8 -*-
  
- from haystack.views import SearchView
- from haystack.query import SearchQuerySet
+ from haystack.views import *
 -from haystack.query import SearchQuerySet
++#from haystack.query import SearchQuerySet
  from telemeta.models import *
 -from telemeta.forms.haystack_form import HaySearchForm
 +from telemeta.forms.haystack_form import *
 +
- class HaystackSearch(SearchView):
-     def __call__(self,request,type=None):
-         self.type = type
-         if(self.type=='collection'):
-             self.form_class=HaySearchFormCollection
-         else:
-             self.form_class=HaySearchFormItem
-         return super(HaystackSearch,self).__call__(request)
  
+ class HaystackSearch(FacetedSearchView):
  
 -    def __call__(self,request,type=None):
++    def __call__(self, request, type=None):
+         self.type = type
 -        self.form_class=HaySearchForm
 -        return super(HaystackSearch,self).__call__(request)
 -
 -
++        self.form_class = HaySearchForm
++        return super(HaystackSearch, self).__call__(request)
  
      def get_query(self):
          return super(HaystackSearch, self).get_query()
  
+     def get_results(self):
+         if(self.type == 'collection'):
+             return super(HaystackSearch, self).get_results().models(MediaCollection)
+         else:
+             return super(HaystackSearch, self).get_results().models(MediaItem)
      def extra_context(self):
          extra = super(HaystackSearch, self).extra_context()
-         extra['collection_count']=SearchQuerySet().load_all().models(MediaCollection).filter(content__contains=self.get_query()).count()
-         extra['item_count']=SearchQuerySet().load_all().models(MediaItem).filter(content__contains=self.get_query()).count()
-         if self.type=='collection':
-             extra['type']='collection'
 -        extra['collection_count']=super(HaystackSearch, self).get_results().models(MediaCollection).count()
 -        extra['item_count']=super(HaystackSearch, self).get_results().models(MediaItem).count()
++        extra['collection_count'] = super(HaystackSearch, self).get_results().models(MediaCollection).count()
++        extra['item_count'] = super(HaystackSearch, self).get_results().models(MediaItem).count()
+         if extra['facets']:
+             viewable_total = 0
+             for viewable in extra['facets']['fields']['item_acces']:
+                 if viewable == 'none':
+                     pass
+                 else:
+                     viewable_total = viewable_total + viewable[1]
 -            extra['viewable_count']=self.get_results().narrow('item_acces:full OR item_acces:metadata OR item_acces:mixed').count()
 -        if self.type=='collection':
 -            extra['type']='collection'
++            extra['viewable_count'] = self.get_results().narrow('item_acces:full OR item_acces:metadata OR item_acces:mixed').count()
++        if self.type == 'collection':
++            extra['type'] = 'collection'
          else:
--            extra['type']='item'
++            extra['type'] = 'item'
          return extra
  
 +
 +class HaystackAdvanceSearch(SearchView):
 +
 +    def __call__(self, request, type=None):
 +        self.type = type
 +        return super(HaystackAdvanceSearch, self).__call__(request)
 +
 +    def get_query(self):
 +        """
 +        Returns the query provided by the user.
 +
 +        Returns an empty string if the query is invalid.
 +        """
 +        if self.form.is_valid():
 +            return self.form.cleaned_data
 +
 +        return ''
 +
 +    def get_results(self):
 +        if(self.type == 'collection'):
 +            return self.form.search().models(MediaCollection)
 +        else:
 +            return self.form.search().models(MediaItem)
 +
 +    def extra_context(self):
 +        extra = super(HaystackAdvanceSearch, self).extra_context()
 +
 +        if self.request.GET.get('q'):
 +            extra['title'] = self.request.GET['q']
 +
 +        if self.request.GET.get('cote'):
 +            extra['cote'] = self.request.GET['cote']
 +
 +        if self.request.GET.get('location'):
 +            extra['location'] = self.request.GET['location']
 +
 +        extra['collection_count'] = self.form.search().models(MediaCollection).count()
 +        extra['item_count'] = self.form.search().models(MediaItem).count()
 +        if self.type == 'collection':
 +            extra['type'] = 'collection'
 +        else:
 +            extra['type'] = 'item'
 +        return extra