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.60) (envelope-from ) id 1SkgpB-0001uG-Fk for garchives@archives.gentoo.org; Fri, 29 Jun 2012 19:25:54 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id CB4E0E076B; Fri, 29 Jun 2012 19:25:36 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 89B48E076B for ; Fri, 29 Jun 2012 19:25:36 +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 649AD1B4004 for ; Fri, 29 Jun 2012 19:25:35 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 2C3B9E5432 for ; Fri, 29 Jun 2012 19:25:34 +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: <1340997928.da1ad22983b481f3da07752ea18b1337955fd5b9.bacher09@gentoo> Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/templates/ X-VCS-Repository: proj/gentoo-packages X-VCS-Files: gpackages/apps/packages/urls.py gpackages/apps/packages/views.py gpackages/templates/categories.html gpackages/templates/herds.html gpackages/templates/maintainers.html gpackages/templates/repositories.html X-VCS-Directories: gpackages/apps/packages/ gpackages/templates/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: da1ad22983b481f3da07752ea18b1337955fd5b9 X-VCS-Branch: master Date: Fri, 29 Jun 2012 19:25:34 +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: 9d1ca26f-2400-4caf-a0d2-7ffc75a64949 X-Archives-Hash: 0e2825208f350bb65eaa552577d99af2 commit: da1ad22983b481f3da07752ea18b1337955fd5b9 Author: Slava Bacherikov bacher09 org> AuthorDate: Fri Jun 29 19:25:28 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Fri Jun 29 19:25:28 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoo-packag= es.git;a=3Dcommit;h=3Dda1ad229 Add dynamic packages filter --- gpackages/apps/packages/urls.py | 3 +- gpackages/apps/packages/views.py | 68 +++++++++++++++++++++++++++= +++++- gpackages/templates/categories.html | 3 +- gpackages/templates/herds.html | 4 +- gpackages/templates/maintainers.html | 3 +- gpackages/templates/repositories.html | 3 +- 6 files changed, 77 insertions(+), 7 deletions(-) diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/ur= ls.py index ffb16ca..f597026 100644 --- a/gpackages/apps/packages/urls.py +++ b/gpackages/apps/packages/urls.py @@ -10,7 +10,8 @@ urlpatterns =3D patterns('', url(r'^repositories/$', RepositoriesListView.as_view(), name =3D 're= positories'), url(r'^license-groups/$', LicenseGroupsView.as_view(), name =3D 'lic= ense_groups'), url(r'^$', EbuildsListView.as_view(), name =3D 'ebuilds'), - url(r'^packages/$', PackagesListsView.as_view(), name =3D 'packages'= ), + url(r'^packages/(?:category/(?P[^/]+)/)?(?:repo/(?P[= ^/]*)/)?(?:herd/(?P[^/]+)/)?(?:maintainer/(?P[^/]+)/= )?(?:order/(?P[a-z]*)/)?(?Prev/)?$', + PackagesListsView.as_view(), name =3D 'packages'), =20 # In Future I will write my onw URL Resolver !!! #url(r'^package/(?:(?P\d+)|(?P[^/]+)/(?P[^/]+))/= $', PackageDetailView.as_view(), name =3D 'package'), diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/v= iews.py index 2ec2758..2c75ed6 100644 --- a/gpackages/apps/packages/views.py +++ b/gpackages/apps/packages/views.py @@ -48,7 +48,53 @@ class EbuildsListView(ContextListView): 'package__virtual_package', 'package__virtual_package__category').prefetch_ke= ywords(arches) =20 +# there is another dynamic filter for django, and it maybe better=20 +# 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): + result =3D {} + for k in allowed.iterkeys(): + if k in filter_set: + result[allowed[k]] =3D filter_set[k] + return result + +def exclude_blank(res_dict): + result =3D {} + for k in res_dict.iterkeys(): + if res_dict[k]: + result[k] =3D res_dict[k] + return result + +def dynamic_order(args_list, allowed_list, reverse =3D None): + order =3D allowed_list.get(None) + if reverse is None: + reverse =3D args_list.get('reverse', False) + if args_list.get('order') in allowed_list: + order =3D allowed_list.get(args_list.get('order')) + + if order =3D=3D '?': + return order + =20 + if reverse and order[0] !=3D '-': + order =3D '-' + order + elif reverse: + order =3D order[1:] + return order + class PackagesListsView(ContextListView): + allowed_filter =3D { 'category':'virtual_package__category__category= ', + 'repo':'repository__name', + 'herd':'herds__name', + 'maintainer_pk': 'maintainers__pk', + 'license': 'licenses__name' + } + + allowed_order =3D { 'create': 'created_datetime', + 'update': 'updated_datetime', + 'rand':'?', # it slow + None: '-updated_datetime' + } arches =3D ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64',= 'sparc', 'x86'] paginate_by =3D 40 extra_context =3D {'page_name': 'Packages', 'arches': arches} @@ -62,12 +108,32 @@ class PackagesListsView(ContextListView): #INNER JOIN packages_virtualpackagemodel vp=20 #ON( `vp`.id =3D t.virtual_package_id) INNER JOIN `packages_category= model` cp #ON (vp.category_id =3D cp.id); - queryset =3D PackageModel.objects.all(). \ + base_queryset =3D PackageModel.objects.all(). \ select_related('virtual_package', 'virtual_package__category'). \ prefetch_related('repository'). \ prefetch_keywords(arches) =20 + 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 + if self.kwargs.get('rev') is None: + reverse =3D bool(self.request.GET.get('rev',False)) + else: + reverse =3D bool(self.kwargs.get('rev',False)) + =20 + if 'order' in self.request.GET: + order =3D dynamic_order(self.request.GET, self.allowed_order= ,reverse) + else: + order =3D dynamic_order(self.kwargs, self.allowed_order, rev= erse) + if self.kwargs.get('order') not in self.allowed_order: + raise Http404('no such order') + + return self.base_queryset.filter(**qs).order_by(order) + class PackageDetailView(ContextView, DetailView): arches =3D ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64',= 'sparc', 'x86'] template_name =3D 'package.html' diff --git a/gpackages/templates/categories.html b/gpackages/templates/ca= tegories.html index 4163e90..52cfd1f 100644 --- a/gpackages/templates/categories.html +++ b/gpackages/templates/categories.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% load url from future %} =20 {% block content %} =20 @@ -16,7 +17,7 @@ {% for category in categories %} - {{ category.category = }} + {{ category.category }} {{ category.description|default_if_none:"" }} {% endfor %} diff --git a/gpackages/templates/herds.html b/gpackages/templates/herds.h= tml index 5252576..b767967 100644 --- a/gpackages/templates/herds.html +++ b/gpackages/templates/herds.html @@ -1,6 +1,6 @@ {% extends "base.html" %} {% load packages %} - +{% load url from future %} {% block content %} =20 @@ -19,7 +19,7 @@ {% for herd in herds %} - diff --git a/gpackages/templates/maintainers.html b/gpackages/templates/m= aintainers.html index 5646c99..ecd087e 100644 --- a/gpackages/templates/maintainers.html +++ b/gpackages/templates/maintainers.html @@ -1,5 +1,6 @@ {% extends "base.html" %} {% load packages %} +{% load url from future %} =20 {% block content %} =20 @@ -17,7 +18,7 @@ {% for maintainer in maintainers %} - + diff --git a/gpackages/templates/repositories.html b/gpackages/templates/= repositories.html index 0fdb42a..591141f 100644 --- a/gpackages/templates/repositories.html +++ b/gpackages/templates/repositories.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% load url from future %} =20 {% block content %} =20 @@ -18,7 +19,7 @@ {% for repository in repositories %} - +
{{ herd.name }} + {{ herd.name }} {{ herd.email|obfuscate }} {{ herd.description|default_if_none:"" }}
{{ maintainer.name|de= fault:"Not represented" }}{{ maintainer.name|default:"Not represented" = }} {{ maintainer.email|obfuscate }}
{{ repository.name }}= {{ repository.name }} {{ repository.description|default_if_none:"" }} {{ repository.updated_datetime|date:"d m Y H:i:s" }}=