matinfo

haystack index

Mar 3rd, 2014
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.86 KB | None | 0 0
  1. #-*- coding: utf-8 -*-
  2. from django.contrib.sites.models import Site
  3. from django.core.urlresolvers import NoReverseMatch
  4. from django.utils.translation import  get_language, activate
  5.  
  6. from haystack import site, indexes
  7.  
  8. from search.indexes import OrangeSearchIndex
  9. from search import i18n
  10.  
  11. from project.utils.smarter_striptags import smarter_striptags
  12. from easy_thumbnails.files import get_thumbnailer
  13.  
  14. from staticshop.models import Article
  15.  
  16.  
  17. class ArticleIndex(OrangeSearchIndex):
  18.     #_language = 'en'
  19.     language = indexes.CharField()
  20.     text = indexes.CharField(document=True, use_template=True, template_name='search/indexes/staticshop/article_text.txt')
  21.     description = indexes.CharField()
  22.     url = indexes.CharField(indexed=False)
  23.     thumbnail_url = indexes.CharField(indexed=False)
  24.     #category_ref = indexes.CharField()
  25.  
  26.     price = indexes.FloatField()
  27.     code = indexes.CharField()
  28.  
  29.     def prepare(self, obj):
  30.         current_languge = get_language()[:2]
  31.         activate(current_languge)
  32.         print "language:", current_languge
  33.  
  34.         return super(ArticleIndex, self).prepare(obj)
  35.        
  36.     def prepare_title(self, obj):
  37.         return unicode(u"%s, %s" % (obj.product.manufacturer.name, obj.product.lazy_translation_getter('description_title', unicode(obj.pk)),))
  38.  
  39.     def prepare_url(self, obj):
  40.         try:
  41.             return 'http://%s%s' % (Site.objects.get_current().domain, obj.product.get_absolute_url())
  42.         except NoReverseMatch:
  43.             return ''
  44.  
  45.     def prepare_thumbnail_url(self, obj):
  46.         try:
  47.             img = obj.variant.images.all()[:1].get()
  48.         except:
  49.             return ''
  50.         if not img:
  51.             return ''
  52.         thumb_options = {
  53.             'size': (75, 100),
  54.             'crop': True,
  55.             'upscale': True,
  56.         }
  57.         return get_thumbnailer(img.image).get_thumbnail(thumb_options).url
  58.  
  59.     def prepare_code(self, obj):
  60.         return obj.code
  61.  
  62.     def prepare_description(self, obj):
  63.         s = smarter_striptags(obj.product.lazy_translation_getter('description_short', unicode(obj.pk)))
  64.         return s
  65.  
  66.     def prepare_subsites(self, obj):
  67.         return ['residential', 'business']
  68.  
  69.     def prepare_categories(self, obj):
  70.         from cms.models import Page
  71.         try:
  72.             p = Page.objects.public().get(reverse_id='shop_residential')
  73.             print p
  74.             return [p.pk]
  75.         except Page.DoesNotExist:
  76.             return []
  77.  
  78.     def prepare_price(self, obj):
  79.         return obj.from_price
  80.  
  81.     def index_queryset(self):
  82.         """
  83.        only index `active` articles
  84.        """
  85.         return super(ArticleIndex, self).index_queryset().filter(status=True).select_related('product', 'variant')
  86.  
  87.     def prepare_result_type(self, obj):
  88.         return 'shop-handset'
  89.  
  90.  
  91. i18n.register_ml_index(Article, ArticleIndex)
Advertisement
Add Comment
Please, Sign In to add comment