[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/ View implementation of RSS. NB. Specification for RSS 2.0 is significantly different to PythonScript implementation. Support for UID if available still required.
Charlie Clark
charlie at begeistert.org
Mon Oct 4 11:40:58 EDT 2010
Log message for revision 117215:
View implementation of RSS. NB. Specification for RSS 2.0 is significantly different to PythonScript implementation. Support for UID if available still required.
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/browser/content/configure.zcml
A Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.pt
A Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/configure.zcml
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/configure.zcml 2010-10-04 12:15:01 UTC (rev 117214)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/configure.zcml 2010-10-04 15:40:57 UTC (rev 117215)
@@ -25,6 +25,15 @@
permission="cmf.ListFolderContents"
/>
+ <browser:page
+ for="Products.CMFCore.interfaces.ISyndicatable"
+ layer="Products.CMFDefault.interfaces.ICMFDefaultSkin"
+ name="rss.xml"
+ class=".rss.View"
+ template="rss.pt"
+ permission="zope2.View"
+ />
+
<adapter factory=".metadata.MinimalMetadataSchemaAdapter"/>
<browser:page
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.pt (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.pt 2010-10-04 15:40:57 UTC (rev 117215)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:tal="http://xml.zope.org/namespaces/tal"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <channel tal:define="channel view/channel">
+ <title tal:content="channel/title"></title>
+ <link tal:content="context/portal_url">/</link>
+ <lastBuildDate tal:content="channel/base"></lastBuildDate>
+ <ttl tal:content="channel/ttl"></ttl>
+ <docs>http://www.rssboard.org/rss-specification</docs>
+ <description tal:content="channel/description"></description>
+ <atom:link tal:attributes="href request/URL"
+ rel="self" type="application/rss+xml" />
+
+ <item tal:repeat="item view/items">
+ <title tal:content="item/title"></title>
+ <description tal:content="item/description"></description>
+ <link tal:content="item/url"></link>
+ <guid tal:condition="item/uid" tal:content="item/uid" ></guid>
+ <pubDate tal:content="item/date"></pubDate>
+ <dc:publisher
+ tal:condition="item/publisher"
+ tal:content="item/publisher">PUBLISHER</dc:publisher>
+ <dc:creator
+ tal:repeat="creator item/creators"
+ tal:content="creator">CREATOR</dc:creator>
+ <dc:rights
+ tal:condition="item/rights"
+ tal:content="item/rights">RIGHTS</dc:rights>
+ <dc:subject
+ tal:repeat="subject item/subjects"
+ tal:content="subject">SUBJECT</dc:subject>
+ </item>
+
+ </channel>
+</rss>
\ No newline at end of file
Added: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py (rev 0)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py 2010-10-04 15:40:57 UTC (rev 117215)
@@ -0,0 +1,68 @@
+##############################################################################
+#
+# Copyright (c) 2010 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""RSS view for syndicatable items"""
+
+from ZTUtils import LazyFilter
+
+from zope.component import getAdapter
+from zope.sequencesort.ssort import sort
+
+from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+
+from Products.CMFCore.interfaces import ISyndicationInfo
+from Products.CMFDefault.browser.utils import ViewBase, memoize, decode
+
+
+class View(ViewBase):
+
+ """Return an RSS conform list of content items"""
+
+ @property
+ @memoize
+ def synd_info(self):
+ return getAdapter(self.context, ISyndicationInfo).get_info()
+
+ @memoize
+ @decode
+ def items(self):
+ """Return items according to policy"""
+
+ stool = self._getTool("portal_syndication")
+ key, reverse = self.context.getDefaultSorting()
+ items = stool.getSyndicatableContent(self.context)
+ items = sort(items, ((key, 'cmp', reverse and 'desc' or 'asc'),))
+ items = LazyFilter(items, skip='View')
+ items = ({'title': o.Title(), 'description': o.Description(),
+ 'creators': o.listCreators(), 'subjects': o.Subject(),
+ 'rights': o.Rights, 'publisher': o.Publisher(),
+ 'url': o.absolute_url(), 'date': o.modified().rfc822(),
+ 'uid': None}
+ for idx, o in enumerate(items)
+ if idx < self.synd_info['max_items'])
+ return items
+
+ @memoize
+ @decode
+ def channel(self):
+ """Provide infomation about the channel"""
+ converter = {'daily':1, 'weekly':7, 'monthly': 30, 'yearly': 365}
+ ttl = 60 * 24 *(self.synd_info['frequency'] *
+ converter[self.synd_info['period']])
+
+ info = {'base': self.synd_info['base'].rfc822(),
+ 'ttl': ttl,
+ 'period': self.synd_info['period'],
+ 'title': self.context.Title(),
+ 'description': self.context.Description()
+ }
+ return info
Property changes on: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/rss.py
___________________________________________________________________
Added: svn:eol-style
+ native
More information about the checkins
mailing list