* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
To: gentoo-commits
commit: 4c6b17ec4345dfbccfc26472c4fa1adf94d39c03
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Aug 15 15:56:43 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Aug 15 15:56:43 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=4c6b17ec
Add tests for generic application
---
gpackages/apps/generic/tests.py | 274 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 271 insertions(+), 3 deletions(-)
diff --git a/gpackages/apps/generic/tests.py b/gpackages/apps/generic/tests.py
index 501deb7..a3fb050 100644
--- a/gpackages/apps/generic/tests.py
+++ b/gpackages/apps/generic/tests.py
@@ -6,11 +6,279 @@ Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
+from django.db import models
+from django.test.client import RequestFactory
+from django.http import Http404
+from operator import attrgetter
+from time import sleep
+from . import views
+import re
+
+class Tag(models.Model):
+ name = models.CharField(unique = True, max_length = 40)
+
+ def __unicode__(self):
+ return self.name
+
+class Messages(models.Model):
+ title = models.CharField(max_length = 120)
+ text = models.TextField()
+ published = models.BooleanField(default = False)
+ created_datetime = models.DateTimeField(auto_now_add = True)
+ updated_datetime = models.DateTimeField(auto_now = True)
+ tags = models.ManyToManyField(Tag, blank = True)
+
+ def __unicode__(self):
+ return self.title
+
+class TestingViewMixin(object):
+
+ def init_test_args(self, request, *args, **kwargs):
+ self.request = request
+ self.args = args
+ self.kwargs = kwargs
+
+ def get_queryset(self):
+ return self.queryset
+
+ def get_context_data(self, **kwargs):
+ dct = kwargs.copy()
+ return dct
+
+class MessagesFilter(views.MultipleFilterListViewMixin, TestingViewMixin):
+ queryset = Messages.objects.all()
+ m2m_filter = set(['tags'])
+ allowed_many = {'tags': 3 }
+ boolean_filters = ('published',)
+ allowed_filter = { 'title':'title',
+ 'published' : 'published',
+ 'tags' : 'tags__name' }
+
+ allowed_order = { 'create': 'created_datetime',
+ 'update': 'updated_datetime',
+ None : 'created_datetime' }
+
+ def init_test(self, request):
+ url_re = re.compile(r'^%s$' % self.get_url_part())
+ m = url_re.match(request.path[1:])
+ if m is None:
+ raise Http404('Bad url')
+ kwargs = m.groupdict()
+ self.init_test_args(request, **kwargs)
+
+ def __init__(self, request):
+ self.init_test(request)
class SimpleTest(TestCase):
+ def setUp(self):
+ self.factory = RequestFactory()
+ tags = []
+ for tag in ['one', 'two', 'three', 'four', 'five', 'six', 'seven']:
+ tag_obj = Tag.objects.create(name = tag)
+ tags.append(tag_obj)
+
+ m_obj = Messages.objects.create(title = 'First message',
+ text = 'Message',
+ published = True)
+ m_obj.tags.add(*tags[:2])
+
+ m_obj = Messages.objects.create(title = 'Second message',
+ text = 'Message',
+ published = False)
+ m_obj.tags.add(*tags[2:4])
+
+ mu_obj = Messages.objects.create(title = 'Update',
+ text = 'Message',
+ published = False)
+ mu_obj.tags.add(*tags[4:])
+
+ m_obj = Messages.objects.create(title = 'New',
+ text = 'Message',
+ published = True)
+ m_obj.tags.add(tags[0], tags[6])
+
+ m_obj = Messages.objects.create(title = 'title',
+ text = 'Message',
+ published = False)
+ m_obj.tags.add(tags[3], tags[5])
+
+ m_obj = Messages.objects.create(title = 'message',
+ text = 'Message',
+ published = True)
+ m_obj.tags.add(tags[6])
+
+ m_obj = Messages.objects.create(title = 'cats',
+ text = 'Message',
+ published = True)
+ m_obj.tags.add(tags[5])
+ m_obj = Messages.objects.create(title = 'dogs',
+ text = 'Message',
+ published = False)
+ m_obj.tags.add(tags[5])
+
+ # For changed updated_datetime
+ sleep(3)
+ mu_obj.text = 'Updated'
+ mu_obj.save()
+
def test_basic_addition(self):
- """
- Tests that 1 + 1 always equals 2.
- """
self.assertEqual(1 + 1, 2)
+
+ def test_filtering_view_url(self):
+ url = MessagesFilter.get_url_part()
+ self.assertEqual(url, '(?:published/(?P<published>yes|no)/)?' \
+ '(?:tags/(?P<tags>[^/]+)/)?' \
+ '(?:title/(?P<title>[^/]+)/)?' \
+ '(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?')
+
+ def test_filtering_view_query_boolean(self):
+ active = [
+ "First message",
+ "New",
+ "message",
+ "cats"
+ ]
+ inactive = [
+ "Second message",
+ "Update",
+ "title",
+ "dogs"
+ ]
+ request = self.factory.get('/published/yes/')
+ self.assertQuerysetEqual(
+ MessagesFilter(request).get_queryset(),
+ active,
+ attrgetter("title")
+ )
+
+ request = self.factory.get('/published/no/')
+ self.assertQuerysetEqual(
+ MessagesFilter(request).get_queryset(),
+ inactive,
+ attrgetter("title")
+ )
+ request = self.factory.get('/?published=yes')
+ self.assertQuerysetEqual(
+ MessagesFilter(request).get_queryset(),
+ active,
+ attrgetter("title")
+ )
+
+ request = self.factory.get('/?published=no')
+ self.assertQuerysetEqual(
+ MessagesFilter(request).get_queryset(),
+ inactive,
+ attrgetter("title")
+ )
+
+ def test_filtering_view_query_ordering(self):
+ request = self.factory.get('/order/update/rev/')
+ first = MessagesFilter(request).get_queryset()[0]
+ self.assertEqual(first.title, "Update")
+
+ request = self.factory.get('/order/test/')
+ with self.assertRaises(Http404):
+ MessagesFilter(request).get_queryset()
+
+ request = self.factory.get('/order/newtest/rev/')
+ with self.assertRaises(Http404):
+ MessagesFilter(request).get_queryset()
+
+ request = self.factory.get('/?order=update&rev=1')
+ first = MessagesFilter(request).get_queryset()[0]
+ self.assertEqual(first.title, "Update")
+
+ request = self.factory.get('/?order=test')
+ with self.assertRaises(Http404):
+ MessagesFilter(request).get_queryset()
+
+ request = self.factory.get('/?order=newtest&rev=1')
+ with self.assertRaises(Http404):
+ MessagesFilter(request).get_queryset()
+
+ def test_filtering_view_query_search(self):
+ def title_test(title):
+ request = self.factory.get('/title/%s/' % title)
+ obj = MessagesFilter(request).get_queryset()[0]
+ self.assertEqual(obj.title, title)
+
+ title_test("title")
+ title_test("cats")
+ title_test("dogs")
+ title_test("New")
+
+ def title_test2(title):
+ request = self.factory.get('/?title=%s' % title)
+ obj = MessagesFilter(request).get_queryset()[0]
+ self.assertEqual(obj.title, title)
+
+ title_test2("First message")
+ title_test2("Second message")
+
+ request = self.factory.get('/title/empty/')
+ self.assertEqual(len(MessagesFilter(request).get_queryset()), 0)
+
+ def test_filtering_view_query_m2m_search(self):
+ first_tag = [
+ "First message",
+ "New",
+ ]
+ last_tag = [
+ "Update",
+ "message"
+ ]
+ four_tag = [
+ "Second message",
+ "title"
+ ]
+ six_tag = [
+ "Update",
+ "title",
+ "cats",
+ "dogs"
+ ]
+ first_last_tag = first_tag + last_tag
+ four_six_tag = list(set(six_tag + four_tag))
+ first_four_last = list(set(first_last_tag + four_tag))
+
+ def test_m2m_tags(link, args_cmp):
+ request = self.factory.get(link)
+ self.assertQuerysetEqual(
+ MessagesFilter(request).get_queryset(),
+ args_cmp,
+ attrgetter("title"),
+ ordered = False
+ )
+
+ test_m2m_tags('/tags/one/', first_tag)
+ test_m2m_tags('/?tags=one', first_tag)
+
+ test_m2m_tags('/tags/one,seven/', first_last_tag)
+ test_m2m_tags('/?tags=one,seven', first_last_tag)
+
+ test_m2m_tags('/tags/four,six/', four_six_tag)
+ test_m2m_tags('/?tags=four,six', four_six_tag)
+
+ test_m2m_tags('/tags/one,four,seven/', first_four_last)
+ test_m2m_tags('/?tags=one,four,seven', first_four_last)
+
+ # last tag should be rejected due the limit in allowed_many
+ test_m2m_tags('/tags/one,four,seven,six/', first_four_last)
+ test_m2m_tags('/?tags=one,four,seven,six', first_four_last)
+
+ def test_filtering_view_query_complex(self):
+ def test_complex(link, args_cmp):
+ request = self.factory.get(link)
+ self.assertQuerysetEqual(
+ MessagesFilter(request).get_queryset(),
+ args_cmp,
+ attrgetter("title"),
+ ordered = False
+ )
+
+ test_complex('/published/yes/tags/six/', ["cats"])
+ test_complex('/?published=yes&tags=six', ["cats"])
+
+ test_complex('/published/yes/tags/seven/title/message/', ["message"])
+ test_complex('/?published=yes&tags=seven&title=message', ["message"])
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-09-23 19:35 Slava Bacherikov
0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-09-23 19:35 UTC (permalink / raw
To: gentoo-commits
commit: e93bb75de771b099307a722f746da4c6238dcb3e
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Sep 23 11:39:34 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Sep 23 11:39:34 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=e93bb75d
Deleted unneeded code
---
gpackages/apps/generic/views.py | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index 910d3a5..e56eb74 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -7,7 +7,6 @@ from django.http import Http404
from django.core.urlresolvers import reverse, NoReverseMatch
from django.utils.html import mark_safe
from string import Template
-from collections import namedtuple
import re
class ContextView(object):
@@ -74,8 +73,6 @@ def dynamic_order(order_attr, allowed_list, reverse = None):
order = order[1:]
return order
-OrderClass = namedtuple('OrderClass', ['active', 'link', 'reverse'])
-
class OrderClass(object):
__slots__ = ('active', 'link', 'reverse')
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
To: gentoo-commits
commit: 32373d3cf12db6da4a1dce2763d929e32b31fab7
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sun Aug 19 13:50:33 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sun Aug 19 13:50:33 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=32373d3c
Add more tests to generic
---
gpackages/apps/generic/tests.py | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/gpackages/apps/generic/tests.py b/gpackages/apps/generic/tests.py
index c781c03..e635770 100644
--- a/gpackages/apps/generic/tests.py
+++ b/gpackages/apps/generic/tests.py
@@ -8,6 +8,7 @@ Replace this with more appropriate tests for your application.
from django.test import TestCase
from django.db import models
from django.test.client import RequestFactory
+from django.template import Template, Context, TemplateSyntaxError
from django.http import Http404
from django.conf.urls import url, patterns
from django.http import HttpResponse
@@ -360,3 +361,28 @@ class TemplateTagsTest(TestCase):
'<li class="active"><a href="/test2/extraargs" '\
'id="test_id">text</a><li>'
)
+
+ def test_templatetag_active_str(self):
+ request = self.factory.get('/test/')
+ out = Template(
+ "{% load active_link %}"
+ "{% active_str '/test/' %}"
+ ).render(Context({'request': request}))
+
+ self.assertEqual(out, "active")
+
+ request = self.factory.get('/test/?query=val')
+ out = Template(
+ "{% load active_link %}"
+ "{% active_str '/test/' %}"
+ ).render(Context({'request': request}))
+
+ self.assertEqual(out, "active")
+
+ request = self.factory.get('/test2/')
+ out = Template(
+ "{% load active_link %}"
+ "{% active_str '/test/' %}"
+ ).render(Context({'request': request}))
+
+ self.assertEqual(out, "")
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
To: gentoo-commits
commit: 72d3d19cdd69b5b1e6ec88065f4554831f055742
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Thu Aug 16 23:41:43 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Thu Aug 16 23:41:43 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=72d3d19c
Improve generic tests
---
gpackages/apps/generic/tests.py | 78 +++++++++++++++++++++++++++++++++++++++
1 files changed, 78 insertions(+), 0 deletions(-)
diff --git a/gpackages/apps/generic/tests.py b/gpackages/apps/generic/tests.py
index 7192f21..c781c03 100644
--- a/gpackages/apps/generic/tests.py
+++ b/gpackages/apps/generic/tests.py
@@ -9,11 +9,23 @@ from django.test import TestCase
from django.db import models
from django.test.client import RequestFactory
from django.http import Http404
+from django.conf.urls import url, patterns
+from django.http import HttpResponse
+from django.core.urlresolvers import reverse
from operator import attrgetter
from . import views
+from .templatetags import active_link, paginator
import re
import datetime
+def test_view(request, *args, **kwargs):
+ return HttpResponse('')
+
+urlpatterns = patterns('',
+ url(r'^test/$', test_view, name = 'test'),
+ url(r'^test2/(?P<extra>extra)(?P<args>args)$', test_view, name = 'test2'),
+)
+
class Tag(models.Model):
name = models.CharField(unique = True, max_length = 40)
@@ -282,3 +294,69 @@ class SimpleTest(TestCase):
test_complex('/published/yes/tags/seven/title/message/', ["message"])
test_complex('/?published=yes&tags=seven&title=message', ["message"])
+
+class TemplateTagsTest(TestCase):
+ urls = "generic.tests"
+ def setUp(self):
+ self.factory = RequestFactory()
+
+ def test_basic_addition(self):
+ self.assertEqual(1 + 1, 2)
+
+ def test_settings(self):
+ url = reverse('test')
+ self.assertEqual(url, '/test/')
+
+ def test_templatetag_fun1(self):
+ request = self.factory.get('/test/')
+ self.assertEqual(
+ active_link.active_str({'request': request}, '/test/'),
+ "active"
+ )
+ request = self.factory.get('/test/?query=val')
+ self.assertEqual(
+ active_link.active_str({'request': request}, '/test/'),
+ "active"
+ )
+ request = self.factory.get('/test2/')
+ self.assertEqual(
+ active_link.active_str({'request': request}, '/test/'),
+ ""
+ )
+ request = self.factory.get('/test/')
+ self.assertEqual(
+ active_link.active_str({'request': request}, '/test'),
+ ""
+ )
+
+ def test_templatetag_fun2(self):
+ fun2 = active_link.active_link
+ request = self.factory.get('/test/')
+ self.assertEqual(
+ fun2({'request': request}, 'test', 'text'),
+ '<li class="active"><a href="/test/">text</a><li>'
+ )
+ request = self.factory.get('/another_test/')
+ self.assertEqual(
+ fun2({'request': request}, 'test', 'text'),
+ '<li><a href="/test/">text</a><li>'
+ )
+
+ request = self.factory.get('/another_test/')
+ self.assertEqual(
+ fun2({'request': request}, 'bad_test', 'text'),
+ '<li><a href="#">text</a><li>'
+ )
+
+ request = self.factory.get('/test/')
+ self.assertEqual(
+ fun2({'request': request}, 'test', 'text', id = 'test_id'),
+ '<li class="active"><a href="/test/" id="test_id">text</a><li>'
+ )
+ request = self.factory.get('/test2/extraargs')
+ self.assertEqual(
+ fun2({'request': request}, 'test2', 'text',
+ id = 'test_id', extra = 'extra', args = 'args'),
+ '<li class="active"><a href="/test2/extraargs" '\
+ 'id="test_id">text</a><li>'
+ )
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
To: gentoo-commits
commit: 3c7f552e852073966ebbe4c7d677eeae36188870
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Aug 15 21:59:11 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Aug 15 21:59:11 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=3c7f552e
Improve generic tests
---
gpackages/apps/generic/tests.py | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/gpackages/apps/generic/tests.py b/gpackages/apps/generic/tests.py
index a3fb050..7192f21 100644
--- a/gpackages/apps/generic/tests.py
+++ b/gpackages/apps/generic/tests.py
@@ -10,9 +10,9 @@ from django.db import models
from django.test.client import RequestFactory
from django.http import Http404
from operator import attrgetter
-from time import sleep
from . import views
import re
+import datetime
class Tag(models.Model):
name = models.CharField(unique = True, max_length = 40)
@@ -118,9 +118,9 @@ class SimpleTest(TestCase):
m_obj.tags.add(tags[5])
# For changed updated_datetime
- sleep(3)
- mu_obj.text = 'Updated'
- mu_obj.save()
+ nd = datetime.datetime.now() + datetime.timedelta(0, 5)
+ Messages.objects.filter(pk = mu_obj.pk). \
+ update(text = 'Updated', updated_datetime = nd)
def test_basic_addition(self):
self.assertEqual(1 + 1, 2)
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-20 13:03 Slava Bacherikov
0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-20 13:03 UTC (permalink / raw
To: gentoo-commits
commit: 31f1c86bedd15f532f37e372153b1e2ac8dee81c
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Wed Aug 15 14:58:00 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Wed Aug 15 14:58:00 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=31f1c86b
Change sort behavior
---
gpackages/apps/generic/views.py | 32 +++++++++++++++++++-------------
1 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index 575f90b..26b116c 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -8,6 +8,7 @@ from django.utils.timezone import is_naive
from django.http import Http404
class ContextView(object):
+ "Mixin to add additional data to context"
extra_context = {}
def get_context_data(self, **kwargs):
ret = super(ContextView, self).get_context_data(**kwargs)
@@ -21,6 +22,7 @@ class ContextTemplateView(ContextView, TemplateView):
pass
class SetLang(ContextTemplateView):
+ "View for changing language js is unavailable"
template_name = 'setlang.html'
extra_context = {'page_name': 'Set Language', 'nav_name' : 'setlanguage'}
@@ -53,12 +55,10 @@ def filter_req(filter_set, allowed):
result[k] = v
return result
-def dynamic_order(args_list, allowed_list, reverse = None):
+def dynamic_order(order_attr, allowed_list, reverse = None):
order = allowed_list.get(None)
- if reverse is None:
- reverse = args_list.get('reverse', False)
- if args_list.get('order') in allowed_list:
- order = allowed_list.get(args_list.get('order'))
+ if order_attr in allowed_list:
+ order = allowed_list.get(order_attr)
if order == '?':
return order
@@ -103,9 +103,9 @@ class MultipleFilterListViewMixin(object):
def is_reverse(self):
if self.kwargs.get('rev') is None:
- reverse = bool(self.request.GET.get('rev',False))
+ reverse = bool(self.request.GET.get('rev', False))
else:
- reverse = bool(self.kwargs.get('rev',False))
+ reverse = bool(self.kwargs.get('rev', False))
return reverse
@@ -113,11 +113,13 @@ class MultipleFilterListViewMixin(object):
reverse = self.is_reverse()
if 'order' in self.request.GET:
- order = dynamic_order(self.request.GET, self.allowed_order,reverse)
+ order_attr = self.request.GET.get('order')
else:
- order = dynamic_order(self.kwargs, self.allowed_order, reverse)
- if self.kwargs.get('order') not in self.allowed_order:
- raise Http404('no such order')
+ order_attr = self.kwargs.get('order')
+
+ if order_attr not in self.allowed_order:
+ raise Http404('no such order')
+ order = dynamic_order(order_attr, self.allowed_order, reverse)
return order
def get_queryset(self):
@@ -146,6 +148,7 @@ class MultipleFilterListViewMixin(object):
else:
l.append(t.format(re.escape(key)))
+ # Maybe add num chars to order attribute ?
return ''.join(l) + "(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?"
class FeedWithUpdated(Feed):
@@ -164,10 +167,13 @@ class FeedWithUpdated(Feed):
class RightAtom1Feed(Atom1Feed):
def add_item_elements(self, handler, item):
if item['pubdate'] is not None:
- handler.addQuickElement(u"published", rfc3339_date(item['pubdate']).decode('utf-8'))
+ handler.addQuickElement(u"published",
+ rfc3339_date(item['pubdate']).decode('utf-8'))
+
item['pubdate'] = None
if item['updated'] is not None:
- handler.addQuickElement(u"updated", rfc3339_date(item['updated']).decode('utf-8'))
+ handler.addQuickElement(u"updated",
+ rfc3339_date(item['updated']).decode('utf-8'))
return super(RightAtom1Feed, self).add_item_elements(handler, item)
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-08-11 22:30 Slava Bacherikov
0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-08-11 22:30 UTC (permalink / raw
To: gentoo-commits
commit: a5df0c3770038f1d407b9d7844773614a06dc9d6
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sat Aug 11 18:22:38 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sat Aug 11 18:22:38 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=a5df0c37
Extend filtering view
---
gpackages/apps/generic/views.py | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index 165633d..575f90b 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -5,6 +5,7 @@ from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Atom1Feed, rfc3339_date
from django.utils import tzinfo
from django.utils.timezone import is_naive
+from django.http import Http404
class ContextView(object):
extra_context = {}
@@ -71,6 +72,7 @@ def dynamic_order(args_list, allowed_list, reverse = None):
class MultipleFilterListViewMixin(object):
allowed_filter = {}
allowed_order = {}
+ boolean_filters = ()
# allowed_many = {'name': int_count}
allowed_many = {}
m2m_filter = set()
@@ -93,6 +95,8 @@ class MultipleFilterListViewMixin(object):
vm = v.split(',')
if len(vm)>1:
v = cut_to_len(vm, self.allowed_many[k])
+ elif k in self.boolean_filters:
+ v = True if v == 'yes' else False
newqs[k] = v
self.queries_dict = newqs
return newqs
@@ -134,9 +138,13 @@ class MultipleFilterListViewMixin(object):
@classmethod
def get_url_part(cls):
t = "(?:{0}/(?P<{0}>[^/]+)/)?"
+ t_bool = "(?:{0}/(?P<{0}>yes|no)/)?"
l =[]
for key in cls.allowed_filter.iterkeys():
- l.append(t.format(re.escape(key)))
+ if key in cls.boolean_filters:
+ l.append(t_bool.format(re.escape(key)))
+ else:
+ l.append(t.format(re.escape(key)))
return ''.join(l) + "(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?"
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/
@ 2012-07-14 20:15 Slava Bacherikov
0 siblings, 0 replies; 8+ messages in thread
From: Slava Bacherikov @ 2012-07-14 20:15 UTC (permalink / raw
To: gentoo-commits
commit: cacb123d2b34abc49f84d6a4489bedb13cf2be22
Author: Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sat Jul 14 18:43:54 2012 +0000
Commit: Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sat Jul 14 18:43:54 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=cacb123d
Refactor filtering mixin
---
gpackages/apps/generic/views.py | 20 ++++++++++++++++----
1 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index e8b5cdc..27a64eb 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -1,5 +1,6 @@
from django.views.generic import TemplateView, ListView
from string import Template
+import re
class ContextView(object):
extra_context = {}
@@ -73,16 +74,21 @@ class MultipleFilterListViewMixin(object):
allowed_many = {}
m2m_filter = set()
- def get_queryset(self):
- query = super(MultipleFilterListViewMixin, self).get_queryset()
-
+ def get_filters(self):
qs = filter_req(self.request.GET, self.allowed_filter)
qs.update(filter_req(self.kwargs, self.allowed_filter))
+ return qs
+ def is_reverse(self):
if self.kwargs.get('rev') is None:
reverse = bool(self.request.GET.get('rev',False))
else:
reverse = bool(self.kwargs.get('rev',False))
+
+ return reverse
+
+ def get_order(self):
+ reverse = self.is_reverse()
if 'order' in self.request.GET:
order = dynamic_order(self.request.GET, self.allowed_order,reverse)
@@ -90,6 +96,12 @@ class MultipleFilterListViewMixin(object):
order = dynamic_order(self.kwargs, self.allowed_order, reverse)
if self.kwargs.get('order') not in self.allowed_order:
raise Http404('no such order')
+ return order
+
+ def get_queryset(self):
+ query = super(MultipleFilterListViewMixin, self).get_queryset()
+ qs = self.get_filters()
+ order = self.get_order()
qa = dynamic_filter(qs, self.allowed_filter, self.allowed_many)
queryset = query.filter(**qa).order_by(order)
@@ -106,7 +118,7 @@ class MultipleFilterListViewMixin(object):
t = "(?:{0}/(?P<{0}>[^/]+)/)?"
l =[]
for key in cls.allowed_filter.iterkeys():
- l.append(t.format(key))
+ l.append(t.format(re.escape(key)))
return ''.join(l) + "(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?"
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2012-09-23 19:36 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-20 13:03 [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/generic/ Slava Bacherikov
-- strict thread matches above, loose matches on Subject: below --
2012-09-23 19:35 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-20 13:03 Slava Bacherikov
2012-08-11 22:30 Slava Bacherikov
2012-07-14 20:15 Slava Bacherikov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox