From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 9218E13800E for ; Mon, 30 Jul 2012 13:00:15 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 35B4FE02C4; Mon, 30 Jul 2012 12:59:27 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id EAC49E02C4 for ; Mon, 30 Jul 2012 12:59:26 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id F3DFD1B401E for ; Mon, 30 Jul 2012 12:59:25 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id C50EBE5443 for ; Mon, 30 Jul 2012 12:59:23 +0000 (UTC) From: "Slava Bacherikov" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Slava Bacherikov" Message-ID: <1343482252.d24e06bc575b9e6b6d71863848d64bd670c2c196.bacher09@gentoo> Subject: [gentoo-commits] proj/gentoo-packages:master commit in: gpackages/apps/packages/, gpackages/apps/generic/ X-VCS-Repository: proj/gentoo-packages X-VCS-Files: gpackages/apps/generic/views.py gpackages/apps/packages/urls.py gpackages/apps/packages/views.py X-VCS-Directories: gpackages/apps/packages/ gpackages/apps/generic/ X-VCS-Committer: bacher09 X-VCS-Committer-Name: Slava Bacherikov X-VCS-Revision: d24e06bc575b9e6b6d71863848d64bd670c2c196 X-VCS-Branch: master Date: Mon, 30 Jul 2012 12:59:23 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 35dfbf5b-5d57-4b30-9cf4-e8c8e958ac05 X-Archives-Hash: 0952bd557cef8d0cdf4b2e69cc312dbd commit: d24e06bc575b9e6b6d71863848d64bd670c2c196 Author: Slava Bacherikov bacher09 org> AuthorDate: Sat Jul 28 13:30:52 2012 +0000 Commit: Slava Bacherikov bacherikov org 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[a-z]*)/)?(?Prev/)?" + +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[^/]+)/$', 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