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
# Mixin Import
from Products.ERP5.mixin.cached_convertable import CachedConvertableMixin
from Products.ERP5.mixin.base_convertable import BaseConvertableMixin
from Products.ERP5.mixin.base_convertable_and_file import BaseConvertableAndFileMixin
from Products.ERP5.mixin.base_convertable import BaseConvertableFileMixin
try:
from string import Template
except ImportError:
......@@ -55,9 +54,8 @@ except ImportError:
DEFAULT_CONTENT_TYPE = 'text/html'
_MARKER = []
class TextDocument(BaseConvertableAndFileMixin, CachedConvertableMixin,
CachedConvertableMixin, BaseConvertableMixin, TextContent,
File):
class TextDocument(CachedConvertableMixin, BaseConvertableFileMixin,
TextContent, File):
"""A TextDocument impletents IDocument, IFile, IBaseConvertable, ICachedconvertable
and ITextConvertable
"""
......
......@@ -26,13 +26,23 @@
# 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 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 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()
......@@ -40,23 +50,28 @@ class BaseConvertableMixin:
security.declareProtected(Permissions.ModifyPortalContent, 'convertToBaseFormat')
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():
# Empty document cannot be converted
return
try:
message = self._convertToBaseFormat() # Call implemetation method
if message is None:
message = self.Base_translateString('Converted to ${mime_type}.',
mapping={'mime_type': self.getBaseContentType()})
message = self._convertToBaseFormat() # Call implemetation method
if message is None:
message = self.Base_translateString('Converted to ${mime_type}.',
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
except NotImplementedError:
message = ''
return message
security.declareProtected(Permissions.ModifyPortalContent, 'updateBaseMetadata')
def updateBaseMetadata(self, **kw):
"""
"""This Method must be defined explicitely.
"""
raise NotImplementedError
......@@ -67,3 +82,24 @@ class BaseConvertableMixin:
to processing_status_workflow like TempObject.
"""
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
from zLOG import LOG, ERROR
# 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.base_convertable_and_file import\
BaseConvertableAndFileMixin
enc=base64.encodestring
dec=base64.decodestring
......@@ -89,8 +87,8 @@ class TimeoutTransport(SafeTransport):
return SafeTransport.make_connection(self, h)
class OOoDocument(PermanentURLMixIn, BaseConvertableAndFileMixin, File,
BaseConvertableMixin, TextConvertableMixin, Document):
class OOoDocument(PermanentURLMixIn, BaseConvertableFileMixin, File,
TextConvertableMixin, Document):
"""
A file document able to convert OOo compatible files 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