web/views/idownloadable.py
changeset 11057 0b59724cb3f2
parent 11052 058bb3dc685f
child 11058 23eb30449fe5
--- a/web/views/idownloadable.py	Mon Jan 04 18:40:30 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,203 +0,0 @@
-# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
-# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
-#
-# This file is part of CubicWeb.
-#
-# CubicWeb is free software: you can redistribute it and/or modify it under the
-# terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation, either version 2.1 of the License, or (at your option)
-# any later version.
-#
-# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Lesser General Public License along
-# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
-"""
-Specific views for entities adapting to IDownloadable
-=====================================================
-"""
-__docformat__ = "restructuredtext en"
-from cubicweb import _
-
-from six.moves import range
-
-from logilab.mtconverter import BINARY_ENCODINGS, TransformError, xml_escape
-from logilab.common.deprecation import class_renamed, deprecated
-
-from cubicweb import tags
-from cubicweb.view import EntityView
-from cubicweb.predicates import (one_line_rset, is_instance, match_context_prop,
-                                 adaptable, has_mimetype)
-from cubicweb.mttransforms import ENGINE
-from cubicweb.web import component, httpcache
-from cubicweb.web.views import primary, baseviews
-
-
-class DownloadBox(component.EntityCtxComponent):
-    """add download box"""
-    __regid__ = 'download_box'    # no download box for images
-    __select__ = (component.EntityCtxComponent.__select__ &
-                  adaptable('IDownloadable') & ~has_mimetype('image/'))
-
-    order = 10
-    title = _('download')
-
-    def init_rendering(self):
-        self.items = [self.entity]
-
-    def render_body(self, w):
-        for item in self.items:
-            idownloadable = item.cw_adapt_to('IDownloadable')
-            w(u'<a href="%s"><img src="%s" alt="%s"/> %s</a>'
-              % (xml_escape(idownloadable.download_url()),
-                 self._cw.uiprops['DOWNLOAD_ICON'],
-                 self._cw._('download icon'),
-                 xml_escape(idownloadable.download_file_name())))
-
-
-class DownloadView(EntityView):
-    """download view
-
-    this view is replacing the deprecated 'download' controller and allow
-    downloading of entities providing the necessary interface
-    """
-    __regid__ = 'download'
-    __select__ = one_line_rset() & adaptable('IDownloadable')
-
-    templatable = False
-    content_type = 'application/octet-stream'
-    binary = True
-    http_cache_manager = httpcache.EntityHTTPCacheManager
-    add_to_breadcrumbs = False
-
-    def set_request_content_type(self):
-        """overriden to set the correct filetype and filename"""
-        entity = self.cw_rset.complete_entity(self.cw_row or 0, self.cw_col or 0)
-        adapter = entity.cw_adapt_to('IDownloadable')
-        encoding = adapter.download_encoding()
-        if encoding in BINARY_ENCODINGS:
-            contenttype = 'application/%s' % encoding
-            encoding = None
-        else:
-            contenttype = adapter.download_content_type()
-        self._cw.set_content_type(contenttype or self.content_type,
-                                  filename=adapter.download_file_name(),
-                                  encoding=encoding,
-                                  disposition='attachment')
-
-    def call(self):
-        entity = self.cw_rset.complete_entity(self.cw_row or 0, self.cw_col or 0)
-        adapter = entity.cw_adapt_to('IDownloadable')
-        self.w(adapter.download_data())
-
-    def last_modified(self):
-        return self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0).modification_date
-
-
-class DownloadLinkView(EntityView):
-    """view displaying a link to download the file"""
-    __regid__ = 'downloadlink'
-    __select__ = adaptable('IDownloadable')
-    title = None # should not be listed in possible views
-
-
-    def cell_call(self, row, col, title=None, **kwargs):
-        entity = self.cw_rset.get_entity(row, col)
-        url = xml_escape(entity.cw_adapt_to('IDownloadable').download_url())
-        self.w(u'<a href="%s">%s</a>' % (url, xml_escape(title or entity.dc_title())))
-
-
-class IDownloadablePrimaryView(primary.PrimaryView):
-    __select__ = adaptable('IDownloadable')
-
-    def render_entity_attributes(self, entity):
-        self.w(u'<div class="content">')
-        adapter = entity.cw_adapt_to('IDownloadable')
-        contenttype = adapter.download_content_type()
-        if contenttype.startswith('image/'):
-            self._cw.add_js('cubicweb.image.js')
-            self.wview('image', entity.cw_rset, row=entity.cw_row, col=entity.cw_col,
-                       link=True, klass='contentimage')
-            super(IDownloadablePrimaryView, self).render_entity_attributes(entity)
-        elif contenttype.endswith('html'):
-            self.wview('downloadlink', entity.cw_rset, title=self._cw._('download'), row=entity.cw_row)
-            self.wview('ehtml', entity.cw_rset, row=entity.cw_row, col=entity.cw_col,
-                       height='600px', width='100%')
-        else:
-            super(IDownloadablePrimaryView, self).render_entity_attributes(entity)
-            self.wview('downloadlink', entity.cw_rset, title=self._cw._('download'), row=entity.cw_row)
-            self.render_data(entity, contenttype, 'text/html')
-        self.w(u'</div>')
-
-    def render_data(self, entity, sourcemt, targetmt):
-        adapter = entity.cw_adapt_to('IDownloadable')
-        if ENGINE.find_path(sourcemt, targetmt):
-            try:
-                self.w(entity._cw_mtc_transform(adapter.download_data(), sourcemt,
-                                                targetmt, adapter.download_encoding()))
-            except Exception as ex:
-                self.exception('while rendering data for %s', entity)
-                msg = self._cw._("can't display data, unexpected error: %s") \
-                      % xml_escape(unicode(ex))
-                self.w('<div class="error">%s</div>' % msg)
-            return True
-        return False
-
-
-class IDownloadableOneLineView(baseviews.OneLineView):
-    __select__ = adaptable('IDownloadable')
-
-    def cell_call(self, row, col, title=None, **kwargs):
-        """the oneline view is a link to download the file"""
-        entity = self.cw_rset.get_entity(row, col)
-        url = xml_escape(entity.absolute_url())
-        adapter = entity.cw_adapt_to('IDownloadable')
-        name = xml_escape(title or entity.dc_title())
-        durl = xml_escape(adapter.download_url())
-        self.w(u'<a href="%s">%s</a> [<a href="%s">%s</a>]' %
-               (url, name, durl, self._cw._('download')))
-
-
-class AbstractEmbeddedView(EntityView):
-    __abstract__ = True
-
-    _embedding_tag = None
-
-    def call(self, **kwargs):
-        rset = self.cw_rset
-        for i in range(len(rset)):
-            self.w(u'<div class="efile">')
-            self.wview(self.__regid__, rset, row=i, col=0, **kwargs)
-            self.w(u'</div>')
-
-    def cell_call(self, row, col, link=False, **kwargs):
-        entity = self.cw_rset.get_entity(row, col)
-        adapter = entity.cw_adapt_to('IDownloadable')
-        tag = self._embedding_tag(src=adapter.download_url(), # pylint: disable=E1102
-                                  alt=(self._cw._('download %s') % adapter.download_file_name()),
-                                  **kwargs)
-        if link:
-            self.w(u'<a href="%s">%s</a>' % (adapter.download_url(), tag))
-        else:
-            self.w(tag)
-
-
-class ImageView(AbstractEmbeddedView):
-    """image embedded view"""
-    __regid__ = 'image'
-    __select__ = has_mimetype('image/')
-
-    title = _('image')
-    _embedding_tag = tags.img
-
-
-class EHTMLView(AbstractEmbeddedView):
-    """html embedded view"""
-    __regid__ = 'ehtml'
-    __select__ = has_mimetype('text/html')
-
-    title = _('embedded html')
-    _embedding_tag = tags.iframe