summaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/urls.py1
-rw-r--r--packages/views/__init__.py2
-rw-r--r--packages/views/search.py26
3 files changed, 28 insertions, 1 deletions
diff --git a/packages/urls.py b/packages/urls.py
index 7e12a23..6eddc5f 100644
--- a/packages/urls.py
+++ b/packages/urls.py
@@ -22,6 +22,7 @@ urlpatterns = patterns('packages.views',
(r'^update/$', 'update'),
(r'^$', 'search', {}, 'packages-search'),
+ (r'^search/json/$', 'search_json'),
(r'^(?P<page>\d+)/$', 'search'),
(r'^differences/$', 'arch_differences', {}, 'packages-differences'),
diff --git a/packages/views/__init__.py b/packages/views/__init__.py
index 2ed266e..6a9c527 100644
--- a/packages/views/__init__.py
+++ b/packages/views/__init__.py
@@ -20,7 +20,7 @@ from ..utils import (get_group_info, get_differences_info,
# make other views available from this same package
from .flag import flaghelp, flag, flag_confirmed, unflag, unflag_all
-from .search import search
+from .search import search, search_json
from .signoff import signoffs, signoff_package, signoff_options, signoffs_json
diff --git a/packages/views/search.py b/packages/views/search.py
index a23c6b4..a09de0a 100644
--- a/packages/views/search.py
+++ b/packages/views/search.py
@@ -4,11 +4,14 @@ from django import forms
from django.contrib.admin.widgets import AdminDateWidget
from django.contrib.auth.models import User
from django.db.models import Q
+from django.http import HttpResponse
from django.views.generic import list_detail
+from django.utils import simplejson
from main.models import Package, Arch, Repo
from main.utils import make_choice
from ..models import PackageRelation
+from ..utils import PackageJSONEncoder
def coerce_limit_value(value):
@@ -157,4 +160,27 @@ def search(request, page=None):
template_object_name="package",
extra_context=page_dict)
+
+def search_json(request):
+ limit = 250
+
+ container = {
+ 'version': 2,
+ 'limit': limit,
+ 'valid': False,
+ 'results': [],
+ }
+
+ if request.GET:
+ form = PackageSearchForm(data=request.GET)
+ if form.is_valid():
+ packages = Package.objects.normal()
+ packages = parse_form(form, packages)[:limit]
+ container['results'] = packages
+ container['valid'] = True
+
+ to_json = simplejson.dumps(container, ensure_ascii=False,
+ cls=PackageJSONEncoder)
+ return HttpResponse(to_json, mimetype='application/json')
+
# vim: set ts=4 sw=4 et: