--- a/hooks/notification.py Tue Jan 04 16:15:13 2011 +0100
+++ b/hooks/notification.py Tue Jan 04 16:15:52 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 16:15:13 2011 +0100
+++ b/server/hook.py Tue Jan 04 16:15:52 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:
@@ -354,6 +355,7 @@
self.expected = expected
self.frometypes = more.pop('frometypes', None)
self.toetypes = more.pop('toetypes', None)
+ assert not more, "unexpected kwargs in match_rtype: %s" % more
@lltrace
def __call__(self, cls, req, *args, **kwargs):
--- a/server/utils.py Tue Jan 04 16:15:13 2011 +0100
+++ b/server/utils.py Tue Jan 04 16:15:52 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 16:15:13 2011 +0100
+++ b/web/views/basetemplates.py Tue Jan 04 16:15:52 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'</td>')
w(u'</tr></table>\n')
--- a/web/views/workflow.py Tue Jan 04 16:15:13 2011 +0100
+++ b/web/views/workflow.py Tue Jan 04 16:15:52 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')