1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#-*- coding: utf-8 -*-
from djangorestframework.views import View
from django.conf.urls.defaults import url
from django.conf import settings
from django.http import HttpResponseNotModified, HttpResponse
import json
import re
from hyperkitty.utils import log
from hyperkitty.lib import ThreadSafeStorePool
class EmailResource(View):
""" Resource used to retrieve emails from the archives using the
REST API.
"""
def get(self, request, mlist_fqdn, messageid):
list_name = mlist_fqdn.split('@')[0]
STORE = ThreadSafeStorePool().get()
email = STORE.get_message_by_hash_from_list(list_name, messageid)
if not email:
return HttpResponse(status=404)
else:
return email
class ThreadResource(View):
""" Resource used to retrieve threads from the archives using the
REST API.
"""
def get(self, request, mlist_fqdn, threadid):
list_name = mlist_fqdn.split('@')[0]
STORE = ThreadSafeStorePool().get()
thread = STORE.get_messages_in_thread(list_name, threadid)
if not thread:
return HttpResponse(status=404)
else:
return thread
class SearchResource(View):
""" Resource used to search the archives using the REST API.
"""
def get(self, request, mlist_fqdn, field, keyword):
list_name = mlist_fqdn.split('@')[0]
if field not in ['Subject', 'Content', 'SubjectContent', 'From']:
return HttpResponse(status=404)
regex = '.*%s.*' % keyword
if field == 'SubjectContent':
query_string = {'$or' : [
{'Subject': re.compile(regex, re.IGNORECASE)},
{'Content': re.compile(regex, re.IGNORECASE)}
]}
else:
query_string = {field.capitalize():
re.compile(regex, re.IGNORECASE)}
#print query_string, field, keyword
STORE = ThreadSafeStorePool().get()
threads = STORE.search_archives(list_name, query_string)
if not threads:
return HttpResponse(status=404)
else:
return threads
|