def search(self, format=None): "Search for messages" q = request.GET.get('q', None) if q is None: redirect(url(controller='messages', action='listing')) index = 'messages, messages_rt' action = request.GET.get('a', 'listing') if not action in ['listing', 'quarantine', 'archive']: action = 'listing' if action == 'archive': index = 'archive' try: page = int(request.GET.get('page', 1)) except ValueError: page = 1 num_items = session.get('msgs_search_num_results', 50) conn = SphinxClient() conn.SetMatchMode(SPH_MATCH_EXTENDED2) #conn.SetSortMode(SPH_SORT_EXTENDED, "timestamp DESC") if action == 'quarantine': conn.SetFilter('isquarantined', [True,]) if page == 1: conn.SetLimits(0, num_items, 500) else: offset = (page - 1) * num_items conn.SetLimits(offset, num_items, 500) if not c.user.is_superadmin: filter_sphinx(Session, c.user, conn) else: conn.SetSelect('timestamp') q = clean_sphinx_q(q) results = conn.Query(q, index) q = restore_sphinx_q(q) if results and results['matches']: #import pprint #pprint.pprint(results) ids = [hit['id'] for hit in results['matches']] filters = session.get('filter_by', None) if index == 'archive': messages = self._get_archived().filter( Archive.id.in_(ids)) query = UserFilter(Session, c.user, messages, True) messages = query.filter() if filters: dynq = DynaQuery(Message, messages, filters) messages = dynq.generate() else: messages = self._get_messages().filter( Message.id.in_(ids)) query = UserFilter(Session, c.user, messages) messages = query.filter() if filters: dynq = DynaQuery(Message, messages, filters) messages = dynq.generate() total_found = results['total'] search_time = results['time'] messages = messages.order_by(desc('timestamp')) else: print '=' * 100 print conn.GetLastError() messages = [] results = dict(matches=[], total=0) total_found = 0 search_time = 0 pages = paginator(dict(page=page, results_per_page=num_items, total=results['total'], items=len(results['matches']), q=q)) if format == 'json': response.headers['Content-Type'] = 'application/json' data = dict(action=action, total_found=total_found, search_time=search_time, paginator=pages, items=[jsonify_msg_list(msg) for msg in messages]) return json.dumps(data) c.messages = messages c.action = action c.total_found = total_found c.search_time = search_time c.page = pages return render('/messages/searchresults.html')
def search(self, format=None): "Search for messages" q = request.GET.get('q', None) if q is None: redirect(url(controller='messages', action='listing')) index = 'messages, messagesdelta, messages_rt' action = request.GET.get('a', 'listing') if not action in ['listing', 'quarantine', 'archive']: action = 'listing' if action == 'archive': index = 'archive archivedelta' try: page = int(request.GET.get('page', 1)) except ValueError: page = 1 num_items = session.get('msgs_search_num_results', 50) conn = SphinxClient() conn.SetMatchMode(SPH_MATCH_EXTENDED2) #conn.SetSortMode(SPH_SORT_EXTENDED, "timestamp DESC") if action == 'quarantine': conn.SetFilter('isquarantined', [True,]) if page == 1: conn.SetLimits(0, num_items, 500) else: offset = (page - 1) * num_items conn.SetLimits(offset, num_items, 500) if not c.user.is_superadmin: filter_sphinx(Session, c.user, conn) else: conn.SetSelect('timestamp') q = clean_sphinx_q(q) results = conn.Query(q, index) q = restore_sphinx_q(q) if results and results['matches']: #import pprint #pprint.pprint(results) ids = [hit['id'] for hit in results['matches']] filters = session.get('filter_by', None) if action == 'archive': messages = self._get_archived().filter( Archive.id.in_(ids)) query = UserFilter(Session, c.user, messages, True) messages = query.filter() if filters: dynq = DynaQuery(Message, messages, filters) messages = dynq.generate() else: messages = self._get_messages().filter( Message.id.in_(ids)) query = UserFilter(Session, c.user, messages) messages = query.filter() if filters: dynq = DynaQuery(Message, messages, filters) messages = dynq.generate() total_found = results['total'] search_time = results['time'] messages = messages.order_by(desc('timestamp')) else: print '=' * 100 print conn.GetLastError() messages = [] results = dict(matches=[], total=0) total_found = 0 search_time = 0 pages = paginator(dict(page=page, results_per_page=num_items, total=results['total'], items=len(results['matches']), q=q)) if format == 'json': response.headers['Content-Type'] = 'application/json' data = dict(action=action, total_found=total_found, search_time=search_time, paginator=pages, items=[jsonify_msg_list(msg) for msg in messages]) return json.dumps(data) c.messages = messages c.action = action c.total_found = total_found c.search_time = search_time c.page = pages return render('/messages/searchresults.html')
def search(self, format=None): "Search for messages" qry = request.GET.get('q', None) if qry is None: redirect(url(controller='messages', action='listing')) index = 'messages, messagesdelta, messages_rt' action = request.GET.get('a', 'listing') if action not in ['listing', 'quarantine', 'archive']: action = 'listing' if action == 'archive': index = 'archive archivedelta' try: page = int(request.GET.get('page', 1)) except ValueError: page = 1 num_items = session.get('msgs_search_num_results', 50) conn = SphinxClient() sphinxopts = extract_sphinx_opts(config['sphinx.url']) conn.SetServer(sphinxopts.get('host', '127.0.0.1')) conn.SetMatchMode(SPH_MATCH_EXTENDED2) if action == 'quarantine': conn.SetFilter('isquarantined', [ True, ]) if page == 1: conn.SetLimits(0, num_items, 500) else: offset = (page - 1) * num_items conn.SetLimits(offset, num_items, 500) if not c.user.is_superadmin: filter_sphinx(Session, c.user, conn) else: conn.SetSelect('timestamp') qry = clean_sphinx_q(qry) try: results = conn.Query(qry, index) except (socket.timeout, struct.error): redirect(request.path_qs) qry = restore_sphinx_q(qry) if results and results['matches']: ids = [hit['id'] for hit in results['matches']] filters = session.get('filter_by', None) if action == 'archive': messages = get_archived().filter(Archive.id.in_(ids)) query = UserFilter(Session, c.user, messages, True) messages = query.filter() if filters: dynq = DynaQuery(Message, messages, filters) messages = dynq.generate() else: messages = get_messages().filter(Message.id.in_(ids)) query = UserFilter(Session, c.user, messages) messages = query.filter() if filters: dynq = DynaQuery(Message, messages, filters) messages = dynq.generate() total_found = results['total'] search_time = results['time'] messages = messages.order_by(desc('timestamp')) else: messages = [] results = dict(matches=[], total=0) total_found = 0 search_time = 0 pages = paginator( dict(page=page, results_per_page=num_items, total=results['total'], items=len(results['matches']), q=qry)) if format == 'json': response.headers['Content-Type'] = 'application/json' data = dict(action=action, total_found=total_found, search_time=search_time, paginator=pages, items=[jsonify_msg_list(msg) for msg in messages]) return json.dumps(data) c.messages = messages c.action = action c.total_found = total_found c.search_time = search_time c.page = pages return self.render('/messages/searchresults.html')