Exemple #1
0
    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())