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): |