Skip to content

Commit 0d9c97c

Browse files
committed
Added a test that checks the mailarch search failure return, and tweaks the no-result return handling.
- Legacy-Id: 15745
1 parent 236ee76 commit 0d9c97c

3 files changed

Lines changed: 27 additions & 7 deletions

File tree

ietf/doc/tests_review.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,22 @@ def test_search_mail_archive(self):
525525
self.assertEqual(messages[1]["subject"], "Review of {}".format(review_req.doc.name))
526526
self.assertEqual(messages[1]["splitfrom"], ["John Doe II", "johndoe2@example.com"])
527527
self.assertEqual(messages[1]["utcdate"][0], "")
528+
529+
530+
# Test failure to return mailarch results
531+
no_result_path = os.path.join(self.review_dir, "mailarch_no_result.html")
532+
with open(no_result_path, "w") as f:
533+
f.write('Content-Type: text/html\n\n<html><body><div class="xtr"><div class="xtd no-results">No results found</div></div>')
534+
ietf.review.mailarch.construct_query_urls = lambda review_req, query=None: { "query_data_url": "file://" + os.path.abspath(no_result_path) }
535+
536+
url = urlreverse('ietf.doc.views_review.search_mail_archive', kwargs={ "name": doc.name, "request_id": review_req.pk })
537+
538+
r = self.client.get(url)
539+
self.assertEqual(r.status_code, 200)
540+
result = json.loads(r.content)
541+
self.assertNotIn('messages', result)
542+
self.assertIn('No results found', result['error'])
543+
528544
finally:
529545
ietf.review.mailarch.construct_query_urls = real_fn
530546

ietf/doc/views_review.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -703,11 +703,10 @@ def search_mail_archive(request, name, request_id):
703703

704704
try:
705705
res["messages"] = mailarch.retrieve_messages(res["query_data_url"])[:MAX_RESULTS]
706+
except KeyError as e:
707+
res["error"] = "No results found"
706708
except Exception as e:
707-
if unicode(e) == "NONE":
708-
res["error"] = "No results found"
709-
else:
710-
res["error"] = "Retrieval from mail archive failed: %s" % unicode(e)
709+
res["error"] = "Retrieval from mail archive failed: %s" % unicode(e)
711710
# raise # useful when debugging
712711

713712
return JsonResponse(res)

ietf/review/mailarch.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import datetime, tarfile, mailbox, tempfile, hashlib, base64, email.utils
55
import urllib
66
import urllib2, contextlib
7-
import re
7+
import debug # pyflakes:ignore
8+
9+
from pyquery import PyQuery
810

911
from django.conf import settings
1012

@@ -94,8 +96,11 @@ def retrieve_messages(query_data_url):
9496
content_type = fileobj.info()["Content-type"]
9597
if not content_type.startswith("application/x-tar"):
9698
if content_type.startswith("text/html"):
97-
if not re.search("no-results", fileobj.read(20000)) is None:
98-
raise Exception("NONE")
99+
r = fileobj.read(20000)
100+
q = PyQuery(r)
101+
div = q('div[class~="no-results"]')
102+
if div:
103+
raise KeyError("No results: %s -> %s" % (query_data_url, div.text(), ))
99104
raise Exception("Export failed - this usually means no matches were found")
100105

101106
with tarfile.open(fileobj=fileobj, mode='r|*') as tar:

0 commit comments

Comments
 (0)