Mercurial > public > sg101
annotate custom_search/fields.py @ 989:2908859c2fe4
Smilies now use relative links.
This is for upcoming switch to SSL. Currently we do not need absolute URLs for
smilies. If this changes we can add it later.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Thu, 29 Oct 2015 20:54:34 -0500 |
parents | cf9918328c64 |
children |
rev | line source |
---|---|
bgneal@943 | 1 """Custom Haystack SearchFields.""" |
bgneal@943 | 2 |
bgneal@943 | 3 import haystack.fields |
bgneal@943 | 4 |
bgneal@943 | 5 |
bgneal@943 | 6 class MaxTermSizeCharField(haystack.fields.CharField): |
bgneal@943 | 7 """A CharField that discards large terms when preparing the search index. |
bgneal@943 | 8 |
bgneal@943 | 9 Some backends (e.g. Xapian) throw errors when terms are bigger than some |
bgneal@943 | 10 limit. This field omits the terms over a limit when preparing the data for |
bgneal@943 | 11 the search index. |
bgneal@943 | 12 |
bgneal@943 | 13 The keyword argument max_term_size sets the maximum size of a whitespace |
bgneal@943 | 14 delimited word/term. Terms over this size are not indexed. The default value |
bgneal@943 | 15 is 64. |
bgneal@943 | 16 """ |
bgneal@943 | 17 DEFAULT_MAX_TERM_SIZE = 64 |
bgneal@943 | 18 |
bgneal@943 | 19 def __init__(self, *args, **kwargs): |
bgneal@943 | 20 self.max_term_size = kwargs.pop('max_term_size', self.DEFAULT_MAX_TERM_SIZE) |
bgneal@943 | 21 super(MaxTermSizeCharField, self).__init__(*args, **kwargs) |
bgneal@943 | 22 |
bgneal@943 | 23 def prepare(self, obj): |
bgneal@943 | 24 text = super(MaxTermSizeCharField, self).prepare(obj) |
bgneal@943 | 25 if text is None or self.max_term_size is None: |
bgneal@943 | 26 return text |
bgneal@943 | 27 |
bgneal@943 | 28 terms = (term for term in text.split() if len(term) <= self.max_term_size) |
bgneal@943 | 29 return u' '.join(terms) |