Gentoo Archives: gentoo-commits

From: Slava Bacherikov <slava@××××××××××××××.ua>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/generic/, gpackages/templates/
Date: Sat, 30 Jun 2012 01:39:04
Message-Id: 1341006948.8d2ac5e1b45a8c97dbd54b392480017fce2c0ff5.bacher09@gentoo
1 commit: 8d2ac5e1b45a8c97dbd54b392480017fce2c0ff5
2 Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
3 AuthorDate: Fri Jun 29 21:55:48 2012 +0000
4 Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
5 CommitDate: Fri Jun 29 21:55:48 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=8d2ac5e1
7
8 Add distinct for m2m.
9
10 ---
11 gpackages/apps/generic/views.py | 15 ++++++++++++++-
12 gpackages/apps/packages/urls.py | 3 +--
13 gpackages/apps/packages/views.py | 12 +++++++-----
14 gpackages/templates/license_groups.html | 4 ++--
15 4 files changed, 24 insertions(+), 10 deletions(-)
16
17 diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
18 index 4afe2ec..6beb59e 100644
19 --- a/gpackages/apps/generic/views.py
20 +++ b/gpackages/apps/generic/views.py
21 @@ -57,9 +57,15 @@ def dynamic_order(args_list, allowed_list, reverse = None):
22 class MultipleFilterListViewMixin(object):
23 allowed_filter = {}
24 allowed_order = {}
25 + m2m_filter = ()
26
27 base_queryset = None # should be queryset
28
29 + def __init__(self, *args, **kwargs):
30 + super(MultipleFilterListViewMixin, self).__init__(*args, **kwargs)
31 + l = (x for x in self.allowed_filter.itervalues())
32 + self.m2m_set = frozenset(l)
33 +
34 def get_queryset(self):
35 qs = dynamic_filter(exclude_blank(self.request.GET),
36 self.allowed_filter)
37 @@ -78,7 +84,14 @@ class MultipleFilterListViewMixin(object):
38 if self.kwargs.get('order') not in self.allowed_order:
39 raise Http404('no such order')
40
41 - return self.base_queryset.filter(**qs).order_by(order)
42 + queryset = self.base_queryset.filter(**qs).order_by(order)
43 +
44 + for q in qs.iterkeys():
45 + if q in self.m2m_set:
46 + queryset = queryset.distinct()
47 + break
48 +
49 + return queryset
50
51 @classmethod
52 def get_url_part(cls):
53
54 diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/urls.py
55 index ca15890..045a5ea 100644
56 --- a/gpackages/apps/packages/urls.py
57 +++ b/gpackages/apps/packages/urls.py
58 @@ -15,6 +15,5 @@ urlpatterns = patterns('',
59 # In Future I will write my onw URL Resolver !!!
60 #url(r'^package/(?:(?P<pk>\d+)|(?P<category>[^/]+)/(?P<name>[^/]+))/$', PackageDetailView.as_view(), name = 'package'),
61 url(r'^package/(?P<pk>\d+)/$', PackageDetailView.as_view(), name = 'package'),
62 - url(r'^package/(?P<category>[^/]+)/(?P<name>[^/:]+)/$', PackageDetailView.as_view(), name = 'package'),
63 - url(r'^package/(?P<category>[^/]+)/(?P<name>[^/:]+)::(?P<repository>[^/]+)/$', PackageDetailView.as_view(), name = 'package'),
64 + url(r'^package/(?P<category>[^/]+)/(?P<name>[^/:]+)(?:::(?P<repository>[^/]+))?/$', PackageDetailView.as_view(), name = 'package'),
65 )
66
67 diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py
68 index da330af..5d70510 100644
69 --- a/gpackages/apps/packages/views.py
70 +++ b/gpackages/apps/packages/views.py
71 @@ -7,6 +7,8 @@ from models import CategoryModel, HerdsModel, MaintainerModel, \
72
73 from django.shortcuts import get_object_or_404
74
75 +arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86']
76 +
77 class CategoriesListView(ContextListView):
78 extra_context = {'page_name': 'Categories',}
79 template_name = 'categories.html'
80 @@ -39,7 +41,6 @@ class LicenseGroupsView(ContextListView):
81 context_object_name = 'license_groups'
82
83 class EbuildsListView(ContextListView):
84 - arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86']
85 paginate_by = 40
86 extra_context = {'page_name': 'Ebuilds', 'arches' : arches}
87 template_name = 'ebuilds.html'
88 @@ -47,22 +48,24 @@ class EbuildsListView(ContextListView):
89 queryset = EbuildModel.objects.all(). \
90 select_related('package',
91 'package__virtual_package',
92 - 'package__virtual_package__category').prefetch_keywords(arches)
93 + 'package__virtual_package__category'). \
94 + prefetch_keywords(arches)
95
96 class PackagesListsView(MultipleFilterListViewMixin, ContextListView):
97 allowed_filter = { 'category':'virtual_package__category__category',
98 'repo':'repository__name',
99 'herd':'herds__name',
100 'maintainer': 'maintainers__pk',
101 - 'license': 'licenses__name'
102 + 'license': 'ebuildmodel__licenses__name'
103 }
104
105 + m2m_filter = ['herd', 'maintainer', 'ebuildmodel' ]
106 +
107 allowed_order = { 'create': 'created_datetime',
108 'update': 'updated_datetime',
109 'rand':'?', # it slow
110 None: '-updated_datetime'
111 }
112 - arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86']
113 paginate_by = 40
114 extra_context = {'page_name': 'Packages', 'arches': arches}
115 template_name = 'packages.html'
116 @@ -82,7 +85,6 @@ class PackagesListsView(MultipleFilterListViewMixin, ContextListView):
117 prefetch_keywords(arches)
118
119 class PackageDetailView(ContextView, DetailView):
120 - arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86']
121 template_name = 'package.html'
122 extra_context = {'page_name': 'Package', 'arches': arches}
123 context_object_name = 'package'
124
125 diff --git a/gpackages/templates/license_groups.html b/gpackages/templates/license_groups.html
126 index 00bc0a0..985c670 100644
127 --- a/gpackages/templates/license_groups.html
128 +++ b/gpackages/templates/license_groups.html
129 @@ -1,5 +1,5 @@
130 {% extends "base.html" %}
131 -
132 +{% load url from future %}
133 {% block content %}
134
135 <table class='table table-striped table-hover'>
136 @@ -17,7 +17,7 @@
137 {% for license_group in license_groups %}
138 <tr>
139 <td class="nowrap"><a href="#">{{ license_group.name }}</a></td>
140 - <td>{% for license in license_group.licenses.all %}<a href="#">{{ license }}</a>{% if not forloop.last %},{% endif %} {% endfor %}</td>
141 + <td>{% for license in license_group.licenses.all %}<a href="{% url 'packages' license=license.name %}">{{ license.name }}</a>{% if not forloop.last %},{% endif %} {% endfor %}</td>
142 </tr>
143 {% endfor %}
144 </tbody>