public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Slava Bacherikov" <slava@bacherikov.org.ua>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/generic/
Date: Mon, 27 Aug 2012 21:19:31 +0000 (UTC)	[thread overview]
Message-ID: <1346082623.9041adff94fb2a6e78bdb6481b803ace4306465d.bacher09@gentoo> (raw)

commit:     9041adff94fb2a6e78bdb6481b803ace4306465d
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Mon Aug 27 15:43:06 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Mon Aug 27 15:50:23 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=9041adff

Extend filtering mixin

---
 gpackages/apps/generic/views.py  |   26 ++++++++++++++++++++++++++
 gpackages/apps/packages/views.py |   18 ++++++++++--------
 2 files changed, 36 insertions(+), 8 deletions(-)

diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index faf8559..da0048e 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -96,6 +96,32 @@ class MultipleFilterListViewMixin(object):
     with ``distinct`` attribute.
     """
 
+    @classmethod
+    def get_url_kwargs(cls, filters, order = None, rev = False):
+        kwargs = {}
+        for name, value in filters.iteritems():
+            if not value or name not in cls.allowed_filter:
+                continue
+
+            if name in cls.boolean_filters:
+                value = 'yes' if value else 'no'
+            elif name in cls.allowed_many:
+                if not isinstance(value, (str, unicode)):
+                    count = cls.allowed_many[name]
+                    if count > 0:
+                        value = value[:count]
+                    value = ','.join(value)
+
+            kwargs[name] = value
+
+        if order is not None and order in self.allowed_order:
+            kwargs['order'] = order
+
+        if rev:
+            kwargs['rev'] = 'rev'
+
+        return kwargs
+
     def get_context_data(self, **kwargs):
         """In addition to default context value will return all filters as 
         :py:class:`.dict`.

diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py
index 5167a31..b597a12 100644
--- a/gpackages/apps/packages/views.py
+++ b/gpackages/apps/packages/views.py
@@ -115,7 +115,7 @@ class MaintainersListView(CacheFilterListView, ContextListView):
     cache_time = 560
     allowed_filter = { 'dev' : 'is_dev',
                        'herd' : 'herdsmodel__name'}
-    allowed_order = {  None: 'name'}
+    allowed_order = {  None: 'name', 'dev' : 'is_dev'}
     boolean_filters = ('dev',)
     paginate_by = 40
     extra_context = {'page_name': 'Maintainers',}
@@ -213,14 +213,16 @@ class PackagesListsView(CacheFilterListView, ContextArchListView):
                        'herd':'herds__name',
                        'maintainer': 'maintainers__pk',
                        'license': 'ebuildmodel__licenses__name',
-                       'use': 'ebuildmodel__use_flags__name'
+                       'use': 'ebuildmodel__use_flags__name',
+                       # it's too slow
+                       #'arch' : 'ebuildmodel__keyword__arch__name'
                     }
 
     m2m_filter = set(['herd', 'maintainer', 'license', 'use'])
 
     allowed_order = { 'create': 'created_datetime',
                       'update': 'updated_datetime',
-                      'rand':'?', # it slow
+                      #'rand':'?', # it is slow
                       None: '-updated_datetime'
                     }
     allowed_many = {'repo': 5, 'use' : 3, 'herd': 4, 'category': 4, 'license': 3}
@@ -361,11 +363,11 @@ class FilteringView(FormView):
 
     def get_success_url(self):
         dct = {}
-        for k, v in self.params_dict.iteritems():
-            vv = self.form_data[k]
-            if vv:
-                dct[v] = ','.join(vv)
-        return reverse('packages', kwargs = dct)
+        for k,v  in self.params_dict.iteritems():
+            dct[v] = self.form_data[k]
+
+        kwargs = PackagesListsView.get_url_kwargs(dct)
+        return reverse('packages', kwargs = kwargs)
 
 class RepoDetailView(ArchesCacheViewMixin, DetailView):
     cache_time = 900


             reply	other threads:[~2012-08-27 21:21 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-27 21:19 Slava Bacherikov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-07-30 12:59 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/generic/ Slava Bacherikov
2012-07-14 20:15 Slava Bacherikov
2012-07-10 23:13 Slava Bacherikov
2012-07-10 23:13 Slava Bacherikov
2012-06-30 21:02 Slava Bacherikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1346082623.9041adff94fb2a6e78bdb6481b803ace4306465d.bacher09@gentoo \
    --to=slava@bacherikov.org.ua \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox