def emit(self, context=None, item=None): from porcupine.core.runtime import logger logger.log(self.severity, self.description, exc_info=True) if context is not None: context.response._reset() context.response._code = self.code context.response.set_header('Cache-Control', 'no-cache') code = self.code description = self.description request_type = context.request.type if self.output_traceback: tbk = traceback.format_exception(*sys.exc_info()) tbk = '\n'.join(tbk) info = tbk else: info = self.info if request_type == 'xmlrpc': from porcupine.core.rpc import xmlrpc context.response.content_type = 'text/xml' context.response.write(xmlrpc.error(self.rpc_code, description, info)) elif request_type == 'jsonrpc': from porcupine.core.rpc import jsonrpc context.response.content_type = 'application/json' context.response.write(jsonrpc.error(self.rpc_code, description, info, context.request.id)) else: http_method = context.request.REQUEST_METHOD browser = context.request.HTTP_USER_AGENT lang = context.request.HTTP_ACCEPT_LANGUAGE method = context.request.method if item is not None: contentclass = item.contentclass else: contentclass = '-' # write response context.response.content_type = 'text/html' f = open('conf/errorpage.html') try: template = Template(f.read()) context.response.write(template.substitute(vars())) finally: f.close()
def emit(self, context=None, item=None): from porcupine.core.runtime import logger logger.log( self.severity, self.description, exc_info=self.outputTraceback ) if context != None: context.response._reset() context.response._code = self.code context.response.setHeader('Cache-Control', 'no-cache') code = self.code description = self.description request_type = context.request.type if request_type == 'xmlrpc': context.response.content_type = 'text/xml' error_template = 'conf/XMLRPCError.xml' else: context.response.content_type = 'text/html' error_template = 'conf/errorpage.html' http_method = context.request.REQUEST_METHOD browser = context.request.HTTP_USER_AGENT lang = context.request.HTTP_ACCEPT_LANGUAGE method = context.request.method if item != None: contentclass = item.contentclass else: contentclass = '-' if self.outputTraceback: tbk = traceback.format_exception(*sys.exc_info()) tbk = '\n'.join(tbk) if request_type == 'xmlrpc': tbk = xml.xml_encode(tbk) info = tbk else: info = self file = open(error_template) body = file.read() file.close() context.response.write(body % vars())