def whoosher_search(environ, start_response): store = environ['tiddlyweb.store'] filters = environ['tiddlyweb.filters'] search_query = get_search_query(environ) title = 'Search for %s' % search_query title = environ['tiddlyweb.query'].get('title', [title])[0] try: tiddlers = whoosh_search(environ) usersign = environ['tiddlyweb.usersign'] if filters: candidate_tiddlers = Tiddlers(title=title) else: candidate_tiddlers = Tiddlers(title=title, store=store) candidate_tiddlers.is_search = True for tiddler in readable_tiddlers_by_bag(store, tiddlers, usersign): candidate_tiddlers.add(tiddler) except StoreMethodNotImplemented: raise HTTP400('Search system not implemented') except StoreError as exc: raise HTTP400('Error while processing search: %s' % exc) return send_tiddlers(environ, start_response, tiddlers=candidate_tiddlers)
def whoosh_search(environ): """ Handle incoming /search?q=<query> and return the found tiddlers. """ search_query = get_search_query(environ) try: results = search(environ['tiddlyweb.config'], search_query) except QueryParserError as exc: raise HTTP400('malformed query string: %s' % exc) tiddlers = [] for result in results: bag, title = result['id'].split(':', 1) tiddler = Tiddler(title, bag) tiddlers.append(tiddler) return tiddlers