summaryrefslogtreecommitdiffstats
path: root/hyperkitty/api.py
diff options
context:
space:
mode:
authorAamir Khan <syst3m.w0rm@gmail.com>2012-07-24 17:00:25 -0400
committerAamir Khan <syst3m.w0rm@gmail.com>2012-07-24 17:00:25 -0400
commit9f18a590819a01017c15169d82763680a72848fb (patch)
tree9c781cd677eeae9b1e50e986647e1929e99bdac7 /hyperkitty/api.py
parentae77d9901e2a466622818f95d784fb85b5296727 (diff)
downloadhyperkitty-9f18a590819a01017c15169d82763680a72848fb.tar.gz
hyperkitty-9f18a590819a01017c15169d82763680a72848fb.tar.xz
hyperkitty-9f18a590819a01017c15169d82763680a72848fb.zip
Packaging hyperkitty
Diffstat (limited to 'hyperkitty/api.py')
-rw-r--r--hyperkitty/api.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/hyperkitty/api.py b/hyperkitty/api.py
new file mode 100644
index 0000000..fe1d715
--- /dev/null
+++ b/hyperkitty/api.py
@@ -0,0 +1,69 @@
+#-*- 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
+from kittystore.kittysastore import KittySAStore
+import json
+import re
+
+from gsoc.utils import log
+
+STORE = KittySAStore(settings.KITTYSTORE_URL)
+
+
+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]
+ email = STORE.get_email(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]
+ thread = STORE.get_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
+ threads = STORE.search_archives(list_name, query_string)
+ if not threads:
+ return HttpResponse(status=404)
+ else:
+ return threads