class KeywordSource(object): implements(IQuerySource) def __init__(self, context): self.context = context self.vocab = SimpleVocabulary( [SimpleVocabulary.createTerm(DATA[x], x, DATA[x]) for x in DATA] ) def __contains__(self, term): return self.vocab.__contains__(term) def __iter__(self): return self.vocab.__iter__() def __len__(self): return self.vocab.__len__() def getTerm(self, value): return self.vocab.getTerm(value) def getTermByToken(self, value): return self.vocab.getTermByToken(value) def search(self, query_string): q = query_string.lower() return [kw for kw in self.vocab._terms if q.lower() in kw.value]
class KeywordSource(object): interface.implements(IQuerySource) def __init__(self, context): self.context = context catalog = getToolByName(context, 'portal_catalog') self.keywords = catalog.uniqueValuesFor('Subject') terms = [] for x in self.keywords: terms.append(SimpleTerm(x, x, unicode(x))) self.vocab = SimpleVocabulary(terms) def __contains__(self, term): return self.vocab.__contains__(term) def __iter__(self): return self.vocab.__iter__() def __len__(self): return self.vocab.__len__() def getTerm(self, value): return self.vocab.getTerm(value) def getTermByToken(self, value): return self.vocab.getTermByToken(value) def search(self, query_string): q = query_string.lower() return [self.getTerm(kw) for kw in self.keywords if q in kw.lower()]
class KeywordSource(object): implements(IQuerySource) def __init__(self, context): self.context = context self.vocab = SimpleVocabulary( [SimpleVocabulary.createTerm(DATA[x], x, DATA[x]) for x in DATA]) def __contains__(self, term): return self.vocab.__contains__(term) def __iter__(self): return self.vocab.__iter__() def __len__(self): return self.vocab.__len__() def getTerm(self, value): return self.vocab.getTerm(value) def getTermByToken(self, value): return self.vocab.getTermByToken(value) def search(self, query_string): q = query_string.lower() return [kw for kw in self.vocab._terms if q.lower() in kw.value]
class KeywordSource(object): implements(IQuerySource) def __init__(self, context): self.context = context catalog = getToolByName(context, 'portal_catalog') self.keywords = catalog.uniqueValuesFor('Subject') def safe_str(s): if type(s) == unicode: return s.encode("utf-8", "replace") else: return s def safe_unicode(s): if type(s) == str: return unicode(s, "utf-8", "replace") else: return s # XXX: plone.z3cform monkeypatches z3c.forms to decode # all form values in query to unicode; in short, one cannot # use non-ascii characters in tokens (z3c.form expects tokens # to be encoded strings, but plone.z3cform breaks this) self.vocab = SimpleVocabulary([ SimpleTerm(safe_unicode(x), quote(safe_str(x)), safe_unicode(x)) for x in self.keywords]) def __contains__(self, term): return self.vocab.__contains__(term) def __iter__(self): return self.vocab.__iter__() def __len__(self): return self.vocab.__len__() def getTerm(self, value): def safe_unicode(s): if type(s) == str: return unicode(s, "utf-8", "replace") else: return s return self.vocab.getTerm(safe_unicode(value)) def getTermByToken(self, value): return self.vocab.getTermByToken(value) def search(self, query_string): q = query_string.lower() return [self.getTerm(kw) for kw in self.keywords if q in kw.lower()]
class CustomSearchableTextSource(SearchableTextSource): implements(ISource) classProvides(IContextSourceBinder) def __init__(self, context, base_query={}, default_query=None): super(CustomSearchableTextSource, self).__init__(context, base_query=base_query, default_query=default_query) self.vocabulary = SimpleVocabulary( [SimpleTerm(a, a, a) for a in self.baseTerms()]) def baseTerms(self): query = self.base_query.copy() try: results = (x.getPath()[len(self.portal_path):] for x in self.catalog(**query)) except ParseError: return [] if query.has_key('path'): path = query['path']['query'][len(self.portal_path):] if path != '': return itertools.chain((path, ), results) return results def search(self, query_string): results = super(CustomSearchableTextSource, self).search(query_string) return SimpleVocabulary([SimpleTerm(a, a, a) for a in results]) def __contains__(self, value): return self.vocabulary.__contains__(value) def __iter__(self): return self.vocabulary.__iter__() def getTerm(self, value): return self.vocabulary.getTerm(value) def getTermByToken(self, token): return self.vocabulary.getTermByToken(token)
class CustomSearchableTextSource(SearchableTextSource): implements(ISource) classProvides(IContextSourceBinder) def __init__(self, context, base_query={}, default_query=None): super(CustomSearchableTextSource, self).__init__(context, base_query=base_query, default_query=default_query) self.vocabulary = SimpleVocabulary([SimpleTerm(a, a, a) for a in self.baseTerms()]) def baseTerms(self): query = self.base_query.copy() try: results = (x.getPath()[len(self.portal_path):] for x in self.catalog(**query)) except ParseError: return [] if query.has_key('path'): path = query['path']['query'][len(self.portal_path):] if path != '': return itertools.chain((path,), results) return results def search(self, query_string): results = super(CustomSearchableTextSource, self).search(query_string) return SimpleVocabulary([SimpleTerm(a, a, a) for a in results]) def __contains__(self, value): return self.vocabulary.__contains__(value) def __iter__(self): return self.vocabulary.__iter__() def getTerm(self, value): return self.vocabulary.getTerm(value) def getTermByToken(self, token): return self.vocabulary.getTermByToken(token)