web/views/xmlrss.py
changeset 2058 7ef12c03447c
parent 1977 606923dff11b
child 2234 1fbcf202882d
equal deleted inserted replaced
2057:0a0cbccafcb5 2058:7ef12c03447c
    11 from time import timezone
    11 from time import timezone
    12 
    12 
    13 from logilab.mtconverter import xml_escape
    13 from logilab.mtconverter import xml_escape
    14 
    14 
    15 from cubicweb.selectors import non_final_entity, one_line_rset, appobject_selectable
    15 from cubicweb.selectors import non_final_entity, one_line_rset, appobject_selectable
    16 from cubicweb.view import EntityView, AnyRsetView
    16 from cubicweb.view import EntityView, AnyRsetView, Component
    17 from cubicweb.web.httpcache import MaxAgeHTTPCacheManager
       
    18 from cubicweb.web.component import Component
       
    19 from cubicweb.web.box import BoxTemplate
       
    20 from cubicweb.common.uilib import simple_sgml_tag
    17 from cubicweb.common.uilib import simple_sgml_tag
       
    18 from cubicweb.web import httpcache, box
    21 
    19 
    22 
    20 
    23 # base xml views ##############################################################
    21 # base xml views ##############################################################
    24 
    22 
    25 class XMLView(EntityView):
    23 class XMLView(EntityView):
   120 
   118 
   121     def feed_url(self):
   119     def feed_url(self):
   122         return self.entity(0, 0).rss_feed_url()
   120         return self.entity(0, 0).rss_feed_url()
   123 
   121 
   124 
   122 
   125 class RSSIconBox(BoxTemplate):
   123 class RSSIconBox(box.BoxTemplate):
   126     """just display the RSS icon on uniform result set"""
   124     """just display the RSS icon on uniform result set"""
   127     id = 'rss'
   125     id = 'rss'
   128     __select__ = (BoxTemplate.__select__
   126     __select__ = (box.BoxTemplate.__select__
   129                   & appobject_selectable('components', 'rss_feed_url'))
   127                   & appobject_selectable('components', 'rss_feed_url'))
   130 
   128 
   131     visible = False
   129     visible = False
   132     order = 999
   130     order = 999
   133 
   131 
   135         try:
   133         try:
   136             rss = self.req.external_resource('RSS_LOGO')
   134             rss = self.req.external_resource('RSS_LOGO')
   137         except KeyError:
   135         except KeyError:
   138             self.error('missing RSS_LOGO external resource')
   136             self.error('missing RSS_LOGO external resource')
   139             return
   137             return
   140         urlgetter = self.vreg.select_component('rss_feed_url', self.req, self.rset)
   138         urlgetter = self.vreg.select('components', 'rss_feed_url',
       
   139                                      self.req, rset=self.rset)
   141         url = urlgetter.feed_url()
   140         url = urlgetter.feed_url()
   142         self.w(u'<a href="%s"><img src="%s" alt="rss"/></a>\n' % (xml_escape(url), rss))
   141         self.w(u'<a href="%s"><img src="%s" alt="rss"/></a>\n' % (xml_escape(url), rss))
   143 
   142 
   144 
   143 
   145 class RSSView(XMLView):
   144 class RSSView(XMLView):
   146     id = 'rss'
   145     id = 'rss'
   147     title = _('rss')
   146     title = _('rss')
   148     templatable = False
   147     templatable = False
   149     content_type = 'text/xml'
   148     content_type = 'text/xml'
   150     http_cache_manager = MaxAgeHTTPCacheManager
   149     http_cache_manager = httpcache.MaxAgeHTTPCacheManager
   151     cache_max_age = 60*60*2 # stay in http cache for 2 hours by default
   150     cache_max_age = 60*60*2 # stay in http cache for 2 hours by default
   152 
   151 
   153     def _open(self):
   152     def _open(self):
   154         req = self.req
   153         req = self.req
   155         self.w(u'<?xml version="1.0" encoding="%s"?>\n' % req.encoding)
   154         self.w(u'<?xml version="1.0" encoding="%s"?>\n' % req.encoding)