web/views/xmlrss.py
branchtls-sprint
changeset 1550 8260e857822b
parent 1477 b056a49c16dc
child 1652 ba0a6b4d04f7
equal deleted inserted replaced
1549:f87561822e27 1550:8260e857822b
   153     def _open(self):
   153     def _open(self):
   154         req = self.req
   154         req = self.req
   155         self.w(u'<?xml version="1.0" encoding="%s"?>\n' % req.encoding)
   155         self.w(u'<?xml version="1.0" encoding="%s"?>\n' % req.encoding)
   156         self.w(u'<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">\n')
   156         self.w(u'<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">\n')
   157         self.w(u'  <channel>\n')
   157         self.w(u'  <channel>\n')
   158         self.w(u'    <title>%s RSS Feed</title>\n' % html_escape(self.page_title()))
   158         self.w(u'    <title>%s RSS Feed</title>\n' % xml_escape(self.page_title()))
   159         self.w(u'    <description>%s</description>\n' % html_escape(req.form.get('vtitle', '')))
   159         self.w(u'    <description>%s</description>\n' % xml_escape(req.form.get('vtitle', '')))
   160         params = req.form.copy()
   160         params = req.form.copy()
   161         params.pop('vid', None)
   161         params.pop('vid', None)
   162         self.w(u'    <link>%s</link>\n' % html_escape(self.build_url(**params)))
   162         self.w(u'    <link>%s</link>\n' % xml_escape(self.build_url(**params)))
   163 
   163 
   164     def _close(self):
   164     def _close(self):
   165         self.w(u'  </channel>\n')
   165         self.w(u'  </channel>\n')
   166         self.w(u'</rss>')
   166         self.w(u'</rss>')
   167 
   167 
   173         self._close()
   173         self._close()
   174 
   174 
   175     def cell_call(self, row, col):
   175     def cell_call(self, row, col):
   176         self.wview('rssitem', self.rset, row=row, col=col)
   176         self.wview('rssitem', self.rset, row=row, col=col)
   177 
   177 
       
   178 
   178 class RssItemView(EntityView):
   179 class RssItemView(EntityView):
   179     id = 'rssitem'
   180     id = 'rssitem'
   180     date_format = '%%Y-%%m-%%dT%%H:%%M%+03i:00' % (timezone / 3600)
   181     date_format = '%%Y-%%m-%%dT%%H:%%M%+03i:00' % (timezone / 3600)
   181     add_div_section = False
   182     add_div_section = False
   182 
   183 
   183     def cell_call(self, row, col):
   184     def cell_call(self, row, col):
   184         entity = self.complete_entity(row, col)
   185         entity = self.complete_entity(row, col)
   185         self.w(u'<item>\n')
   186         self.w(u'<item>\n')
   186         self.w(u'<guid isPermaLink="true">%s</guid>\n' % html_escape(entity.absolute_url()))
   187         self.w(u'<guid isPermaLink="true">%s</guid>\n' % xml_escape(entity.absolute_url()))
   187         self.render_title_link(entity)
   188         self.render_title_link(entity)
   188         self._marker('description', html_escape(entity.dc_description()))
   189         self._marker('description', xml_escape(entity.dc_description()))
   189         self._marker('dc:date', entity.dc_date(self.date_format))
   190         self._marker('dc:date', entity.dc_date(self.date_format))
   190         self.render_entity_creator(entity)
   191         self.render_entity_creator(entity)
   191         self.w(u'</item>\n')
   192         self.w(u'</item>\n')
   192 
   193 
   193     def render_title_link(self, entity):
   194     def render_title_link(self, entity):
   199             self._marker('dc:creator', entity.dc_creator())
   200             self._marker('dc:creator', entity.dc_creator())
   200 
   201 
   201 
   202 
   202     def _marker(self, marker, value):
   203     def _marker(self, marker, value):
   203         if value:
   204         if value:
   204             self.w(u'  <%s>%s</%s>\n' % (marker, html_escape(value), marker))
   205             self.w(u'  <%s>%s</%s>\n' % (marker, xml_escape(value), marker))