Performance improvement in XML marshaller by mimicking StringIO in unicode-friendly buffer UnicodeBuffer and added a class appy.gen.No allowing to explain why some workflow condition cannot be triggered.

This commit is contained in:
Gaetan Delannay 2010-02-05 15:39:52 +01:00
parent 50619f28c0
commit d398d5bcfc
4 changed files with 20 additions and 7 deletions

View file

@ -581,6 +581,17 @@ class Permission:
class ReadPermission(Permission): pass class ReadPermission(Permission): pass
class WritePermission(Permission): pass class WritePermission(Permission): pass
class No:
'''When you write a workflow condition method and you want to return False
but you want to give to the user some explanations about why a transition
can't be triggered, do not return False, return an instance of No
instead. When creating such an instance, you can specify an error
message.'''
def __init__(self, msg):
self.msg = msg
def __nonzero__(self):
return False
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
class Selection: class Selection:
'''Instances of this class may be given as validator of a String, in order '''Instances of this class may be given as validator of a String, in order

View file

@ -3,6 +3,8 @@ import os, os.path, time, unicodedata
from appy.shared import mimeTypes from appy.shared import mimeTypes
from appy.gen.plone25.mixins import AbstractMixin from appy.gen.plone25.mixins import AbstractMixin
from StringIO import StringIO from StringIO import StringIO
import appy.pod
from appy.pod.renderer import Renderer
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
class PodError(Exception): pass class PodError(Exception): pass
@ -81,8 +83,6 @@ class PodTemplateMixin(AbstractMixin):
if appySelf.tool.openOfficePort: if appySelf.tool.openOfficePort:
rendererParams['ooPort'] = appySelf.tool.openOfficePort rendererParams['ooPort'] = appySelf.tool.openOfficePort
# Launch the renderer # Launch the renderer
import appy.pod
from appy.pod.renderer import Renderer
try: try:
renderer = Renderer(**rendererParams) renderer = Renderer(**rendererParams)
renderer.run() renderer.run()

View file

@ -41,15 +41,17 @@ class UnicodeBuffer:
'''With StringIO class, I have tons of encoding problems. So I define a '''With StringIO class, I have tons of encoding problems. So I define a
similar class here, that uses an internal unicode buffer.''' similar class here, that uses an internal unicode buffer.'''
def __init__(self): def __init__(self):
self.buffer = u'' self.buffer = []
def write(self, s): def write(self, s):
if s == None: return if s == None: return
if isinstance(s, unicode): if isinstance(s, unicode):
self.buffer += s self.buffer.append(s)
elif isinstance(s, str): elif isinstance(s, str):
self.buffer += s.decode('utf-8') self.buffer.append(s.decode('utf-8'))
else: else:
self.buffer += unicode(s) self.buffer.append(unicode(s))
def getValue(self):
return u''.join(self.buffer)
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
class Dummy: pass class Dummy: pass

View file

@ -503,7 +503,7 @@ class XmlMarshaller:
self.marshallSpecificElements(instance, res) self.marshallSpecificElements(instance, res)
# Return the result # Return the result
res.write('</'); res.write(self.rootElementName); res.write('>') res.write('</'); res.write(self.rootElementName); res.write('>')
res = res.buffer res = res.getValue()
if not self.dumpUnicode: if not self.dumpUnicode:
res = res.encode('utf-8') res = res.encode('utf-8')
return res return res