Commit 36a80afa authored by Nicolas Delaby's avatar Nicolas Delaby

Merge base_convertable_and_file and base_convertable into BaseConvertableFileMixin

Update path to new Mixin BaseConvertableFileMixin


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@35747 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 1bdbc9dc
...@@ -45,8 +45,7 @@ import cStringIO ...@@ -45,8 +45,7 @@ import cStringIO
# Mixin Import # Mixin Import
from Products.ERP5.mixin.cached_convertable import CachedConvertableMixin from Products.ERP5.mixin.cached_convertable import CachedConvertableMixin
from Products.ERP5.mixin.base_convertable import BaseConvertableMixin from Products.ERP5.mixin.base_convertable import BaseConvertableFileMixin
from Products.ERP5.mixin.base_convertable_and_file import BaseConvertableAndFileMixin
try: try:
from string import Template from string import Template
except ImportError: except ImportError:
...@@ -55,9 +54,8 @@ except ImportError: ...@@ -55,9 +54,8 @@ except ImportError:
DEFAULT_CONTENT_TYPE = 'text/html' DEFAULT_CONTENT_TYPE = 'text/html'
_MARKER = [] _MARKER = []
class TextDocument(BaseConvertableAndFileMixin, CachedConvertableMixin, class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin,
CachedConvertableMixin, BaseConvertableMixin, TextContent, TextContent, File):
File):
"""A TextDocument impletents IDocument, IFile, IBaseConvertable, ICachedconvertable """A TextDocument impletents IDocument, IFile, IBaseConvertable, ICachedconvertable
and ITextConvertable and ITextConvertable
""" """
......
...@@ -26,13 +26,23 @@ ...@@ -26,13 +26,23 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# #
############################################################################## ##############################################################################
from Products.ERP5Type.Base import WorkflowMethod from Products.CMFCore.utils import getToolByName
from AccessControl import ClassSecurityInfo from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
from OFS.Image import Pdata
from cStringIO import StringIO
_MARKER = []
class BaseConvertableMixin: class BaseConvertableFileMixin:
""" """
This class provides a generic implementation of IBaseConvertable. This class provides a generic implementation of IBaseConvertable.
This Mixin combine BaseConvertable and Files documents.
getBaseData is overrided to serialise Pdata into string
_setBaseData is overrided to wrapp data into Pdata
- updateBaseMetadata is not implemented in this mixin and must be
explicitely overrided if needed.
""" """
security = ClassSecurityInfo() security = ClassSecurityInfo()
...@@ -40,23 +50,28 @@ class BaseConvertableMixin: ...@@ -40,23 +50,28 @@ class BaseConvertableMixin:
security.declareProtected(Permissions.ModifyPortalContent, 'convertToBaseFormat') security.declareProtected(Permissions.ModifyPortalContent, 'convertToBaseFormat')
def convertToBaseFormat(self): def convertToBaseFormat(self):
""" """
1 - Check if convertable data is not empty.
2 - Call implementation of conversion to Base Format
3 - Call convertFile form processing_status_workflow
to inform user in case of failures by writing
error message in transition's comment.
""" """
if not self.hasData(): if not self.hasData():
# Empty document cannot be converted # Empty document cannot be converted
return return
try:
message = self._convertToBaseFormat() # Call implemetation method message = self._convertToBaseFormat() # Call implemetation method
if message is None: if message is None:
message = self.Base_translateString('Converted to ${mime_type}.', message = self.Base_translateString('Converted to ${mime_type}.',
mapping={'mime_type': self.getBaseContentType()}) mapping={'mime_type': self.getBaseContentType()})
# if processing_status_workflow is associated
workflow_tool = getToolByName(self.getPortalObject(), 'portal_workflow')
if workflow_tool.isTransitionPossible(self, 'convert_file'):
self.convertFile(comment=message) # Invoke workflow method self.convertFile(comment=message) # Invoke workflow method
except NotImplementedError:
message = ''
return message return message
security.declareProtected(Permissions.ModifyPortalContent, 'updateBaseMetadata') security.declareProtected(Permissions.ModifyPortalContent, 'updateBaseMetadata')
def updateBaseMetadata(self, **kw): def updateBaseMetadata(self, **kw):
""" """This Method must be defined explicitely.
""" """
raise NotImplementedError raise NotImplementedError
...@@ -67,3 +82,24 @@ class BaseConvertableMixin: ...@@ -67,3 +82,24 @@ class BaseConvertableMixin:
to processing_status_workflow like TempObject. to processing_status_workflow like TempObject.
""" """
convertFile = WorkflowMethod(convertFile) convertFile = WorkflowMethod(convertFile)
security.declareProtected(Permissions.AccessContentsInformation,
'getBaseData')
def getBaseData(self, default=_MARKER):
"""Serialise Pdata into string
"""
self._checkConversionFormatPermission(None)
if default is _MARKER:
base_data = self._baseGetBaseData()
else:
base_data = self._baseGetBaseData(default)
if base_data is None:
return None
else:
return str(base_data)
security.declareProtected(Permissions.ModifyPortalContent, '_setBaseData')
def _setBaseData(self, data):
"""Wrap value into Pdata
"""
# -*- coding: utf-8 -*-
##############################################################################
#
# Copyright (c) 2010 Nexedi SA and Contributors. All Rights Reserved.
# Nicolas Delaby <nicolas@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from AccessControl import ClassSecurityInfo
from Products.ERP5Type import Permissions
from OFS.Image import Pdata
import cStringIO
_MARKER = []
class BaseConvertableAndFileMixin:
security = ClassSecurityInfo()
security.declareProtected(Permissions.AccessContentsInformation,
'getBaseData')
def getBaseData(self, default=_MARKER):
"""return BaseData as str."""
if default is _MARKER:
base_data = self._baseGetBaseData()
else:
base_data = self._baseGetBaseData(default)
if base_data is None:
return None
else:
return str(base_data)
security.declareProtected(Permissions.ModifyPortalContent, '_setBaseData')
def _setBaseData(self, data):
"""
This is a method which combine base_convertable interface and File API
"""
if not isinstance(data, Pdata) and data is not None:
file = cStringIO.StringIO(data)
data, size = self._read_data(file)
self._baseSetBaseData(data)
...@@ -50,10 +50,8 @@ VALID_IMAGE_FORMAT_LIST, ConversionError, NotConvertedError ...@@ -50,10 +50,8 @@ VALID_IMAGE_FORMAT_LIST, ConversionError, NotConvertedError
from zLOG import LOG, ERROR from zLOG import LOG, ERROR
# Mixin Import # Mixin Import
from Products.ERP5.mixin.base_convertable import BaseConvertableMixin from Products.ERP5.mixin.base_convertable import BaseConvertableFileMixin
from Products.ERP5.mixin.text_convertable import TextConvertableMixin from Products.ERP5.mixin.text_convertable import TextConvertableMixin
from Products.ERP5.mixin.base_convertable_and_file import\
BaseConvertableAndFileMixin
enc=base64.encodestring enc=base64.encodestring
dec=base64.decodestring dec=base64.decodestring
...@@ -89,8 +87,8 @@ class TimeoutTransport(SafeTransport): ...@@ -89,8 +87,8 @@ class TimeoutTransport(SafeTransport):
return SafeTransport.make_connection(self, h) return SafeTransport.make_connection(self, h)
class OOoDocument(PermanentURLMixIn, BaseConvertableAndFileMixin, File, class OOoDocument(PermanentURLMixIn, BaseConvertableFileMixin, File,
BaseConvertableMixin, TextConvertableMixin, Document): TextConvertableMixin, Document):
""" """
A file document able to convert OOo compatible files to A file document able to convert OOo compatible files to
any OOo supported format, to capture metadata and to any OOo supported format, to capture metadata and to
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment