Commit 3f1855f5 authored by Jean-Paul Smets's avatar Jean-Paul Smets

New error / result API


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@563 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 6a8ed492
...@@ -32,6 +32,7 @@ from AccessControl import ClassSecurityInfo ...@@ -32,6 +32,7 @@ from AccessControl import ClassSecurityInfo
from Products.CMFCore import CMFCorePermissions from Products.CMFCore import CMFCorePermissions
from Products.ERP5Type.Base import Base from Products.ERP5Type.Base import Base
from Products.ERP5Type import PropertySheet from Products.ERP5Type import PropertySheet
from BTrees.OOBTree import OOTreeSet
from zLOG import LOG from zLOG import LOG
...@@ -78,30 +79,35 @@ class ActiveProcess(Base): ...@@ -78,30 +79,35 @@ class ActiveProcess(Base):
constructors = (manage_addActiveProcessForm, addActiveProcess) constructors = (manage_addActiveProcessForm, addActiveProcess)
# Base methods # Base methods
security.declareProtected(CMFCorePermissions.ManagePortal, 'postError') security.declareProtected(CMFCorePermissions.ManagePortal, 'postResult')
def postError(self, error): def postResult(self, result):
self.error_list = getattr(self, 'error_list', []) + [error] if not hasattr(self, 'result_list'):
self.result_list = OOTreeSet()
self.result_list.insert(result)
security.declareProtected(CMFCorePermissions.ManagePortal, 'getErrorList') security.declareProtected(CMFCorePermissions.ManagePortal, 'getResultList')
def getErrorList(self): def getResultList(self):
""" """
Returns the list of errors Returns the list of results
""" """
return self.error_list if not hasattr(self, 'result_list'):
self.result_list = OOTreeSet()
security.declareProtected(CMFCorePermissions.ManagePortal, 'getErrorListText') return self.result_list
def getErrorListText(self):
"""
Returns the list of errors as text
"""
return '\n'.join(map(lambda x:repr(x), self.error_list))
# security.declareProtected(CMFCorePermissions.ManagePortal, 'getErrorListText')
# def getResultListText(self):
# """
# Returns the list of errors as text
# """
# return '\n'.join(map(lambda x:repr(x), self.error_list))
#
security.declareProtected(CMFCorePermissions.ManagePortal, 'activateResult') security.declareProtected(CMFCorePermissions.ManagePortal, 'activateResult')
def activateResult(self, result): def activateResult(self, result):
if result not in (None, 0, '', (), []): if result not in (None, 0, '', (), []):
#self.activate().postError(result) #self.activate().postError(result)
self.postError(result) # Until we get SQLQueue self.postResult(result) # Until we get SQLQueue
# If result is a callable, then use it to propagate result (... ??? )
#if callable(result):
# return self.activateResult(Result(self, 'activateResult',result())
InitializeClass( ActiveProcess ) InitializeClass( ActiveProcess )
...@@ -58,6 +58,26 @@ def registerActivity(activity): ...@@ -58,6 +58,26 @@ def registerActivity(activity):
activity_list.append(activity_instance) activity_list.append(activity_instance)
activity_dict[activity.__name__] = activity_instance activity_dict[activity.__name__] = activity_instance
class Result:
def __init__(self, object_or_path, method_id, result, title=None, id=None, message=None):
# Some utility function to do this would be useful since we use it everywhere XXX
if type(object_or_path) in (type([]), type(())):
url = '/'.join(object_or_path)
path = object_or_path
elif type(object_or_path) is type('a'):
path = object_or_path.split('/')
url = object_or_path
else:
path = object_or_path.getPhysicalPath()
url = '/'.join(path)
self.path = path
self.url = url
self.result = result # Include arbitrary result
self.title = title # Should follow Zope convention for LOG title
self.id = id # Should follow Zope convention for LOG ids
self.message = message # Should follow Zope convention for LOG message
class Message: class Message:
def __init__(self, object, active_process, activity_kw, method_id, args, kw): def __init__(self, object, active_process, activity_kw, method_id, args, kw):
if type(object) is type('a'): if type(object) is type('a'):
...@@ -89,7 +109,7 @@ class Message: ...@@ -89,7 +109,7 @@ class Message:
result = getattr(object, self.method_id)(*self.args, **self.kw) result = getattr(object, self.method_id)(*self.args, **self.kw)
if REQUEST.active_process is not None: if REQUEST.active_process is not None:
active_process = activity_tool.getActiveProcess() active_process = activity_tool.getActiveProcess()
active_process.activateResult(result) # XXX Allow other method_id in future active_process.activateResult(Result(object,self.method_id,result)) # XXX Allow other method_id in future
self.is_executed = 1 self.is_executed = 1
except: except:
self.is_executed = 0 self.is_executed = 0
......
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