diff options
author | Dan McGee <dan@archlinux.org> | 2012-04-07 14:52:39 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-04-07 14:58:28 -0500 |
commit | 5d9f87c02bd8ad73fdb27600e0afe71284e3082f (patch) | |
tree | 0d24baee0fa28d6bc2bdde2c8b40ce365a941d3e /packages | |
parent | 9684e7c095585059033ac29339b058931a6547e3 (diff) |
Add JSON search viewrelease_2012-04-07
This still might change and should not be viewed as a public API yet.
This has been a longstanding request in FS#13026.
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'packages')
-rw-r--r-- | packages/urls.py | 1 | ||||
-rw-r--r-- | packages/views/__init__.py | 2 | ||||
-rw-r--r-- | packages/views/search.py | 26 |
3 files changed, 28 insertions, 1 deletions
diff --git a/packages/urls.py b/packages/urls.py index 7e12a239..6eddc5fe 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 2ed266e9..6a9c5275 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 a23c6b4a..a09de0a7 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: |