def logRoleGrant(context, receiver, role): # adapted from subscribers.sharing.SharingHandler # this function should be replaced by a factored out variant from patches.py:sharing_handle_form # to have an actual context-diff. from zopyx.plone.persistentlogger.logger import IPersistentLogger logger = IPersistentLogger(context) user = plone.api.user.get_current() username = user.getUserName() info_url = '/@@user-information?userid={}'.format(username) email = user.getProperty('email') fullname = user.getProperty('fullname') if fullname and email: username = '******'.format(username, fullname, email) diff_context = { 'role_changes': { receiver.getId(): { 'fullname': receiver.getProperty('fullname'), 'email': receiver.getProperty('email'), 'added': {role,}, 'removed': set(), } } } logger.log('Sharing updated (via Role Request)', level='info', username=username, info_url=info_url, details=diff_context)
def log_clear(self): """ Clear persistent log """ alsoProvides(self.request, IDisableCSRFProtection) logger = IPersistentLogger(self.context) logger.clear() msg = u'Log entries cleared' logger.log(msg, 'info') self.context.plone_utils.addPortalMessage(msg) return self.request.response.redirect('{}/persistent-log'.format( self.context.absolute_url()))
def log_clear(self): """ Clear persistent log """ alsoProvides(self.request, IDisableCSRFProtection) logger = IPersistentLogger(self.context) logger.clear() msg = u'Log entries cleared' logger.log(msg, 'info') self.context.plone_utils.addPortalMessage(msg) return self.request.response.redirect( '{}/persistent-log'.format(self.context.absolute_url()))
def test_entries(self): c = self.portal logger = IPersistentLogger(c) logger.log(u'error', 'error') logger.log(u'info', 'info') self.assertEqual(len(logger), 2) entries = logger.entries self.assertEqual(len(entries), 2) for entry in entries: self.assertEqual(entry, logger.entry_by_uuid(entry['uuid']))
def test_logging(self): c = self.portal logger = IPersistentLogger(c) self.assertEqual(len(logger), 0) logger.log(u'error', 'error') logger.log(u'info', 'info') self.assertEqual(len(logger), 2) logger.clear() self.assertEqual(len(logger), 0) self.assertEqual(logger.get_last_user(), 'test-user')
def create_accounting_account(obj, event): """ Create an IAccount for a registered resource during object creation """ logger = IPersistentLogger(obj) try: obj.addAccount() logger.log('Account created on accounting server', level='info') except ConflictError: raise except Exception as e: pass
def demo(self): """ Create demo logger entries """ import time import random alsoProvides(self.request, IDisableCSRFProtection) logger = IPersistentLogger(self.context) for i in range(20): text = u'some text üöä {}'.format(i) level = random.choice(['debug', 'info', 'warn', 'error', 'fatal']) details = dict(a=random.random(), b=random.random(), c=random.random()) logger.log(text, level, details) time.sleep(0.3) self.context.plone_utils.addPortalMessage(u'Demo logger entries created') self.request.response.redirect(self.context.absolute_url() + '/@@persistent-log')
def demo(self): """ Create demo logger entries """ import time import random alsoProvides(self.request, IDisableCSRFProtection) logger = IPersistentLogger(self.context) for i in range(20): text = u'some text üöä {}'.format(i) level = random.choice(['debug', 'info', 'warn', 'error', 'fatal']) details = dict(a=random.random(), b=random.random(), c=random.random()) logger.log(comment=text, level=level, details=details) time.sleep(0.3) self.context.plone_utils.addPortalMessage( u'Demo logger entries created') self.request.response.redirect(self.context.absolute_url() + '/@@persistent-log')
def SharingHandler(event): """ Log/intercept @@sharing changes """ context = event.object logger = IPersistentLogger(context) user = plone.api.user.get_current() username = user.getUserName() info_url = '/@@user-information?userid={}'.format(username) email = user.getProperty('email') fullname = user.getProperty('fullname') if fullname and email: username = '******'.format(username, fullname, email) logger.log('Sharing updated', level='info', username=username, info_url=info_url, details=event.diff_context)