1 |
commit: 9041adff94fb2a6e78bdb6481b803ace4306465d |
2 |
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org> |
3 |
AuthorDate: Mon Aug 27 15:43:06 2012 +0000 |
4 |
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua> |
5 |
CommitDate: Mon Aug 27 15:50:23 2012 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=9041adff |
7 |
|
8 |
Extend filtering mixin |
9 |
|
10 |
--- |
11 |
gpackages/apps/generic/views.py | 26 ++++++++++++++++++++++++++ |
12 |
gpackages/apps/packages/views.py | 18 ++++++++++-------- |
13 |
2 files changed, 36 insertions(+), 8 deletions(-) |
14 |
|
15 |
diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py |
16 |
index faf8559..da0048e 100644 |
17 |
--- a/gpackages/apps/generic/views.py |
18 |
+++ b/gpackages/apps/generic/views.py |
19 |
@@ -96,6 +96,32 @@ class MultipleFilterListViewMixin(object): |
20 |
with ``distinct`` attribute. |
21 |
""" |
22 |
|
23 |
+ @classmethod |
24 |
+ def get_url_kwargs(cls, filters, order = None, rev = False): |
25 |
+ kwargs = {} |
26 |
+ for name, value in filters.iteritems(): |
27 |
+ if not value or name not in cls.allowed_filter: |
28 |
+ continue |
29 |
+ |
30 |
+ if name in cls.boolean_filters: |
31 |
+ value = 'yes' if value else 'no' |
32 |
+ elif name in cls.allowed_many: |
33 |
+ if not isinstance(value, (str, unicode)): |
34 |
+ count = cls.allowed_many[name] |
35 |
+ if count > 0: |
36 |
+ value = value[:count] |
37 |
+ value = ','.join(value) |
38 |
+ |
39 |
+ kwargs[name] = value |
40 |
+ |
41 |
+ if order is not None and order in self.allowed_order: |
42 |
+ kwargs['order'] = order |
43 |
+ |
44 |
+ if rev: |
45 |
+ kwargs['rev'] = 'rev' |
46 |
+ |
47 |
+ return kwargs |
48 |
+ |
49 |
def get_context_data(self, **kwargs): |
50 |
"""In addition to default context value will return all filters as |
51 |
:py:class:`.dict`. |
52 |
|
53 |
diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py |
54 |
index 5167a31..b597a12 100644 |
55 |
--- a/gpackages/apps/packages/views.py |
56 |
+++ b/gpackages/apps/packages/views.py |
57 |
@@ -115,7 +115,7 @@ class MaintainersListView(CacheFilterListView, ContextListView): |
58 |
cache_time = 560 |
59 |
allowed_filter = { 'dev' : 'is_dev', |
60 |
'herd' : 'herdsmodel__name'} |
61 |
- allowed_order = { None: 'name'} |
62 |
+ allowed_order = { None: 'name', 'dev' : 'is_dev'} |
63 |
boolean_filters = ('dev',) |
64 |
paginate_by = 40 |
65 |
extra_context = {'page_name': 'Maintainers',} |
66 |
@@ -213,14 +213,16 @@ class PackagesListsView(CacheFilterListView, ContextArchListView): |
67 |
'herd':'herds__name', |
68 |
'maintainer': 'maintainers__pk', |
69 |
'license': 'ebuildmodel__licenses__name', |
70 |
- 'use': 'ebuildmodel__use_flags__name' |
71 |
+ 'use': 'ebuildmodel__use_flags__name', |
72 |
+ # it's too slow |
73 |
+ #'arch' : 'ebuildmodel__keyword__arch__name' |
74 |
} |
75 |
|
76 |
m2m_filter = set(['herd', 'maintainer', 'license', 'use']) |
77 |
|
78 |
allowed_order = { 'create': 'created_datetime', |
79 |
'update': 'updated_datetime', |
80 |
- 'rand':'?', # it slow |
81 |
+ #'rand':'?', # it is slow |
82 |
None: '-updated_datetime' |
83 |
} |
84 |
allowed_many = {'repo': 5, 'use' : 3, 'herd': 4, 'category': 4, 'license': 3} |
85 |
@@ -361,11 +363,11 @@ class FilteringView(FormView): |
86 |
|
87 |
def get_success_url(self): |
88 |
dct = {} |
89 |
- for k, v in self.params_dict.iteritems(): |
90 |
- vv = self.form_data[k] |
91 |
- if vv: |
92 |
- dct[v] = ','.join(vv) |
93 |
- return reverse('packages', kwargs = dct) |
94 |
+ for k,v in self.params_dict.iteritems(): |
95 |
+ dct[v] = self.form_data[k] |
96 |
+ |
97 |
+ kwargs = PackagesListsView.get_url_kwargs(dct) |
98 |
+ return reverse('packages', kwargs = kwargs) |
99 |
|
100 |
class RepoDetailView(ArchesCacheViewMixin, DetailView): |
101 |
cache_time = 900 |