From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.77) (envelope-from ) id 1SojdG-0006pj-98 for garchives@archives.gentoo.org; Tue, 10 Jul 2012 23:14:14 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 44A67E09BE; Tue, 10 Jul 2012 23:14:02 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 04189E0961 for ; Tue, 10 Jul 2012 23:14:01 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 1A7621B402F for ; Tue, 10 Jul 2012 23:14:01 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id D42BEE5440 for ; Tue, 10 Jul 2012 23:13:58 +0000 (UTC) From: "Slava Bacherikov" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Slava Bacherikov" Message-ID: <1341857646.c2eb04db5bce7a617a8a9e88812303e2664c3778.bacher09@gentoo> Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/generic/ X-VCS-Repository: proj/gentoo-packages X-VCS-Files: gpackages/apps/generic/views.py gpackages/apps/packages/views.py X-VCS-Directories: gpackages/apps/packages/ gpackages/apps/generic/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: c2eb04db5bce7a617a8a9e88812303e2664c3778 X-VCS-Branch: master Date: Tue, 10 Jul 2012 23:13:58 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: f742ce91-287d-4341-ad0c-cb56bde7b4e1 X-Archives-Hash: 0cb0519560b1a2e69c1a7e2de551b16a commit: c2eb04db5bce7a617a8a9e88812303e2664c3778 Author: Slava Bacherikov bacher09 org> AuthorDate: Mon Jul 9 18:14:06 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Mon Jul 9 18:14:06 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoo-packag= es.git;a=3Dcommit;h=3Dc2eb04db Add dynamic search by multiple args with __in --- gpackages/apps/generic/views.py | 45 ++++++++++++++++++--------------= ----- gpackages/apps/packages/views.py | 2 + 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/vie= ws.py index 098c2db..731c845 100644 --- a/gpackages/apps/generic/views.py +++ b/gpackages/apps/generic/views.py @@ -24,18 +24,25 @@ set_lang_view =3D SetLang.as_view() # but it is too big and i need just a litle of its functionly # but if this code have to be grove maybe i replace it to django-filter # application or another. -def dynamic_filter(filter_set, allowed): +def dynamic_filter(filter_set, allowed, many_set =3D set([])): result =3D {} - for k in allowed.iterkeys(): + for k, v in allowed.iteritems(): if k in filter_set: - result[allowed[k]] =3D filter_set[k] + vv =3D filter_set[k] + if k in many_set: + l =3D vv.split(',') + if len(l)>1: + v +=3D '__in' + vv =3D l + result[v] =3D vv return result =20 -def exclude_blank(res_dict): +def filter_req(filter_set, allowed): result =3D {} - for k in res_dict.iterkeys(): - if res_dict[k]: - result[k] =3D res_dict[k] + for k in allowed.iterkeys(): + v =3D filter_set.get(k) + if v: + result[k] =3D v return result =20 def dynamic_order(args_list, allowed_list, reverse =3D None): @@ -57,24 +64,15 @@ def dynamic_order(args_list, allowed_list, reverse =3D= None): class MultipleFilterListViewMixin(object): allowed_filter =3D {} allowed_order =3D {} - m2m_filter =3D () + allowed_many =3D set() + m2m_filter =3D set() =20 base_queryset =3D None # should be queryset =20 - def __init__(self, *args, **kwargs): - super(MultipleFilterListViewMixin, self).__init__(*args, **kwarg= s) - l =3D [] - for key, val in self.allowed_filter.iteritems(): - if key in self.m2m_filter: - l.append(val) - self.m2m_set =3D frozenset(l) - def get_queryset(self): - qs =3D dynamic_filter(exclude_blank(self.request.GET), - self.allowed_filter) - qs.update( dynamic_filter(exclude_blank(self.kwargs), - self.allowed_filter) ) - =20 + qs =3D filter_req(self.request.GET, self.allowed_filter) + qs.update(filter_req(self.kwargs, self.allowed_filter)) + if self.kwargs.get('rev') is None: reverse =3D bool(self.request.GET.get('rev',False)) else: @@ -87,10 +85,11 @@ class MultipleFilterListViewMixin(object): if self.kwargs.get('order') not in self.allowed_order: raise Http404('no such order') =20 - queryset =3D self.base_queryset.filter(**qs).order_by(order) + qa =3D dynamic_filter(qs, self.allowed_filter, self.allowed_many= ) + queryset =3D self.base_queryset.filter(**qa).order_by(order) =20 for q in qs.iterkeys(): - if q in self.m2m_set: + if q in self.m2m_filter: queryset =3D queryset.distinct() break =20 diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/v= iews.py index 32b4e7d..9fe1b94 100644 --- a/gpackages/apps/packages/views.py +++ b/gpackages/apps/packages/views.py @@ -115,6 +115,8 @@ class PackagesListsView(MultipleFilterListViewMixin, = ContextArchListView): 'rand':'?', # it slow None: '-updated_datetime' } + allowed_many =3D set(['repo', 'use']) + paginate_by =3D 40 extra_context =3D {'page_name': 'Packages', 'arches': arches} template_name =3D 'packages.html'