From 547ab59c2c0477d98ece16a264e2c56f1b04a822 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Thu, 29 Mar 2012 16:54:45 +0200 Subject: Adjust the README file - pymongo is needed in the virtualenv - Fix typo in the bzr branch command --- README | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README b/README index 2d825d2..945d6ac 100644 --- a/README +++ b/README @@ -34,16 +34,17 @@ source bin/activate # Install django and dependencies easy_install django easy_install bunch +easy_install pymongo easy_install urlgrabber easy_install djangorestframework # Install pymongo and the mongodb database -sudo yum install -y pymongo mongodb-server +sudo yum install mongodb-server # Start the mongo database sudo service mongod start # retrieve the sources there: -bzr branch bzr branch bzr://bzr.fedorahosted.org/bzr/hyperkitty/mongodb +bzr branch bzr://bzr.fedorahosted.org/bzr/hyperkitty/mongodb # Start it cd mongodb -- cgit From 85d040687fc21f13f3a124eb88f154027e052da1 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Thu, 29 Mar 2012 17:02:47 +0200 Subject: Add Search facility to the REST API --- api.py | 29 +++++++++++++++++++++++++++++ templates/api.html | 20 ++++++++++++++++++++ urls.py | 3 ++- 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/api.py b/api.py index 4bdcd27..1f934c5 100644 --- a/api.py +++ b/api.py @@ -6,6 +6,7 @@ from django.http import HttpResponseNotModified, HttpResponse from lib import mongo import pymongo import json +import re connection = pymongo.Connection('localhost', 27017) @@ -36,3 +37,31 @@ class ThreadResource(View): 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 = mongo.search_archives(list_name, query_string) + if not threads: + return HttpResponse(status=404) + else: + return threads diff --git a/templates/api.html b/templates/api.html index ba3abb4..afabbb4 100644 --- a/templates/api.html +++ b/templates/api.html @@ -56,4 +56,24 @@ retrieve the all the email for a specific thread on the specified mailing-list.

+
+

Search /api/search/<list name>/<field>/<keyword>

+

+

+

+Using the address /api/search/<list name>/<field>/<keyword> you will be able to +search for all emails of the specified mailing-list containing the provided keyword in the given field. +

+

The list of available field is:

+
    +
  • From
  • +
  • Subject
  • +
  • Content
  • +
  • SubjectContent
  • +
+

For example: + /api/search/devel@fp.o/From/pingoured + +

+
{% endblock %} diff --git a/urls.py b/urls.py index baa7646..602a69d 100644 --- a/urls.py +++ b/urls.py @@ -1,6 +1,6 @@ from django.conf.urls.defaults import patterns, include, url from django.conf import settings -from api import EmailResource, ThreadResource +from api import EmailResource, ThreadResource, SearchResource from django.contrib.staticfiles.urls import staticfiles_urlpatterns @@ -46,6 +46,7 @@ urlpatterns = patterns('', url(r'^api/$', 'views.pages.api'), url(r'^api/email\/(?P.*@.*)\/(?P.*)/', EmailResource.as_view()), url(r'^api/thread\/(?P.*@.*)\/(?P.*)/', ThreadResource.as_view()), + url(r'^api/search\/(?P.*@.*)\/(?P.*)\/(?P.*)/', SearchResource.as_view()), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), -- cgit