added missing packages views code from archweb_pub

This commit is contained in:
Ismael Carnales 2009-10-31 16:12:17 -02:00
parent 1c22bbc3f7
commit 150dfd7298

View File

@ -100,6 +100,7 @@ def __init__(self, *args, **kwargs):
self.fields['arch'].choices = self.fields[ self.fields['arch'].choices = self.fields[
'arch'].widget.choices = [('', 'All')] + make_choice( 'arch'].widget.choices = [('', 'All')] + make_choice(
[arch.name for arch in Arch.objects.all()]) [arch.name for arch in Arch.objects.all()])
self.fields['q'].widget.attrs.update({"size": "30"})
self.fields['maintainer'].choices = self.fields[ self.fields['maintainer'].choices = self.fields[
'maintainer'].widget.choices = [ 'maintainer'].widget.choices = [
('', 'All'), ('orphan', 'Orphan')] + make_choice( ('', 'All'), ('orphan', 'Orphan')] + make_choice(
@ -111,7 +112,14 @@ def search(request, page=None):
packages = Package.objects.all() packages = Package.objects.all()
if request.GET: if request.GET:
current_query += urllib.urlencode(request.GET) # urlencode can't handle unicode. One fix for this is to call:
# urllib.urlencode(request.GET, doseq), which has a side effect of
# converting unicode to ascii, and replacing unknown characters with ?.
# Using UTF8 seems to work just as well without data loss.
encoded = {}
for key in request.GET:
encoded[key] = request.GET[key].encode('UTF8')
current_query += urllib.urlencode(encoded)
form = PackageSearchForm(data=request.GET) form = PackageSearchForm(data=request.GET)
if form.is_valid(): if form.is_valid():
if form.cleaned_data['repo']: if form.cleaned_data['repo']:
@ -147,9 +155,13 @@ def search(request, page=None):
if len(packages) == 1: if len(packages) == 1:
return HttpResponseRedirect(packages[0].get_absolute_url()) return HttpResponseRedirect(packages[0].get_absolute_url())
if 'sort' in request.GET: allowed_sort = ["arch", "repo", "pkgname", "maintainer", "last_update"]
allowed_sort += ["-" + s for s in allowed_sort]
sort = request.GET.get('sort', None)
if sort in allowed_sort:
packages = packages.order_by( packages = packages.order_by(
request.GET['sort'], 'repo', 'arch', 'pkgname') request.GET['sort'], 'repo', 'arch', 'pkgname')
page_dict['sort'] = sort
else: else:
packages = packages.order_by('repo', 'arch', '-last_update', 'pkgname') packages = packages.order_by('repo', 'arch', '-last_update', 'pkgname')