summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Yves Chibon <pingou@pingoured.fr>2012-03-28 20:46:43 +0200
committerPierre-Yves Chibon <pingou@pingoured.fr>2012-03-28 20:46:43 +0200
commitde36b45bc8b645456449c15bdd7950ce48e6b0db (patch)
treef158cb1307274acdd2a660e04784c47573000090
parent26a3772b571398537affa10e7bb9cfbfdfb18c1c (diff)
downloadhyperkitty-de36b45bc8b645456449c15bdd7950ce48e6b0db.tar.gz
hyperkitty-de36b45bc8b645456449c15bdd7950ce48e6b0db.tar.xz
hyperkitty-de36b45bc8b645456449c15bdd7950ce48e6b0db.zip
Add first bits of a REST API relying on the django-rest-framework
-rw-r--r--api.py38
-rw-r--r--settings.py1
-rw-r--r--urls.py5
3 files changed, 44 insertions, 0 deletions
diff --git a/api.py b/api.py
new file mode 100644
index 0000000..4bdcd27
--- /dev/null
+++ b/api.py
@@ -0,0 +1,38 @@
+# mongodb/api.py
+from djangorestframework.views import View
+
+from django.conf.urls.defaults import url
+from django.http import HttpResponseNotModified, HttpResponse
+from lib import mongo
+import pymongo
+import json
+
+connection = pymongo.Connection('localhost', 27017)
+
+
+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 = mongo.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 = mongo.get_thread_list(list_name, threadid)
+ if not thread:
+ return HttpResponse(status=404)
+ else:
+ return thread
diff --git a/settings.py b/settings.py
index 181ebee..f5c54ad 100644
--- a/settings.py
+++ b/settings.py
@@ -130,6 +130,7 @@ INSTALLED_APPS = (
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'mongodb',
+ 'djangorestframework',
)
# A sample logging configuration. The only tangible logging
diff --git a/urls.py b/urls.py
index e0a0034..c93a575 100644
--- a/urls.py
+++ b/urls.py
@@ -1,5 +1,7 @@
from django.conf.urls.defaults import patterns, include, url
from django.conf import settings
+from api import EmailResource, ThreadResource
+from tastypie.api import Api
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
@@ -41,6 +43,9 @@ urlpatterns = patterns('',
url(r'^mockup/search\/(?P<keyword>.*)$', 'views.mockup.search_keyword'),
url(r'^mockup/tag\/(?P<tag>.*)$', 'views.mockup.search_tag'),
+ # REST API
+ url(r'^api/email\/(?P<mlist_fqdn>.*@.*)\/(?P<messageid>.*)/', EmailResource.as_view()),
+ url(r'^api/thread\/(?P<mlist_fqdn>.*@.*)\/(?P<threadid>.*)/', ThreadResource.as_view()),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),