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, 30 Jul 2012 12:59:23 +0000 (UTC)	[thread overview]
Message-ID: <1343482252.d24e06bc575b9e6b6d71863848d64bd670c2c196.bacher09@gentoo> (raw)

commit:     d24e06bc575b9e6b6d71863848d64bd670c2c196
Author:     Slava Bacherikov <slava <AT> bacher09 <DOT> org>
AuthorDate: Sat Jul 28 13:30:52 2012 +0000
Commit:     Slava Bacherikov <slava <AT> bacherikov <DOT> org <DOT> ua>
CommitDate: Sat Jul 28 13:30:52 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/gentoo-packages.git;a=commit;h=d24e06bc

Add atom feed with right updated datetime

---
 gpackages/apps/generic/views.py  |   27 +++++++++++++++++++++++++++
 gpackages/apps/packages/urls.py  |    3 ++-
 gpackages/apps/packages/views.py |   14 +++++++++++---
 3 files changed, 40 insertions(+), 4 deletions(-)

diff --git a/gpackages/apps/generic/views.py b/gpackages/apps/generic/views.py
index 08bf734..165633d 100644
--- a/gpackages/apps/generic/views.py
+++ b/gpackages/apps/generic/views.py
@@ -1,6 +1,10 @@
 from django.views.generic import TemplateView, ListView
 from string import Template
 import re
+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
 
 class ContextView(object):
     extra_context = {}
@@ -135,4 +139,27 @@ class MultipleFilterListViewMixin(object):
             l.append(t.format(re.escape(key)))
 
         return ''.join(l) + "(?:order/(?P<order>[a-z]*)/)?(?P<rev>rev/)?"
+
+class FeedWithUpdated(Feed):
+    def item_extra_kwargs(self, item):
+        # for future
+        kwargs = super(FeedWithUpdated, self).item_extra_kwargs(item)
+        # hack for access to private method !!!
+        updated = self._Feed__get_dynamic_attr('item_update', item)
+        if updated and is_naive(updated):
+            ltz = tzinfo.LocalTimezone(updated)
+            updated = updated.replace(tzinfo=ltz)
+        kwargs['updated'] = updated
+        return kwargs
             
+# see bug https://code.djangoproject.com/ticket/14656
+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'))
+            item['pubdate'] = None
+
+        if item['updated'] is not None:
+            handler.addQuickElement(u"updated", rfc3339_date(item['updated']).decode('utf-8'))
+
+        return super(RightAtom1Feed, self).add_item_elements(handler, item)

diff --git a/gpackages/apps/packages/urls.py b/gpackages/apps/packages/urls.py
index 4a04940..1a59669 100644
--- a/gpackages/apps/packages/urls.py
+++ b/gpackages/apps/packages/urls.py
@@ -5,7 +5,7 @@ from views import CategoriesListView, HerdsListView, MaintainersListView, \
                   GlobalUseListView, NewsListView, NewsDetailView, \
                   LicenseDetailView, ArchChoiceView, LicensesListView, \
                   LocalUseListView, FilteringView, RepoDetailView, \
-                  MainPageFeed
+                  MainPageFeed, MainPageFeedAtom
 
 urlpatterns = patterns('',
     url(r'^categories/$', CategoriesListView.as_view(), name = 'categories'),
@@ -33,4 +33,5 @@ urlpatterns = patterns('',
     url(r'^filter/$', FilteringView.as_view(), name = 'filter'),
     url(r'^repository/(?P<slug>[^/]+)/$', RepoDetailView.as_view(), name = 'repository'),
     url(r'^rss/$', MainPageFeed()),
+    url(r'^atom/$', MainPageFeedAtom()),
 )

diff --git a/gpackages/apps/packages/views.py b/gpackages/apps/packages/views.py
index 5fdde7b..78ed365 100644
--- a/gpackages/apps/packages/views.py
+++ b/gpackages/apps/packages/views.py
@@ -1,6 +1,8 @@
 from django.views.generic import DetailView, FormView, ListView
 from generic.views import ContextListView, ContextTemplateView, ContextView, \
-                          MultipleFilterListViewMixin
+                          MultipleFilterListViewMixin, RightAtom1Feed, \
+                          FeedWithUpdated
+
 from .models import CategoryModel, HerdsModel, MaintainerModel, \
                     RepositoryModel, LicenseGroupModel, EbuildModel, \
                     PackageModel, UseFlagModel, PortageNewsModel, \
@@ -10,7 +12,6 @@ from django.core.urlresolvers import reverse
 
 from django.shortcuts import get_object_or_404
 from package_info.parse_cp import EbuildParseCPVR, PackageParseCPR
-from django.contrib.syndication.views import Feed
 
 arches = ['alpha', 'amd64', 'arm', 'hppa', 'ia64', 'ppc', 'ppc64', 'sparc', 'x86']
 
@@ -254,7 +255,7 @@ class RepoDetailView(DetailView):
     slug_field = 'name'
     queryset = RepositoryModel.objects.all()
 
-class MainPageFeed(Feed):
+class MainPageFeed(FeedWithUpdated):
     title = 'Feed'
     link = '/rss/'
     description = 'Descr'
@@ -270,3 +271,10 @@ class MainPageFeed(Feed):
 
     def item_pubdate(self, item):
         return item.created_datetime
+
+    def item_update(self, item):
+        return item.updated_datetime
+
+class MainPageFeedAtom(MainPageFeed):
+    link = '/atom/'
+    feed_type = RightAtom1Feed


             reply	other threads:[~2012-07-30 13:00 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-30 12:59 Slava Bacherikov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-08-27 21:19 [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=1343482252.d24e06bc575b9e6b6d71863848d64bd670c2c196.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