Exemplo n.º 1
0
 def manageError(self, error):
     '''Manages an error.'''
     tb = sys.exc_info()
     from zExceptions.ExceptionFormatter import format_exception
     htmlMessage = format_exception(tb[0], tb[1], tb[2], as_html=1)
     textMessage = format_exception(tb[0], tb[1], tb[2], as_html=0)
     self.log(''.join(textMessage).strip(), type='error')
     return '<table class="main" align="center" cellpadding="0"><tr>' \
            '<td style="padding: 1em 1em 1em 1em">An error occurred. %s' \
            '</td></tr></table>' % '\n'.join(htmlMessage)
Exemplo n.º 2
0
 def manageError(self, error):
     '''Manages an error.'''
     tb = sys.exc_info()
     from zExceptions.ExceptionFormatter import format_exception
     htmlMessage = format_exception(tb[0], tb[1], tb[2], as_html=1)
     textMessage = format_exception(tb[0], tb[1], tb[2], as_html=0)
     self.log(''.join(textMessage).strip(), type='error')
     return '<table class="main" align="center" cellpadding="0"><tr>' \
            '<td style="padding: 1em 1em 1em 1em">An error occurred. %s' \
            '</td></tr></table>' % '\n'.join(htmlMessage)
Exemplo n.º 3
0
    def __init__(self, event):
        info = event.info
        tb_text = None
        tb_html = None

        strtype = str(getattr(info[0], '__name__', info[0]))

        if not isinstance(info[2], basestring):
            tb_text = ''.join(
                format_exception(*info, **{'as_html': 0}))
            tb_html = ''.join(
                format_exception(*info, **{'as_html': 1}))
        else:
            tb_text = info[2]

        request = getattr(self, 'REQUEST', None)
        url = None
        username = None
        userid   = None
        req_html = None
        try:
            strv = str(info[1])
        except:
            strv = '<unprintable %s object>' % type(info[1]).__name__
        if request:
            url = request.get('URL', '?')
            usr = getSecurityManager().getUser()
            username = usr.getUserName()
            userid = usr.getId()
            try:
                req_html = str(request)
            except:
                pass
            if strtype == 'NotFound':
                strv = url
                next = request['TraversalRequestNameStack']
                if next:
                    next = list(next)
                    next.reverse()
                    strv = '%s [ /%s ]' % (strv, '/'.join(next))

        self.context = event.context
        self.level = 'ERROR'
        self.subject = ': '.join([strtype, strv])
        self.message = tb_text
        self.data = {
            'type': strtype,
            'value': strv,
            'tb_text': tb_text,
            'tb_html': tb_html,
            'username': username,
            'userid': userid,
            'url': url,
            'req_html': req_html,
            }
Exemplo n.º 4
0
    def __call__(self):
        exception = self.context
        self.context = self.__parent__
        request = self.request

        error_type = exception.__class__.__name__
        error_tb = ''.join(format_exception(*sys.exc_info(), as_html=True))

        # Indicate exception as JSON
        if "text/html" not in request.getHeader('Accept', ''):
            request.response.setHeader("Content-Type", "application/json")
            return json.dumps({
                'error_type': error_type,
            })

        # Use a simplified template if main_template is not available
        try:
            self.context.unrestrictedTraverse('main_template')
        except:
            template = self.basic_template
        else:
            template = self.index

        # Render page with user-facing error notice
        request.set('disable_border', True)
        request.set('disable_plone.leftcolumn', True)
        request.set('disable_plone.rightcolumn', True)

        return template(
            error_type=error_type,
            error_tb=error_tb,
        )
Exemplo n.º 5
0
    def __call__(self):
        exception = self.context
        self.context = self.__parent__
        request = self.request

        error_type = exception.__class__.__name__
        exc_type, value, traceback = sys.exc_info()
        error_tb = ''.join(
            format_exception(exc_type, value, traceback, as_html=False))
        request.response.setStatus(exc_type)

        # Indicate exception as JSON
        if "text/html" not in request.getHeader('Accept', ''):
            request.response.setHeader("Content-Type", "application/json")
            return json.dumps({
                'error_type': error_type,
            })

        # Render page with user-facing error notice
        request.set('disable_border', True)
        request.set('disable_plone.leftcolumn', True)
        request.set('disable_plone.rightcolumn', True)

        try:
            return self.index(
                error_type=error_type,
                error_tb=error_tb)
        except:
            return self.basic_template(
                error_type=error_type,
                error_tb=error_tb)
    def render(self, view=False, preview=False):
        if self.source is None:
            raise error.SourceMissingError('unknow')
        if preview and not self.source.is_previewable():
            raise error.SourcePreviewError(self)
        values = {}
        template = None
        if self.parameterFields:
            if not self.ignoreRequest:
                values, errors = self.extractData(self.parameterFields)
                if errors:
                    raise error.ParametersError(errors)
            elif not self.ignoreContent and self.getContent() is not None :
                template = self.getContent().get_source_template()
                manager = self.getContentData()
                for field in self.parameterFields:
                    try:
                        value = manager.get(field.identifier)
                    except KeyError:
                        value = field.getDefaultValue(self)
                    values[field.identifier] = value
            else:
                raise error.ParametersError()

        try:
            html = self.source.to_html(self.context, self.request, **values)
        except:
            info = u''.join(format_exception(*sys.exc_info()))
            getUtility(ISourceErrors).report(info)
            raise error.SourceRenderingError(self, info)
        if not preview and template:
            html = template.replace('<!-- source output -->', html)
        return html
Exemplo n.º 7
0
    def render(self, view=False, preview=False):
        if self.source is None:
            raise error.SourceMissingError('unknow')
        if preview and not self.source.is_previewable():
            raise error.SourcePreviewError(self)
        values = {}
        template = None
        if self.parameterFields:
            if not self.ignoreRequest:
                values, errors = self.extractData(self.parameterFields)
                if errors:
                    raise error.ParametersError(errors)
            elif not self.ignoreContent and self.getContent() is not None:
                template = self.getContent().get_source_template()
                manager = self.getContentData()
                for field in self.parameterFields:
                    try:
                        value = manager.get(field.identifier)
                    except KeyError:
                        value = field.getDefaultValue(self)
                    values[field.identifier] = value
            else:
                raise error.ParametersError()

        try:
            html = self.source.to_html(self.context, self.request, **values)
        except:
            info = u''.join(format_exception(*sys.exc_info()))
            getUtility(ISourceErrors).report(info)
            raise error.SourceRenderingError(self, info)
        if not preview and template:
            html = template.replace('<!-- source output -->', html)
        return html
Exemplo n.º 8
0
 def __call__(self):
     self.exception = aq_inner(self.context)
     self.context = aq_parent(self)
     log.exception("Error at %r", self.context)
     error_type = self.exception.__class__.__name__
     exc_type, value, traceback = sys.exc_info()
     error_tb = "".join(
         format_exception(exc_type, value, traceback, as_html=False))
     try:
         return self.index()
     except Exception:
         return self.basic_template(error_type=error_type,
                                    error_tb=error_tb)
Exemplo n.º 9
0
 def testCheckZuitePageTemplatesValidHTML(self):
     # Check the zuite page templates can be rendered, because selenium test
     # runner does not report error in case there are errors in the page
     # template.
     tests_tool = self.portal.portal_tests
     for page_template_path, page_template in tests_tool.ZopeFind(
             tests_tool, obj_metatypes=['Page Template'], search_sub=1):
         try:
             page_template.pt_render()
         except (KeyboardInterrupt, SystemExit):
             raise
         except:
             exc_type, exc_value, exc_traceback = sys.exc_info()
             self.fail(
                 'Rendering of %s failed with error:\n%s' %
                 (page_template_path, ''.join(
                     format_exception(
                         exc_type, exc_value, exc_traceback,
                         as_html=False))))
Exemplo n.º 10
0
 def testCheckZuitePageTemplatesValidHTML(self):
   # Check the zuite page templates can be rendered, because selenium test
   # runner does not report error in case there are errors in the page
   # template.
   tests_tool = self.portal.portal_tests
   for page_template_path, page_template in tests_tool.ZopeFind(
             tests_tool, obj_metatypes=['Page Template'], search_sub=1):
     try:
       page_template.pt_render()
     except (KeyboardInterrupt, SystemExit):
       raise
     except:
       exc_type, exc_value, exc_traceback = sys.exc_info()
       self.fail('Rendering of %s failed with error:\n%s' % (
         page_template_path,
         ''.join(format_exception(
           exc_type,
           exc_value,
           exc_traceback,
           as_html=False))))
Exemplo n.º 11
0
    def fail(self, comment, exception=None):
        """Put the life cycle instance object into `failed` state."""
        if self.state in ['ended', 'failed']:
            # Ignore failure requests when we are failed already, or ended.
            return
        self.__parent__.aq_inner.onFailure()

        if DEBUG_FAILURE:
            raise

        self.state = 'failed'

        if exception is not None:
            # XXX This should be changed to derive the exception information
            # from the exception instance, as soon as python has this feature.
            exc_info = sys.exc_info()
            comment = comment + "<br/><b>Exception details:</b><br/>" + \
                    ''.join(format_exception(*exc_info, **{'as_html':1}))

        self.recordEvent("failed", "failed",
                         "A failure occured:<br/>" + comment)
        zope.event.notify(LifeCycleEvent(self.__parent__))
Exemplo n.º 12
0
    def exception(self, content):
        self.exceptions += 1

        output = StringIO()
        self._common_blah(output, content)

        if len(content.errors) > 0:
            output.write("<h4>Validation Errors</h4>")
            output.write("<table>")
            for key, value in content.errors.iteritems():
                output.write("<tr>")
                output.write("<td>%s</td><td>%s</td>" % (key, value))
                output.write("</tr>")
            output.write("</table>")

        #output.write("<h4>Error Info</h4>")
        #output.write("<table>")
        #for key in ('username', 'url', 'userid', 'value', 'time', 'type', 'id'):
        #    output.write("<tr><td>%s</td><td>%s</td></tr>" % (key, site_error[key]))
        #output.write("</table>")

        output.write("<h4>Traceback</h4>")
        output.write("<pre>")
        #srsly? there has to be a better way :(
        traceback = content.traceback
        if not traceback:
            traceback = sys.exc_info()
        tb = ''.join(format_exception(*traceback, **{"as_html":0}))
        idx = tb.find("<!DOCTYPE")
        if idx >= 0:
            tb = tb[:idx].strip()
        output.write(cgi.escape(tb))
        output.write("</pre>")

        tb_info = "".join(self.traceback_info_re.findall(tb)[-1:])
        exception = "".join(tb.strip().split("\n")[-1:])

        self.exception_log.setdefault((exception, tb_info), []).append(output)
Exemplo n.º 13
0
    def testFunctionalTestRunner(self):
        # Check the zuite page templates can be rendered, because selenium test
        # runner does not report error in case there are errors in the page
        # template.
        tests_tool = self.portal.portal_tests

        if self.remote_code_url_list:
            # This does not really run tests. It initializes a zuite
            # and redirect to a url to would actually run them.
            tests_tool.Zuite_runSeleniumTest(self.remote_code_url_list,
                                             self.run_only)
            self.commit()

        for page_template_path, page_template in tests_tool.ZopeFind(
                tests_tool[self.run_only] if self.run_only else tests_tool,
                obj_metatypes=('Page Template', ),
                search_sub=1):
            try:
                page_template.pt_render()
            except Exception:
                exc_type, exc_value, exc_traceback = sys.exc_info()
                self.fail(
                    'Rendering of %s failed with error:\n%s' %
                    (page_template_path, ''.join(
                        format_exception(
                            exc_type, exc_value, exc_traceback,
                            as_html=False))))

        # abort to get rid of the mysql participation in this transaction
        self.portal._p_jar.sync()

        debug = self.foreground or os.environ.get("erp5_debug_mode")
        error = None
        try:
            iframe = self.runner.test(debug=debug)
        except TimeoutError, e:
            error = repr(e)
            self._verboseErrorLog(20)
Exemplo n.º 14
0
  def testFunctionalTestRunner(self):
    # Check the zuite page templates can be rendered, because selenium test
    # runner does not report error in case there are errors in the page
    # template.
    tests_tool = self.portal.portal_tests

    if self.remote_code_url_list:
      # This does not really run tests. It initializes a zuite
      # and redirect to a url to would actually run them.
      tests_tool.Zuite_runSeleniumTest(self.remote_code_url_list, self.run_only)
      self.commit()

    for page_template_path, page_template in tests_tool.ZopeFind(
        tests_tool[self.run_only] if self.run_only else tests_tool,
        obj_metatypes=('Page Template',), search_sub=1):
      try:
        page_template.pt_render()
      except Exception:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        self.fail('Rendering of %s failed with error:\n%s' % (
          page_template_path,
          ''.join(format_exception(
            exc_type,
            exc_value,
            exc_traceback,
            as_html=False))))

    # abort to get rid of the mysql participation in this transaction
    self.portal._p_jar.sync()

    debug = self.foreground or os.environ.get("erp5_debug_mode")
    error = None
    try:
      self.runner.test(debug=debug)
    except TimeoutError, e:
      error = repr(e)
      self._verboseErrorLog(20)
Exemplo n.º 15
0
    def raising(self, info):
        """Log an exception.

        Called by SimpleItem's exception handler.
        Returns the url to view the error log entry
        """
        try:
            now = time.time()
            try:
                tb_text = None
                tb_html = None

                strtype = str(getattr(info[0], '__name__', info[0]))
                if strtype in self._ignored_exceptions:
                    return

                if not isinstance(info[2], basestring):
                    tb_text = ''.join(format_exception(*info, **{'as_html':
                                                                 0}))
                    tb_html = ''.join(format_exception(*info, **{'as_html':
                                                                 1}))
                else:
                    tb_text = info[2]

                request = getattr(self, 'REQUEST', None)
                url = None
                username = None
                userid = None
                req_html = None
                try:
                    strv = str(info[1])
                except:
                    strv = '<unprintable %s object>' % type(info[1]).__name__
                if request:
                    url = request.get('URL', '?')
                    usr = getSecurityManager().getUser()
                    username = usr.getUserName()
                    userid = usr.getId()
                    try:
                        req_html = str(request)
                    except:
                        pass
                    if strtype == 'NotFound':
                        strv = url
                        next = request['TraversalRequestNameStack']
                        if next:
                            next = list(next)
                            next.reverse()
                            strv = '%s [ /%s ]' % (strv, '/'.join(next))

                log = self._getLog()
                entry_id = str(now) + str(random())  # Low chance of collision
                log.append({
                    'type': strtype,
                    'value': strv,
                    'time': now,
                    'id': entry_id,
                    'tb_text': tb_text,
                    'tb_html': tb_html,
                    'username': username,
                    'userid': userid,
                    'url': url,
                    'req_html': req_html,
                })

                cleanup_lock.acquire()
                try:
                    if len(log) >= self.keep_entries:
                        del log[:-self.keep_entries]
                finally:
                    cleanup_lock.release()
            except:
                LOG.error('Error while logging', exc_info=sys.exc_info())
            else:
                if self.copy_to_zlog:
                    self._do_copy_to_zlog(now, strtype, str(url), tb_text)
                return '%s/showEntry?id=%s' % (self.absolute_url(), entry_id)
        finally:
            info = None
 def raise_standardErrorMessage(self, c, r, t, v, tb, error_log_url):
     from zExceptions.ExceptionFormatter import format_exception
     fmt = format_exception(t, v, tb, as_html=0)
     self.messages.append(''.join([error_log_url] + fmt))
Exemplo n.º 17
0
def pretty_tb(t, v, tb, as_html=1):
    tb = format_exception(t, v, tb, as_html=as_html)
    tb = '\n'.join(tb)
    return tb
Exemplo n.º 18
0
def pretty_exc(self, exc, *args, **kw):
    t, e, tb = exc
    try:
        return ''.join(format_exception(t, e, tb, format_src=1))
    except:
        return ''.join(format_exception(t, e, tb))
Exemplo n.º 19
0
def pretty_tb(t, v, tb, as_html=1):
    tb = format_exception(t, v, tb, as_html=as_html)
    tb = '\n'.join(tb)
    return tb
Exemplo n.º 20
0
def _traceback(self, t, v, tb, as_html=1):
    return ''.join(format_exception(t, v, tb, as_html=as_html))
    def raising(self, info):
        """Log an exception.

        Called by SimpleItem's exception handler.
        Returns the url to view the error log entry
        """
        now = time.time()
        try:
            tb_text = None
            tb_html = None

            strtype = str(getattr(info[0], '__name__', info[0]))
            if strtype in self._ignored_exceptions:
                return

            if not isinstance(info[2], bstr):
                tb_text = ''.join(
                    format_exception(*info, **{'as_html': 0}))
                tb_html = ''.join(
                    format_exception(*info, **{'as_html': 1}))
            else:
                tb_text = info[2]

            request = getattr(self, 'REQUEST', None)
            url = None
            username = None
            userid = None
            req_html = None
            try:
                strv = str(info[1])
            except Exception:
                strv = '<unprintable %s object>' % type(info[1]).__name__
            if request:
                url = request.get('URL', '?')
                usr = getSecurityManager().getUser()
                username = usr.getUserName()
                userid = usr.getId()
                try:
                    req_html = str(request)
                except Exception:
                    pass
                if strtype == 'NotFound':
                    strv = url
                    next = request['TraversalRequestNameStack']
                    if next:
                        next = list(next)
                        next.reverse()
                        strv = '%s [ /%s ]' % (strv, '/'.join(next))

            log = self._getLog()
            entry_id = str(now) + str(random())  # Low chance of collision
            log.append({
                'type': strtype,
                'value': strv,
                'time': now,
                'id': entry_id,
                'tb_text': tb_text,
                'tb_html': tb_html,
                'username': username,
                'userid': userid,
                'url': url,
                'req_html': req_html})

            cleanup_lock.acquire()
            try:
                if len(log) >= self.keep_entries:
                    del log[:-self.keep_entries]
            finally:
                cleanup_lock.release()
        except Exception:
            LOG.error('Error while logging', exc_info=sys.exc_info())
        else:
            notify(ErrorRaisedEvent(log[-1]))
            if self.copy_to_zlog:
                self._do_copy_to_zlog(now, strtype, entry_id,
                                      str(url), tb_text)
            return '%s/showEntry?id=%s' % (self.absolute_url(), entry_id)
def tb(as_html=0):
    t, v, b = sys.exc_info()
    try:
        return ''.join(format_exception(t, v, b, as_html=as_html))
    finally:
        del b
Exemplo n.º 23
0
 def _traceback(self, t, v, tb, as_html=1):
     tb = format_exception(t, v, tb, as_html=as_html)
     return '\n'.join(tb)
Exemplo n.º 24
0
def tb(as_html=0):
    t, v, b = sys.exc_info()
    try:
        return ''.join(format_exception(t, v, b, as_html=as_html))
    finally:
        del b
Exemplo n.º 25
0
 def raise_standardErrorMessage(self, c, r, t, v, tb, error_log_url):
     from zExceptions.ExceptionFormatter import format_exception
     fmt = format_exception(t, v, tb, as_html=0)
     self.messages.append(''.join([error_log_url] + fmt))
Exemplo n.º 26
0
 def _traceback(self, t, v, tb, as_html=1):
     tb = format_exception(t, v, tb, as_html=as_html)
     return '\n'.join(tb)
Exemplo n.º 27
0
    def raising(self, info):
        """Log an exception.

        Called by SimpleItem's exception handler.
        Returns the url to view the error log entry
        """
        try:
            now = time.time()
            try:
                tb_text = None
                tb_html = None

                strtype = str(getattr(info[0], '__name__', info[0]))
                if strtype in self._ignored_exceptions:
                    return

                if not isinstance(info[2], StringType) and not isinstance(
                    info[2], UnicodeType):
                    tb_text = ''.join(
                        format_exception(*info, **{'as_html': 0}))
                    tb_html = ''.join(
                        format_exception(*info, **{'as_html': 1}))
                else:
                    tb_text = info[2]

                request = getattr(self, 'REQUEST', None)
                url = None
                username = None
                userid   = None
                req_html = None
                if request:
                    url = request.get('URL', '?')
                    usr = getSecurityManager().getUser()
                    username = usr.getUserName()
                    userid = usr.getId()
                    try:
                        req_html = str(request)
                    except:
                        pass

                try:
                    strv = str(info[1])
                except:
                    strv = '<unprintable %s object>' % str(type(info[1]).__name__)

                log = self._getLog()
                entry_id = str(now) + str(random()) # Low chance of collision
                log.append({
                    'type': strtype,
                    'value': strv,
                    'time': now,
                    'id': entry_id,
                    'tb_text': tb_text,
                    'tb_html': tb_html,
                    'username': username,
                    'userid': userid,
                    'url': url,
                    'req_html': req_html,
                    })

                cleanup_lock.acquire()
                try:
                    if len(log) >= self.keep_entries:
                        del log[:-self.keep_entries]
                finally:
                    cleanup_lock.release()
            except:
                LOG('SiteError', ERROR, 'Error while logging',
                    error=sys.exc_info())
            else:
                if self.copy_to_zlog:
                    self._do_copy_to_zlog(now,strtype,str(url),info)
                return '%s/showEntry?id=%s' % (self.absolute_url(), entry_id)
        finally:
            info = None