Пример #1
0
    def _translate_result(self, rslt, err, id_):
        if err != None:
            if isinstance(err, CustomJsException):
                return err.message
            log = self._log_errors()
            if log:
                return log

            err = {"name": err.__class__.__name__, "message": err.message}
            rslt = None

        try:
            if isinstance(rslt, basestring):
                data = '{"result":%s,"id":%i,"error":%s}' % (rslt, id_, dumps(err))
            else:
                data = dumps({"result": rslt, "id": id_, "error": err})
        except JSONEncodeException, e:
            err = {"name": "JSONEncodeException", "message": "Result Object Not Serializable"}
            data = dumps({"result": None, "id": id_, "error": err})
Пример #2
0
    def _log_errors(self):
        """
        In development env, it will logs the error to the browser's console as well
        as the logs file.
        otherwise, it will only be logged in the log files (appengine app console)
        """

        import traceback, sys

        exc_type, exc_value, exc_tb = sys.exc_info()
        tb = traceback.format_exception(exc_type, exc_value, exc_tb)
        err = "".join(tb)
        logging.error(err)
        if "Development" in os.environ["SERVER_SOFTWARE"]:
            return "console.warn(%s)" % dumps("Python Error:\n%s" % err)
Пример #3
0
def dispatch_request(environ, start_response):
    """Main entry point for the Trac web interface.

    @param environ: the WSGI environment dict
    @param start_response: the WSGI callback for starting the response
    """
    try:
        env = Environment()
        req = Request(environ, start_response)
        try:
            dispatcher = RequestDispatcher(env)
            dispatcher.dispatch(req)
        except RequestDone:
            pass
        resp = req._response or []
        return resp
    except Exception, ex:
        req = Request(environ, start_response)
        from google.appengine.ext.webapp import template
        from tic.web import browser
        req.send_response(500)
        mimetype = "text/html;charset=utf-8"
        req.send_header('Content-Type', mimetype)
        import traceback, sys
        exc_type, exc_value, exc_tb = sys.exc_info()
        tb = traceback.format_exception(exc_type, exc_value, exc_tb)
        err = ''.join(tb)

        logging.error('\n' + err)

        if 'Development' in os.environ['SERVER_SOFTWARE']:
            error = "function(){console.warn(%s);}()" % dumps("Python Error:\n%s" % err)
            vars = {
                'data': {
                    'js': error,
                    'text': '<br />'.join(tb)
                    }
                }
            req.write(template.render("tic/web/templates/error.html", vars))
        else:
            raise