Ejemplo n.º 1
0
 def _get_errors_by_prefix(self, prefix):
     storage = ILogBookStorage(self.portal)
     return [
         (k, v)
         for (k, v)
         in storage.get_all_errors()
         if (v.get('value') or '').startswith(prefix)
     ]
Ejemplo n.º 2
0
 def test_referenced_errors(self):
     adapter = ILogBookStorage(self.portal)
     # these errors occured once
     adapter.save_error(MockError1)
     adapter.save_error(MockError2)
     adapter.save_error(MockError3)
     # 3 unique errors and 0 referenced errors
     self.assertEqual(adapter.error_count, 3)
     self.assertEqual(adapter.reference_count, 0)
     # now we have some already occured errors
     adapter.save_error(MockError11)
     adapter.save_error(MockError22)
     adapter.save_error(MockError33)
     self.assertEqual(adapter.error_count, 3)
     self.assertEqual(adapter.reference_count, 3)
Ejemplo n.º 3
0
 def test_delete_all_errors(self):
     adapter = ILogBookStorage(self.portal)
     adapter.save_error(MockError1)
     adapter.save_error(MockError2)
     adapter.save_error(MockError3)
     self.assertEqual(adapter.error_count, 3)
     adapter.delete_all_errors()
     self.assertEqual(adapter.error_count, 0)
Ejemplo n.º 4
0
 def test_get_all_errors(self):
     adapter = ILogBookStorage(self.portal)
     adapter.save_error(MockError1)
     adapter.save_error(MockError2)
     adapter.save_error(MockError3)
     errors = adapter.get_all_errors()
     self.assertEqual(len(errors), 3)
Ejemplo n.º 5
0
    def test_delete_reference(self):
        adapter = ILogBookStorage(self.portal)
        # 3 unique, 1 referenced error
        adapter.save_error(MockError1)
        adapter.save_error(MockError2)
        adapter.save_error(MockError3)
        adapter.save_error(MockError11)

        # check
        self.assertEqual(adapter.error_count, 3)
        self.assertEqual(adapter.reference_count, 1)

        # delete referenced error
        self.failUnless(adapter.delete_error(MockError1.get("id")))

        # check
        self.assertEqual(adapter.error_count, 2)
        self.assertEqual(adapter.reference_count, 0)
Ejemplo n.º 6
0
 def test_get_error(self):
     adapter = ILogBookStorage(self.portal)
     adapter.save_error(MockError1)
     self.failUnless(adapter.get_error(MockError1.get("id")))
Ejemplo n.º 7
0
 def test_delete_error(self):
     adapter = ILogBookStorage(self.portal)
     adapter.save_error(MockError1)
     self.assertEqual(adapter.error_count, 1)
     self.failUnless(adapter.delete_error(MockError1.get("id")))
     self.assertEqual(adapter.error_count, 0)
Ejemplo n.º 8
0
 def test_save_error(self):
     adapter = ILogBookStorage(self.portal)
     self.failUnless(adapter.save_error(MockError1))
Ejemplo n.º 9
0
 def test_adapter_implements_interface(self):
     adapter = ILogBookStorage(self.portal)
     self.failUnless(ILogBookStorage.providedBy(adapter))
Ejemplo n.º 10
0
    def test_delete_all_references(self):
        adapter = ILogBookStorage(self.portal)

        # 3 unique, 3 referenced errors
        adapter.save_error(MockError1)
        adapter.save_error(MockError2)
        adapter.save_error(MockError3)
        adapter.save_error(MockError11)
        adapter.save_error(MockError22)
        adapter.save_error(MockError33)

        # check
        self.assertEqual(adapter.error_count, 3)
        self.assertEqual(adapter.reference_count, 3)

        # delete all referenced error
        adapter.delete_all_references()

        # check
        self.assertEqual(adapter.error_count, 3)
        self.assertEqual(adapter.reference_count, 0)
Ejemplo n.º 11
0
 def __init__(self, context, request):
     super(LogBook, self).__init__(context, request)
     self.context = aq_inner(context)
     self.request = request
     self.portal = getSite()
     self.storage = ILogBookStorage(self.portal)
Ejemplo n.º 12
0
class LogBook(BrowserView):
    """ Logbook Form
    """
    interface.implements(ILogBook)

    template = ViewPageTemplateFile('logbook.pt')

    def __init__(self, context, request):
        super(LogBook, self).__init__(context, request)
        self.context = aq_inner(context)
        self.request = request
        self.portal = getSite()
        self.storage = ILogBookStorage(self.portal)

    def is_large_site_enabled(self):
        registry = getUtility(IRegistry)
        return registry.get('logbook.logbook_large_site')

    def show_all_tracebacks(self):
        if self.has_errors():
            if 'form.button.showall' in self.request.form:
                return True
            elif not self.is_large_site_enabled():
                return True
        return False

    @property
    def error_count(self):
        """ see ILogBook
        """
        return self.storage.error_count

    @property
    def reference_count(self):
        """ see ILogBook
        """
        return self.storage.reference_count

    @memoize
    def error_log(self):
        """ see ILogBook
        """
        error_log_path = '/'.join(
                ['/'.join(self.portal.getPhysicalPath()), 'error_log'])
        return self.portal.restrictedTraverse(error_log_path)

    def error(self, err_id):
        """ see ILogBook
        """
        error = self.error_log().getLogEntryById(err_id)
        if error is None:
            return None
        # make human readable time
        error['time'] = DateTime(error['time'])
        return error

    def save_error(self, err_id, context=None):
        """ see ILogBook
        """
        error = self.error(err_id)
        if context is not None:
            error['context'] = context
        return self.storage.save_error(error)

    def delete_error(self, err_id):
        """ see ILogBook
        """
        return self.storage.delete_error(err_id)

    def delete_all_errors(self):
        """ see ILogBook
        """
        return self.storage.delete_all_errors()

    def delete_all_references(self):
        """ see ILogBook
        """
        return self.storage.delete_all_references()

    def has_errors(self):
        return self.storage.error_count

    @property
    def saved_errors(self):
        """ see ILogBook
        """
        errors = self.storage.get_all_errors()
        out = []
        for id, tb in errors:
            refs = self.storage.get_referenced_errordata(id)
            out.append(
                    dict(
                        id=id,
                        tb=tb,
                        counter=len(refs),
                        refs=refs
                        )
                    )
        return sorted(out, key=lambda x: x["counter"], reverse=True)

    def search_error(self, err_id):
        """ see ILogBook
        """
        return self.storage.get_error(err_id)

    def __call__(self):
        self.request.set('disable_border', True)
        form = self.request.form

        submitted = form.get('form.submitted', None) is not None
        traceback_button = form.get('form.button.traceback', None) is not None
        delete_traceback_button = form.get('form.button.deletetraceback', None) is not None
        delete_refs_button = form.get('form.button.deleterefs', None) is not None
        delete_all_button = form.get('form.button.deleteall', None) is not None

        if submitted:
            if not self.request.get('REQUEST_METHOD', 'GET') == 'POST':
                raise Forbidden

            if traceback_button:
                err_id = form.get('errornumber', None)
                error = self.search_error(err_id)
                if not error:
                    IStatusMessage(self.request).addStatusMessage(_(u"Could not find error"), type='warning')
                self.request.set('entry', error)

            if delete_traceback_button:
                entries = form.get('entries', [])
                for entry in entries:
                    err_id = entry.get('id')
                    if self.delete_error(err_id):
                        IStatusMessage(self.request).addStatusMessage(_(u"Traceback %s deleted") % err_id, type='info')
                    else:
                        IStatusMessage(self.request).addStatusMessage(_(u"could not delete %s") % err_id, type='warning')

            if delete_all_button:
                self.delete_all_errors()
                IStatusMessage(self.request).addStatusMessage(_(u"Deleted all Errors"), type='info')

            if delete_refs_button:
                self.delete_all_references()
                IStatusMessage(self.request).addStatusMessage(_(u"Deleted all referenced Error"), type='info')

        return self.template()
Ejemplo n.º 13
0
 def test_get_error(self):
     adapter = ILogBookStorage(self.portal)
     adapter.save_error(MockError1)
     self.assertTrue(adapter.get_error(MockError1.get("id")))
Ejemplo n.º 14
0
 def test_save_error(self):
     adapter = ILogBookStorage(self.portal)
     self.assertTrue(adapter.save_error(MockError1))
Ejemplo n.º 15
0
 def test_adapter_implements_interface(self):
     adapter = ILogBookStorage(self.portal)
     self.assertTrue(ILogBookStorage.providedBy(adapter))