web/views/xmlrss.py
changeset 5556 9ab2b4c74baf
parent 5467 57372dbfd114
child 5569 cb14af012a96
equal deleted inserted replaced
5555:a64f48dd5fe4 5556:9ab2b4c74baf
    13 # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
    13 # FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
    14 # details.
    14 # details.
    15 #
    15 #
    16 # You should have received a copy of the GNU Lesser General Public License along
    16 # You should have received a copy of the GNU Lesser General Public License along
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    17 # with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
    18 """base xml and rss views
    18 """base xml and rss views"""
    19 
    19 
    20 """
       
    21 __docformat__ = "restructuredtext en"
    20 __docformat__ = "restructuredtext en"
    22 _ = unicode
    21 _ = unicode
    23 
    22 
    24 from time import timezone
    23 from time import timezone
    25 
    24 
    26 from logilab.mtconverter import xml_escape
    25 from logilab.mtconverter import xml_escape
    27 
    26 
    28 from cubicweb.selectors import non_final_entity, one_line_rset, appobject_selectable
    27 from cubicweb.selectors import (implements, non_final_entity, one_line_rset,
    29 from cubicweb.view import EntityView, AnyRsetView, Component
    28                                 appobject_selectable, adaptable)
       
    29 from cubicweb.view import EntityView, EntityAdapter, AnyRsetView, Component
       
    30 from cubicweb.view import implements_adapter_compat
    30 from cubicweb.uilib import simple_sgml_tag
    31 from cubicweb.uilib import simple_sgml_tag
    31 from cubicweb.web import httpcache, box
    32 from cubicweb.web import httpcache, box
    32 
    33 
    33 
    34 
    34 # base xml views ##############################################################
    35 # base xml views ##############################################################
   118         w(u'</%s>\n' % self.xml_root)
   119         w(u'</%s>\n' % self.xml_root)
   119 
   120 
   120 
   121 
   121 # RSS stuff ###################################################################
   122 # RSS stuff ###################################################################
   122 
   123 
       
   124 class IFeedAdapter(EntityAdapter):
       
   125     __regid__ = 'IFeed'
       
   126     __select__ = implements('Any')
       
   127 
       
   128     @implements_adapter_compat('IFeed')
       
   129     def rss_feed_url(self):
       
   130         """return an url to the rss feed for this entity"""
       
   131         return self.absolute_url(vid='rss')
       
   132 
       
   133 
   123 class RSSFeedURL(Component):
   134 class RSSFeedURL(Component):
   124     __regid__ = 'rss_feed_url'
   135     __regid__ = 'rss_feed_url'
   125     __select__ = non_final_entity()
   136     __select__ = non_final_entity()
   126 
   137 
   127     def feed_url(self):
   138     def feed_url(self):
   128         return self._cw.build_url(rql=self.cw_rset.limited_rql(), vid='rss')
   139         return self._cw.build_url(rql=self.cw_rset.limited_rql(), vid='rss')
   129 
   140 
   130 
   141 
   131 class RSSEntityFeedURL(Component):
   142 class RSSEntityFeedURL(Component):
   132     __regid__ = 'rss_feed_url'
   143     __regid__ = 'rss_feed_url'
   133     __select__ = non_final_entity() & one_line_rset()
   144     __select__ = one_line_rset() & adaptable('IFeed')
   134 
   145 
   135     def feed_url(self):
   146     def feed_url(self):
   136         return self.cw_rset.get_entity(0, 0).rss_feed_url()
   147         entity = self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0)
       
   148         return entity.cw_adapt_to('IFeed').rss_feed_url()
   137 
   149 
   138 
   150 
   139 class RSSIconBox(box.BoxTemplate):
   151 class RSSIconBox(box.BoxTemplate):
   140     """just display the RSS icon on uniform result set"""
   152     """just display the RSS icon on uniform result set"""
   141     __regid__ = 'rss'
   153     __regid__ = 'rss'