merge stable heads stable
authorSylvain Thénault <sylvain.thenault@logilab.fr>
Tue, 04 Jan 2011 15:31:07 +0100
branchstable
changeset 6766 1b091b3a0d1e
parent 6765 b922e3a817e9 (diff)
parent 6761 84b67ae41a0d (current diff)
child 6767 0a18f25c16a7
merge stable heads
--- 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',
--- 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:
--- 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)
--- 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'&nbsp;')
+                w(u'&#160;')
             w(u'</td>')
         w(u'</tr></table>\n')
 
--- 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')