def results(self, id=None): c.error_message = "" c.url = request.remote_addr c.from_developer = request.remote_addr == h.get_sa_home_ip() if request.method != "POST": page = int(request.params.get("page", "1")) try: batchSize = session["batchSize"] c.total_pages = session["total_pages"] c.listname = session["listname"] except KeyError: abort(403, "No session found to display results") page = max(1, page) page = min(page, c.total_pages) # Get the slice recStart = (batchSize * (page-1)) recEnd = (batchSize * page) - 1 allrecs = session["fullresults"] c.numResults = len(allrecs) c.elapsed = session["elapsed"] c.page = page c.results = allrecs[recStart:recEnd] try: c.results[0].imsg except IndexError, e: # No results; ignore pass except AttributeError, e: c.error_message = "Your session information has been lost."
def full_thread(self, id=None): msgnum = id if msgnum is None: abort(400, "Sorry, a message ID is required.") c.listname = session.get("listname", "") c.url = request.remote_addr c.from_developer = request.remote_addr == h.get_sa_home_ip() kwargs = {"body": {"query": {"match": {"msg_num": msgnum}}}} resp = es_client.search("email", doc_type="mail", **kwargs) recs = extract_records(resp, translate_to_db=False) if not recs: abort(404, "No message with id=%s exists" % msgnum) subj = recs[0]["subject"] pat = re.compile(r"^re: *", re.I) subj = pat.sub("", subj) kwargs = {"body": {"query": {"match_phrase" : {"subject" : subj}}}, "sort": ["posted:asc"]} resp = es_client.search("email", doc_type="mail", **kwargs) c.results = extract_records(resp, translate_to_db=True) c.query_statement = kwargs return render("/full_thread.html") modelSession = model.meta.Session c.error_message = "" c.listname = session.get("listname", "") c.url = request.remote_addr c.from_developer = request.remote_addr == h.get_sa_home_ip() query = modelSession.query(Archive) query = query.filter_by(imsg=id) try: msg = self._query_first(query) except NoResultFound: abort(404, "No message with id=%s exists" % id) try: msgTime = msg.tposted except AttributeError, e: # No message match the subject log.warn("Full thread failed for id=%s" % id) c.results = [] return render("/archive_results.html")
def results(self, id=None): c.error_message = "" c.url = request.remote_addr c.from_developer = request.remote_addr == h.get_sa_home_ip() if request.method != "POST": page = int(request.params.get("page", "1")) try: batchSize = session["batchSize"] c.total_pages = session["total_pages"] c.listname = session["listname"] except KeyError: abort(403, "No session found to display results") page = max(1, page) page = min(page, c.total_pages) # Get the slice recStart = (batchSize * (page-1)) recEnd = (batchSize * page) - 1 if c.from_developer: c.session = session kwargs = {"body": session.get("query_body")} kwargs["sort"] = [get_sort_order(session.get("orderBy"))] kwargs["size"] = batchSize session.query_body = kwargs["body"] # Now run the query for real kwargs["size"] = batchSize kwargs["from_"] = recStart c.query_statement = str(kwargs) c.params = {} startTime = time.time() resp = es_client.search("email", doc_type="mail", **kwargs) session["elapsed"] = c.elapsed = "%.4f" % ( time.time() - startTime) c.numResults = len(session["fullresults"]) allrecs = extract_records(resp) c.results = allrecs else: allrecs = session["fullresults"] c.results = allrecs[recStart:recEnd] c.numResults = len(allrecs) c.elapsed = session["elapsed"] c.page = page try: c.results[0].imsg except IndexError, e: # No results; ignore pass except AttributeError, e: c.error_message = "Your session information has been lost."
def msg(self, id=None): if id is None: abort(400, "Sorry, a message ID is required.") c.from_developer = request.remote_addr == h.get_sa_home_ip() if c.from_developer: kwargs = {"body": {"query": {"match": {"msg_num": id}}}} resp = es_client.search("email", doc_type="mail", **kwargs) allrecs = extract_records(resp) if not allrecs: abort(404, "No message with id=%s exists" % id) c.message = allrecs[0] c.session = session else: modelSession = model.meta.Session query = modelSession.query(Archive) query = query.filter_by(imsg=id) try: c.message = self._query_first(query) except NoResultFound: abort(404, "No message with id=%s exists" % id) c.listname = session.get("listname", "") try: msgIDs = session["fullresults"] except KeyError: msgIDs = [] c.priorLink = "" c.nextLink = "" c.fullThreadLink = "/archives/full_thread/%s" % c.message.imsg try: thisPos = msgIDs.index(c.message.imsg) except ValueError: thisPos = None if thisPos is not None: if thisPos > 0: priorMsg = msgIDs[thisPos - 1] c.priorLink = "/archives/msg/%s" % priorMsg try: nextMsg = msgIDs[thisPos + 1] c.nextLink = "/archives/msg/%s" % nextMsg except IndexError: # This is the last message pass return self._showMessage()
def full_thread(self, id=None): if id is None: abort(400, "Sorry, a message ID is required.") modelSession = model.meta.Session c.error_message = "" c.listname = session.get("listname", "") c.url = request.remote_addr c.from_developer = request.remote_addr == h.get_sa_home_ip() query = modelSession.query(Archive) query = query.filter_by(imsg=id) try: msg = self._query_first(query) except NoResultFound: abort(404, "No message with id=%s exists" % id) try: msgTime = msg.tposted except AttributeError, e: # No message match the subject log.warn("Full thread failed for id=%s" % id) c.results = [] return render("/archive_results.html")