web/views/xmlrss.py
changeset 3377 dd9d292b6a6d
parent 3185 bd0126d17e83
child 3451 6b46d73823f5
equal deleted inserted replaced
3376:f5c69485381f 3377:dd9d292b6a6d
    20 
    20 
    21 # base xml views ##############################################################
    21 # base xml views ##############################################################
    22 
    22 
    23 class XMLView(EntityView):
    23 class XMLView(EntityView):
    24     """xml view for entities"""
    24     """xml view for entities"""
    25     id = 'xml'
    25     __regid__ = 'xml'
    26     title = _('xml')
    26     title = _('xml')
    27     templatable = False
    27     templatable = False
    28     content_type = 'text/xml'
    28     content_type = 'text/xml'
    29     xml_root = 'rset'
    29     xml_root = 'rset'
    30     item_vid = 'xmlitem'
    30     item_vid = 'xmlitem'
    40             self.cell_call(i, 0)
    40             self.cell_call(i, 0)
    41         self.w(u'</%s>\n' % self.xml_root)
    41         self.w(u'</%s>\n' % self.xml_root)
    42 
    42 
    43 
    43 
    44 class XMLItemView(EntityView):
    44 class XMLItemView(EntityView):
    45     id = 'xmlitem'
    45     __regid__ = 'xmlitem'
    46 
    46 
    47     def cell_call(self, row, col):
    47     def cell_call(self, row, col):
    48         """ element as an item for an xml feed """
    48         """ element as an item for an xml feed """
    49         entity = self.complete_entity(row, col)
    49         entity = self.complete_entity(row, col)
    50         self.w(u'<%s>\n' % (entity.e_schema))
    50         self.w(u'<%s>\n' % (entity.e_schema))
    65         self.w(u'</%s>\n' % (entity.e_schema))
    65         self.w(u'</%s>\n' % (entity.e_schema))
    66 
    66 
    67 
    67 
    68 class XMLRsetView(AnyRsetView):
    68 class XMLRsetView(AnyRsetView):
    69     """dumps raw rset as xml"""
    69     """dumps raw rset as xml"""
    70     id = 'rsetxml'
    70     __regid__ = 'rsetxml'
    71     title = _('xml export')
    71     title = _('xml export')
    72     templatable = False
    72     templatable = False
    73     content_type = 'text/xml'
    73     content_type = 'text/xml'
    74     xml_root = 'rset'
    74     xml_root = 'rset'
    75 
    75 
   103 
   103 
   104 
   104 
   105 # RSS stuff ###################################################################
   105 # RSS stuff ###################################################################
   106 
   106 
   107 class RSSFeedURL(Component):
   107 class RSSFeedURL(Component):
   108     id = 'rss_feed_url'
   108     __regid__ = 'rss_feed_url'
   109     __select__ = non_final_entity()
   109     __select__ = non_final_entity()
   110 
   110 
   111     def feed_url(self):
   111     def feed_url(self):
   112         return self.build_url(rql=self.limited_rql(), vid='rss')
   112         return self.build_url(rql=self.limited_rql(), vid='rss')
   113 
   113 
   114 
   114 
   115 class RSSEntityFeedURL(Component):
   115 class RSSEntityFeedURL(Component):
   116     id = 'rss_feed_url'
   116     __regid__ = 'rss_feed_url'
   117     __select__ = non_final_entity() & one_line_rset()
   117     __select__ = non_final_entity() & one_line_rset()
   118 
   118 
   119     def feed_url(self):
   119     def feed_url(self):
   120         return self.rset.get_entity(0, 0).rss_feed_url()
   120         return self.rset.get_entity(0, 0).rss_feed_url()
   121 
   121 
   122 
   122 
   123 class RSSIconBox(box.BoxTemplate):
   123 class RSSIconBox(box.BoxTemplate):
   124     """just display the RSS icon on uniform result set"""
   124     """just display the RSS icon on uniform result set"""
   125     id = 'rss'
   125     __regid__ = 'rss'
   126     __select__ = (box.BoxTemplate.__select__
   126     __select__ = (box.BoxTemplate.__select__
   127                   & appobject_selectable('components', 'rss_feed_url'))
   127                   & appobject_selectable('components', 'rss_feed_url'))
   128 
   128 
   129     visible = False
   129     visible = False
   130     order = 999
   130     order = 999
   140         url = urlgetter.feed_url()
   140         url = urlgetter.feed_url()
   141         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))
   142 
   142 
   143 
   143 
   144 class RSSView(XMLView):
   144 class RSSView(XMLView):
   145     id = 'rss'
   145     __regid__ = 'rss'
   146     title = _('rss')
   146     title = _('rss')
   147     templatable = False
   147     templatable = False
   148     content_type = 'text/xml'
   148     content_type = 'text/xml'
   149     http_cache_manager = httpcache.MaxAgeHTTPCacheManager
   149     http_cache_manager = httpcache.MaxAgeHTTPCacheManager
   150     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
   176     def cell_call(self, row, col):
   176     def cell_call(self, row, col):
   177         self.wview('rssitem', self.rset, row=row, col=col)
   177         self.wview('rssitem', self.rset, row=row, col=col)
   178 
   178 
   179 
   179 
   180 class RSSItemView(EntityView):
   180 class RSSItemView(EntityView):
   181     id = 'rssitem'
   181     __regid__ = 'rssitem'
   182     date_format = '%%Y-%%m-%%dT%%H:%%M%+03i:00' % (timezone / 3600)
   182     date_format = '%%Y-%%m-%%dT%%H:%%M%+03i:00' % (timezone / 3600)
   183     add_div_section = False
   183     add_div_section = False
   184 
   184 
   185     def cell_call(self, row, col):
   185     def cell_call(self, row, col):
   186         entity = self.complete_entity(row, col)
   186         entity = self.complete_entity(row, col)