fix chaining querysets for pagination
[wolnelektury.git] / apps / opds / views.py
index a51b5b1..06e0119 100644 (file)
@@ -4,6 +4,7 @@
 #
 from base64 import b64encode
 import os.path
 #
 from base64 import b64encode
 import os.path
+from urlparse import urljoin
 
 from django.contrib.syndication.views import Feed
 from django.core.urlresolvers import reverse
 
 from django.contrib.syndication.views import Feed
 from django.core.urlresolvers import reverse
@@ -17,6 +18,7 @@ from basicauth import logged_in_or_basicauth, factory_decorator
 from catalogue.models import Book, Tag
 from catalogue.views import books_starting_with
 
 from catalogue.models import Book, Tag
 from catalogue.views import books_starting_with
 
+from stats.utils import piwik_track
 
 _root_feeds = (
     {
 
 _root_feeds = (
     {
@@ -58,7 +60,7 @@ _root_feeds = (
 
 
 def full_url(url):
 
 
 def full_url(url):
-    return "http://%s%s" % (Site.objects.get_current().domain, url)
+    return urljoin("http://%s" % Site.objects.get_current().domain, url)
 
 
 class OPDSFeed(Atom1Feed):
 
 
 class OPDSFeed(Atom1Feed):
@@ -185,7 +187,7 @@ class AcquisitionFeed(Feed):
     def item_enclosure_length(self, book):
         return book.root_ancestor.epub_file.size
 
     def item_enclosure_length(self, book):
         return book.root_ancestor.epub_file.size
 
-
+@piwik_track
 class RootFeed(Feed):
     feed_type = OPDSFeed
     title = u'Wolne Lektury'
 class RootFeed(Feed):
     feed_type = OPDSFeed
     title = u'Wolne Lektury'
@@ -206,7 +208,7 @@ class RootFeed(Feed):
     def item_description(self, item):
         return item['description']
 
     def item_description(self, item):
         return item['description']
 
-
+@piwik_track
 class ByCategoryFeed(Feed):
     feed_type = OPDSFeed
     link = u'http://www.wolnelektury.pl/'
 class ByCategoryFeed(Feed):
     feed_type = OPDSFeed
     link = u'http://www.wolnelektury.pl/'
@@ -227,7 +229,7 @@ class ByCategoryFeed(Feed):
         return feed['title']
 
     def items(self, feed):
         return feed['title']
 
     def items(self, feed):
-        return (tag for tag in Tag.objects.filter(category=feed['category']) if tag.get_count() > 0)
+        return Tag.objects.filter(category=feed['category']).exclude(book_count=0)
 
     def item_title(self, item):
         return item.name
 
     def item_title(self, item):
         return item.name
@@ -238,7 +240,7 @@ class ByCategoryFeed(Feed):
     def item_description(self):
         return u''
 
     def item_description(self):
         return u''
 
-
+@piwik_track
 class ByTagFeed(AcquisitionFeed):
     def link(self, tag):
         return tag.get_absolute_url()
 class ByTagFeed(AcquisitionFeed):
     def link(self, tag):
         return tag.get_absolute_url()
@@ -263,6 +265,7 @@ class ByTagFeed(AcquisitionFeed):
 
 
 @factory_decorator(logged_in_or_basicauth())
 
 
 @factory_decorator(logged_in_or_basicauth())
+@piwik_track
 class UserFeed(Feed):
     feed_type = OPDSFeed
     link = u'http://www.wolnelektury.pl/'
 class UserFeed(Feed):
     feed_type = OPDSFeed
     link = u'http://www.wolnelektury.pl/'
@@ -277,7 +280,7 @@ class UserFeed(Feed):
         return u"Półki użytkownika %s" % user.username
 
     def items(self, user):
         return u"Półki użytkownika %s" % user.username
 
     def items(self, user):
-        return (tag for tag in Tag.objects.filter(category='set', user=user) if tag.get_count() > 0)
+        return Tag.objects.filter(category='set', user=user).exclude(book_count=0)
 
     def item_title(self, item):
         return item.name
 
     def item_title(self, item):
         return item.name
@@ -288,8 +291,12 @@ class UserFeed(Feed):
     def item_description(self):
         return u''
 
     def item_description(self):
         return u''
 
+# no class decorators in python 2.5
+#UserFeed = factory_decorator(logged_in_or_basicauth())(UserFeed)
+
 
 @factory_decorator(logged_in_or_basicauth())
 
 @factory_decorator(logged_in_or_basicauth())
+@piwik_track
 class UserSetFeed(AcquisitionFeed):
     def link(self, tag):
         return tag.get_absolute_url()
 class UserSetFeed(AcquisitionFeed):
     def link(self, tag):
         return tag.get_absolute_url()
@@ -306,7 +313,10 @@ class UserSetFeed(AcquisitionFeed):
     def items(self, tag):
         return Book.tagged.with_any([tag])
 
     def items(self, tag):
         return Book.tagged.with_any([tag])
 
+# no class decorators in python 2.5
+#UserSetFeed = factory_decorator(logged_in_or_basicauth())(UserSetFeed)
 
 
+@piwik_track
 class SearchFeed(AcquisitionFeed):
     description = u"Wyniki wyszukiwania na stronie WolneLektury.pl"
     title = u"Wyniki wyszukiwania"
 class SearchFeed(AcquisitionFeed):
     description = u"Wyniki wyszukiwania na stronie WolneLektury.pl"
     title = u"Wyniki wyszukiwania"