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 1SnxZW-0004gV-KY for garchives@archives.gentoo.org; Sun, 08 Jul 2012 19:55:10 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 06120E0444; Sun, 8 Jul 2012 19:54:47 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id AF953E039A for ; Sun, 8 Jul 2012 19:54:47 +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 701EA1B4002 for ; Sun, 8 Jul 2012 19:54:46 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id 10552E5433 for ; Sun, 8 Jul 2012 19:54:45 +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: <1341681130.c0e24d2d15775b3e53d00027a9d138dc42f6b2df.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/forms.py gpackages/apps/packages/urls.py gpackages/apps/packages/views.py gpackages/apps/packages/widgets.py gpackages/templates/arch_choice.html gpackages/templates/base.html X-VCS-Directories: gpackages/apps/packages/ gpackages/templates/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: c0e24d2d15775b3e53d00027a9d138dc42f6b2df X-VCS-Branch: master Date: Sun, 8 Jul 2012 19:54:45 +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: 59d57192-c26f-463b-bd7f-115531a44d99 X-Archives-Hash: 9e78874bfa04f2640476ed900e4bc0bb commit: c0e24d2d15775b3e53d00027a9d138dc42f6b2df Author: Slava Bacherikov bacher09 org> AuthorDate: Sat Jul 7 16:53:32 2012 +0000 Commit: Slava Bacherikov bacherikov org ua> CommitDate: Sat Jul 7 17:12:10 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/gentoo-packag= es.git;a=3Dcommit;h=3Dc0e24d2d Add arch choices view --- gpackages/apps/packages/forms.py | 13 +++++++++ gpackages/apps/packages/urls.py | 3 +- gpackages/apps/packages/views.py | 47 ++++++++++++++++++++++++++++= ------ gpackages/apps/packages/widgets.py | 42 ++++++++++++++++++++++++++++= ++ gpackages/templates/arch_choice.html | 10 +++++++ gpackages/templates/base.html | 3 +- 6 files changed, 108 insertions(+), 10 deletions(-) diff --git a/gpackages/apps/packages/forms.py b/gpackages/apps/packages/f= orms.py new file mode 100644 index 0000000..39dab08 --- /dev/null +++ b/gpackages/apps/packages/forms.py @@ -0,0 +1,13 @@ +from django import forms +from .models import ArchesModel +from .widgets import DivCheckboxSelectMultiple + +# Need rerun if database are empty +arches =3D ArchesModel.objects.exclude(name =3D '*').order_by('name').va= lues_list('name', 'name') + + +class ArchChoiceForm(forms.Form): + arches =3D forms.MultipleChoiceField( + widget =3D DivCheckboxSelectMultiple, + #widget =3D forms.CheckboxSelectMultiple(attrs =3D {'class':= 'inline checkbox'}), + choices =3D arches) diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/ur= ls.py index 5ee5654..40fef62 100644 --- a/gpackages/apps/packages/urls.py +++ b/gpackages/apps/packages/urls.py @@ -3,7 +3,7 @@ from views import CategoriesListView, HerdsListView, Main= tainersListView, \ RepositoriesListView, LicenseGroupsView , EbuildsListV= iew, \ PackagesListsView, PackageDetailView, EbuildDetailView= , \ GlobalUseListView, NewsListView, NewsDetailView, \ - LicenseDetailView + LicenseDetailView, ArchChoiceView =20 urlpatterns =3D patterns('', url(r'^categories/$', CategoriesListView.as_view(), name =3D 'catego= ries'), @@ -25,4 +25,5 @@ urlpatterns =3D patterns('', url(r'^news/(?P\d+)/$', NewsDetailView.as_view(), name =3D 'news= _item'), url(r'^news/(?P[^/]+)/$', NewsDetailView.as_view(), name =3D '= news_item'), url(r'^license/(?P[^/]+)/$', LicenseDetailView.as_view(), name= =3D 'license'), + url(r'^arches/$', ArchChoiceView.as_view(), name =3D 'archchoice'), ) diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/v= iews.py index 7d6322d..1123d5a 100644 --- a/gpackages/apps/packages/views.py +++ b/gpackages/apps/packages/views.py @@ -1,15 +1,31 @@ -from django.views.generic import DetailView +from django.views.generic import DetailView, FormView, ListView from generic.views import ContextListView, ContextTemplateView, ContextV= iew, \ MultipleFilterListViewMixin -from models import CategoryModel, HerdsModel, MaintainerModel, \ - RepositoryModel, LicenseGroupModel, EbuildModel, \ - PackageModel, UseFlagModel, PortageNewsModel, License= Model +from .models import CategoryModel, HerdsModel, MaintainerModel, \ + RepositoryModel, LicenseGroupModel, EbuildModel, \ + PackageModel, UseFlagModel, PortageNewsModel, Licens= eModel +from .forms import ArchChoiceForm =20 from django.shortcuts import get_object_or_404 from package_info.parse_cp import EbuildParseCPVR, PackageParseCPR =20 arches =3D ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sp= arc', 'x86'] =20 +class ArchesViewMixin(object): + def get_arches(self): + arches_s =3D self.request.session.get('arches') + return arches_s or arches + =20 + +class ArchesContexView(ArchesViewMixin, ContextView): + def get_context_data(self, **kwargs): + ret =3D super(ArchesContexView, self).get_context_data(**kwargs) + ret.update({'arches': self.get_arches()}) + return ret + +class ContextArchListView(ArchesContexView, ListView): + pass + class CategoriesListView(ContextListView): extra_context =3D {'page_name': 'Categories',} template_name =3D 'categories.html' @@ -41,7 +57,7 @@ class LicenseGroupsView(ContextListView): template_name =3D 'license_groups.html' context_object_name =3D 'license_groups' =20 -class EbuildsListView(ContextListView): +class EbuildsListView(ContextArchListView): paginate_by =3D 40 extra_context =3D {'page_name': 'Ebuilds', 'arches' : arches} template_name =3D 'ebuilds.html' @@ -53,7 +69,7 @@ class EbuildsListView(ContextListView): prefetch_related('package__repository'). \ prefetch_keywords(arches) =20 -class EbuildDetailView(ContextView, DetailView): +class EbuildDetailView(ArchesContexView, DetailView): template_name =3D 'ebuild.html' extra_context =3D {'page_name': 'Ebuild', 'arches': arches} context_object_name =3D 'ebuild' @@ -82,7 +98,7 @@ class EbuildDetailView(ContextView, DetailView): revision =3D revision) return obj =20 -class PackagesListsView(MultipleFilterListViewMixin, ContextListView): +class PackagesListsView(MultipleFilterListViewMixin, ContextArchListView= ): allowed_filter =3D { 'category':'virtual_package__category__category= ', 'repo':'repository__name', 'herd':'herds__name', @@ -116,7 +132,7 @@ class PackagesListsView(MultipleFilterListViewMixin, = ContextListView): prefetch_related('repository', 'herds', 'maintainers'). \ prefetch_keywords(arches) =20 -class PackageDetailView(ContextView, DetailView): +class PackageDetailView(ArchesContexView, DetailView): template_name =3D 'package.html' extra_context =3D {'page_name': 'Package', 'arches': arches} context_object_name =3D 'package' @@ -171,3 +187,18 @@ class LicenseDetailView(ContextView, DetailView): slug_field =3D 'name' queryset =3D LicenseModel.objects.all() =20 +class ArchChoiceView(ArchesViewMixin, FormView): + form_class =3D ArchChoiceForm + template_name =3D 'arch_choice.html' + success_url =3D '/' + + def get_initial(self): + arches =3D self.get_arches() + return {'arches': arches } + + def form_valid(self, form): + arches =3D form.cleaned_data['arches'] + # Maybe save it to cookies ? + # arches_str =3D ','.join(arches) + self.request.session['arches'] =3D arches + return super(ArchChoiceView, self).form_valid(form) diff --git a/gpackages/apps/packages/widgets.py b/gpackages/apps/packages= /widgets.py new file mode 100644 index 0000000..047d0e2 --- /dev/null +++ b/gpackages/apps/packages/widgets.py @@ -0,0 +1,42 @@ +from django import forms +from django.utils.safestring import mark_safe +from django.utils.encoding import smart_unicode, force_unicode +from itertools import chain + +class DivCheckboxSelectMultiple(forms.CheckboxSelectMultiple): + def render(self, name, value, attrs=3DNone, choices=3D()): + if value is None: value =3D [] + has_id =3D attrs and 'id' in attrs + final_attrs =3D self.build_attrs(attrs, name=3Dname) + output =3D ['
'] + # Normalize to strings + str_values =3D set([force_unicode(v) for v in value]) + row1, row2 =3D ['
'], ['
'] + for i, (option_value, option_label) in enumerate(chain(self.choi= ces, choices)): + # If an ID attribute was given, add a numeric index as a suf= fix, + # so that the checkboxes don't all have the same ID attribut= e. + if has_id: + final_attrs =3D dict(final_attrs, id=3D'%s_%s' % (attrs[= 'id'], i)) + label_for =3D ' for=3D"{0}"'.format(final_attrs['id']) + else: + label_for =3D '' + + label_for +=3D ' class=3D"control-label"' + + cb =3D forms.CheckboxInput(final_attrs, check_test=3Dlambda = value: value in str_values) + option_value =3D force_unicode(option_value) + rendered_cb =3D cb.render(name, option_value) + option_label =3D force_unicode(option_label) + if i % 2: + arr =3D row2 + else: + arr =3D row1 + + arr.append('{1} {2}'.format( + label_for, rendered_cb, option_lab= el)) + + row1.append('
') + row2.append('
') + output.extend(row1 + row2) + output.append('
') + return mark_safe('\n'.join(output)) diff --git a/gpackages/templates/arch_choice.html b/gpackages/templates/a= rch_choice.html new file mode 100644 index 0000000..0b03c61 --- /dev/null +++ b/gpackages/templates/arch_choice.html @@ -0,0 +1,10 @@ +{% extends 'base.html' %} + +{% block content %} +
+
{% c= srf_token %} + {{ form.as_ul }}=20 + +
+
+{% endblock content %} diff --git a/gpackages/templates/base.html b/gpackages/templates/base.htm= l index a42f5da..6abe005 100644 --- a/gpackages/templates/base.html +++ b/gpackages/templates/base.html @@ -80,7 +80,7 @@
{% block content %} -Text + Text {% endblock content %}
=20 @@ -113,6 +113,7 @@ Text {% active_link 'repositories' 'Repositories'= %} {% active_link 'license_groups' 'License Gro= ups' %} {% active_link 'global_uses' 'Global Use Fla= gs' %} + {% active_link 'archchoice' 'Select Arches' = %}
{% recent_ebuilds %}