Update of /cvsroot/webware/Webware/WebKit
In directory usw-pr-cvs1:/tmp/cvs-serv15326/WebKit
Modified Files:
Application.py PickleRPCServlet.py RPCServlet.py
XMLRPCServlet.py
Log Message:
Adding setting ReportRPCExceptionsInWebKit that controls whether RPC servlet exceptions are reported on the server side. Defaults to 1.
Index: Application.py
===================================================================
RCS file: /cvsroot/webware/Webware/WebKit/Application.py,v
retrieving revision 1.133
retrieving revision 1.134
diff -C2 -d -r1.133 -r1.134
*** Application.py 14 Mar 2002 01:16:50 -0000 1.133
--- Application.py 12 Apr 2002 15:12:15 -0000 1.134
***************
*** 297,300 ****
--- 297,301 ----
},
'RPCExceptionReturn': 'traceback',
+ 'ReportRPCExceptionsInWebKit': 1,
'Contexts': { 'default': 'Examples',
'Admin': 'Admin',
Index: PickleRPCServlet.py
===================================================================
RCS file: /cvsroot/webware/Webware/WebKit/PickleRPCServlet.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** PickleRPCServlet.py 21 Mar 2002 22:21:00 -0000 1.4
--- PickleRPCServlet.py 12 Apr 2002 15:12:15 -0000 1.5
***************
*** 102,111 ****
except RequestError, e:
response['requestError'] = str(e)
except Exception, e:
response['exception'] = self.resultForException(e, trans)
except: # if it's a string exception, this gets triggered
response['exception'] = self.resultForException(sys.exc_info()[0], trans)
! response['timeResponded'] = time()
! response = dumps(response)
except:
# internal error, report as HTTP server error
--- 102,117 ----
except RequestError, e:
response['requestError'] = str(e)
+ self.sendResponse(trans, response)
+ self.handleException(trans)
except Exception, e:
response['exception'] = self.resultForException(e, trans)
+ self.sendResponse(trans, response)
+ self.handleException(trans)
except: # if it's a string exception, this gets triggered
response['exception'] = self.resultForException(sys.exc_info()[0], trans)
! self.sendResponse(trans, response)
! self.handleException(trans)
! else:
! self.sendResponse(trans, response)
except:
# internal error, report as HTTP server error
***************
*** 113,116 ****
print ''.join(traceback.format_exception(*sys.exc_info()))
trans.response().setStatus(500, 'Server Error')
! else:
! self.sendOK('text/python/pickle/dict', response, trans)
--- 119,128 ----
print ''.join(traceback.format_exception(*sys.exc_info()))
trans.response().setStatus(500, 'Server Error')
! self.handleException(trans)
!
! def sendResponse(self, trans, response):
! """
! Timestamp the response dict and send it.
! """
! response['timeResponded'] = time()
! self.sendOK('text/python/pickle/dict', dumps(response), trans)
Index: RPCServlet.py
===================================================================
RCS file: /cvsroot/webware/Webware/WebKit/RPCServlet.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** RPCServlet.py 1 Feb 2002 08:54:06 -0000 1.1
--- RPCServlet.py 12 Apr 2002 15:12:15 -0000 1.2
***************
*** 48,49 ****
--- 48,63 ----
response.setHeader('Content-length', str(len(contents)))
response.write(contents)
+
+ def handleException(self, transaction):
+ """
+ If ReportRPCExceptionsInWebKit is set to true, then
+ flush the response (because we don't want the standard HTML traceback
+ to be appended to the response) and then handle the exception in the
+ standard WebKit way. This means logging it to the console, storing
+ it in the error log, sending error email, etc. depending on the
+ settings.
+ """
+ setting = transaction.application().setting('ReportRPCExceptionsInWebKit')
+ if setting:
+ transaction.response().flush()
+ transaction.application().handleExceptionInTransaction(sys.exc_info(), transaction)
Index: XMLRPCServlet.py
===================================================================
RCS file: /cvsroot/webware/Webware/WebKit/XMLRPCServlet.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** XMLRPCServlet.py 21 Mar 2002 22:21:00 -0000 1.8
--- XMLRPCServlet.py 12 Apr 2002 15:12:15 -0000 1.9
***************
*** 35,38 ****
--- 35,41 ----
# generate response
try:
+ # This first test helps us to support PythonWin, which uses
+ # repeated calls to __methods__.__getitem__ to determine the
+ # allowed methods of an object.
if method == '__methods__.__getitem__':
response = self.exposedMethods()[params[0]]
***************
*** 44,52 ****
--- 47,60 ----
fault = self.resultForException(e, transaction)
response = xmlrpclib.dumps(xmlrpclib.Fault(1, fault))
+ self.sendOK('text/xml', response, transaction)
+ self.handleException(transaction)
except: # if it's a string exception, this gets triggered
fault = self.resultForException(sys.exc_info()[0], transaction)
response = xmlrpclib.dumps(xmlrpclib.Fault(1, fault))
+ self.sendOK('text/xml', response, transaction)
+ self.handleException(transaction)
else:
response = xmlrpclib.dumps(response, methodresponse=1)
+ self.sendOK('text/xml', response, transaction)
except:
# internal error, report as HTTP server error
***************
*** 54,57 ****
print string.join(traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]))
transaction.response().setStatus(500, 'Server Error')
! else:
! self.sendOK('text/html', response, transaction)
--- 62,64 ----
print string.join(traceback.format_exception(sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]))
transaction.response().setStatus(500, 'Server Error')
! self.handleException(transaction)
|