web/views/idownloadable.py
changeset 5714 04a8e48f10bc
parent 5556 9ab2b4c74baf
child 5868 c4380d8cfc25
equal deleted inserted replaced
5713:605f571198eb 5714:04a8e48f10bc
   114         contenttype = adapter.download_content_type()
   114         contenttype = adapter.download_content_type()
   115         if contenttype.startswith('image/'):
   115         if contenttype.startswith('image/'):
   116             self.wview('image', entity.cw_rset, row=entity.cw_row)
   116             self.wview('image', entity.cw_rset, row=entity.cw_row)
   117         else:
   117         else:
   118             self.wview('downloadlink', entity.cw_rset, title=self._cw._('download'), row=entity.cw_row)
   118             self.wview('downloadlink', entity.cw_rset, title=self._cw._('download'), row=entity.cw_row)
   119             try:
   119             self.render_data(entity, contenttype, 'text/html')
   120                 if ENGINE.has_input(contenttype):
       
   121                     # XXX expect File like schema (access to 'data' attribute)
       
   122                     self.w(entity.printable_value('data'))
       
   123             except TransformError:
       
   124                 pass
       
   125             except Exception, ex:
       
   126                 msg = self._cw._("can't display data, unexpected error: %s") \
       
   127                       % xml_escape(str(ex))
       
   128                 self.w('<div class="error">%s</div>' % msg)
       
   129         self.w(u'</div>')
   120         self.w(u'</div>')
   130 
   121 
       
   122     def render_data(self, entity, sourcemt, targetmt):
       
   123         adapter = entity.cw_adapt_to('IDownloadable')
       
   124         if ENGINE.find_path(sourcemt, targetmt):
       
   125             try:
       
   126                 self.w(entity._cw_mtc_transform(adapter.download_data(), sourcemt,
       
   127                                                 targetmt, adapter.download_encoding()))
       
   128             except Exception, ex:
       
   129                 self.exception('while rendering data for %s', entity)
       
   130                 msg = self._cw._("can't display data, unexpected error: %s") \
       
   131                       % xml_escape(unicode(ex))
       
   132                 self.w('<div class="error">%s</div>' % msg)
       
   133             return True
       
   134         return False
   131 
   135 
   132 class IDownloadableLineView(baseviews.OneLineView):
   136 class IDownloadableLineView(baseviews.OneLineView):
   133     __select__ = adaptable('IDownloadable')
   137     __select__ = adaptable('IDownloadable')
   134 
   138 
   135     def cell_call(self, row, col, title=None, **kwargs):
   139     def cell_call(self, row, col, title=None, **kwargs):