# HG changeset patch # User Sylvain Thénault # Date 1294151467 -3600 # Node ID 1b091b3a0d1e56f33d929b98bf6410fd3f23364e # Parent b922e3a817e99c89ca60970beded403bf7133038# Parent 84b67ae41a0de8c4b2fdc81ce674f72b72b9f2fa merge stable heads diff -r 84b67ae41a0d -r 1b091b3a0d1e hooks/notification.py --- a/hooks/notification.py Tue Jan 04 14:11:41 2011 +0100 +++ b/hooks/notification.py Tue Jan 04 15:31:07 2011 +0100 @@ -22,6 +22,7 @@ from logilab.common.textutils import normalize_text +from cubicweb import RegistryNotFound from cubicweb.selectors import is_instance from cubicweb.server import hook from cubicweb.sobjects.supervising import SupervisionMailOp @@ -42,8 +43,14 @@ category = 'notification' def select_view(self, vid, rset, row=0, col=0): - return self._cw.vreg['views'].select_or_none(vid, self._cw, rset=rset, - row=row, col=col) + try: + return self._cw.vreg['views'].select_or_none(vid, self._cw, rset=rset, + row=row, col=col) + except RegistryNotFound: # can happen in some config + # (e.g. repo only config with no + # notification views registered by + # the instance's cubes) + return None class StatusChangeHook(NotificationHook): @@ -69,7 +76,6 @@ 'comment': comment, 'previous_state': entity.previous_state.name, 'current_state': entity.new_state.name}) - class RelationChangeHook(NotificationHook): __regid__ = 'notifyrelationchange' events = ('before_add_relation', 'after_add_relation', diff -r 84b67ae41a0d -r 1b091b3a0d1e server/hook.py --- a/server/hook.py Tue Jan 04 14:11:41 2011 +0100 +++ b/server/hook.py Tue Jan 04 15:31:07 2011 +0100 @@ -307,9 +307,10 @@ def call_hooks(self, event, session=None, **kwargs): try: - self.vreg['%s_hooks' % event].call_hooks(event, session, **kwargs) + registry = self.vreg['%s_hooks' % event] except RegistryNotFound: - pass # no hooks for this event + return # no hooks for this event + registry.call_hooks(event, session, **kwargs) for event in ALL_HOOKS: diff -r 84b67ae41a0d -r 1b091b3a0d1e server/utils.py --- a/server/utils.py Tue Jan 04 14:11:41 2011 +0100 +++ b/server/utils.py Tue Jan 04 15:31:07 2011 +0100 @@ -20,6 +20,7 @@ import sys import string +import logging from threading import Timer, Thread from getpass import getpass from random import choice @@ -129,6 +130,10 @@ def auto_restart_func(self=self, func=func, args=args): try: func(*args) + except: + logger = logging.getLogger('cubicweb.repository') + logger.exception('Unhandled exception in LoopTask %s', self.name) + raise finally: self.start() self.func = auto_restart_func @@ -158,6 +163,10 @@ def auto_remove_func(self=self, func=target): try: func() + except: + logger = logging.getLogger('cubicweb.repository') + logger.exception('Unhandled exception in RepoThread %s', self._name) + raise finally: self.running_threads.remove(self) Thread.__init__(self, target=auto_remove_func) diff -r 84b67ae41a0d -r 1b091b3a0d1e web/views/basetemplates.py --- a/web/views/basetemplates.py Tue Jan 04 14:11:41 2011 +0100 +++ b/web/views/basetemplates.py Tue Jan 04 15:31:07 2011 +0100 @@ -347,7 +347,7 @@ self._cw, rset=self.cw_rset, view=view, context=context) for comp in components: comp.render(w=w) - w(u' ') + w(u' ') w(u'') w(u'\n') diff -r 84b67ae41a0d -r 1b091b3a0d1e web/views/workflow.py --- a/web/views/workflow.py Tue Jan 04 14:11:41 2011 +0100 +++ b/web/views/workflow.py Tue Jan 04 15:31:07 2011 +0100 @@ -74,6 +74,7 @@ _afs = uicfg.autoform_section _afs.tag_subject_of(('TrInfo', 'to_state', '*'), 'main', 'hidden') _afs.tag_subject_of(('TrInfo', 'from_state', '*'), 'main', 'hidden') +_afs.tag_attribute(('TrInfo', 'tr_count'), 'main', 'hidden') _afs.tag_object_of(('State', 'allowed_transition', '*'), 'main', 'attributes')