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
next 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