appy.bin: job.py: allow to specify several commands to execute (to separate with semicolons); appy.gen: translate: added the possibility to escape XML special chars in translations; appy.pod: bugfix in buffers.write: if content is already utf-8-encoded it does not crash anymore.

This commit is contained in:
Gaetan Delannay 2011-06-28 09:12:20 +02:00
parent 344229e3a9
commit e38b78d10c
4 changed files with 29 additions and 14 deletions

View file

@ -18,7 +18,12 @@
Zope object if previous param starts with "path=". Zope object if previous param starts with "path=".
<args> (optional) are the arguments to give to this method (only strings <args> (optional) are the arguments to give to this method (only strings
are supported). Several arguments must be separated by '*'.''' are supported). Several arguments must be separated by '*'.
Note that you can also specify several commands, separated with
semicolons (";"). This scripts performes a single commit after all commands
have been executed.
'''
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
import sys, transaction import sys, transaction
@ -28,12 +33,16 @@ if len(sys.argv) != 2:
print 'job.py was called with wrong args.' print 'job.py was called with wrong args.'
print __doc__ print __doc__
else: else:
command = sys.argv[1] commands = sys.argv[1].split(';')
parts = command.split(':') # Check that every command has the right number of sub-elelements.
if len(parts) not in (4,5): for command in commands:
print 'job.py was called with wrong args.' parts = command.split(':')
print __doc__ if len(parts) not in (4,5):
else: print 'job.py was called with wrong args.'
print __doc__
for command in commands:
parts = command.split(':')
# Unwrap parameters # Unwrap parameters
if len(parts) == 4: if len(parts) == 4:
zopeUser, plonePath, appName, toolMethod = parts zopeUser, plonePath, appName, toolMethod = parts
@ -66,5 +75,5 @@ else:
# Execute the method on the target object # Execute the method on the target object
if args: args = args.split('*') if args: args = args.split('*')
exec 'targetObject.%s(*args)' % toolMethod exec 'targetObject.%s(*args)' % toolMethod
transaction.commit() transaction.commit()
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------

View file

@ -3,7 +3,7 @@
- mixins/ToolMixin is mixed in with the generated application Tool class.''' - mixins/ToolMixin is mixed in with the generated application Tool class.'''
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
import os, os.path, sys, types, mimetypes, urllib import os, os.path, sys, types, mimetypes, urllib, cgi
import appy.gen import appy.gen
from appy.gen import Type, String, Selection, Role, No from appy.gen import Type, String, Selection, Role, No
from appy.gen.utils import * from appy.gen.utils import *
@ -1173,8 +1173,9 @@ class BaseMixin:
def formatText(self, text, format='html'): def formatText(self, text, format='html'):
'''Produces a representation of p_text into the desired p_format, which '''Produces a representation of p_text into the desired p_format, which
is 'html' by default.''' is "html" by default.'''
if format in ('html', 'xhtml'): if 'html' in format:
if format == 'html_from_text': text = cgi.escape(text)
res = text.replace('\r\n', '<br/>').replace('\n', '<br/>') res = text.replace('\r\n', '<br/>').replace('\n', '<br/>')
elif format == 'js': elif format == 'js':
res = text.replace('\r\n', '').replace('\n', '') res = text.replace('\r\n', '').replace('\n', '')

View file

@ -250,9 +250,11 @@ class AbstractWrapper:
'''Deletes myself.''' '''Deletes myself.'''
self.o.delete() self.o.delete()
def translate(self, label, mapping={}, domain=None, language=None): def translate(self, label, mapping={}, domain=None, language=None,
format='html'):
'''Check documentation of self.o.translate.''' '''Check documentation of self.o.translate.'''
return self.o.translate(label, mapping, domain, language=language) return self.o.translate(label, mapping, domain, language=language,
format=format)
def do(self, transition, comment='', doAction=False, doNotify=False, def do(self, transition, comment='', doAction=False, doNotify=False,
doHistory=True): doHistory=True):

View file

@ -177,7 +177,10 @@ class FileBuffer(Buffer):
def getLength(self): return 0 def getLength(self): return 0
def write(self, something): def write(self, something):
self.content.write(something.encode('utf-8')) try:
self.content.write(something.encode('utf-8'))
except UnicodeDecodeError:
self.content.write(something)
def addExpression(self, expression): def addExpression(self, expression):
try: try: