PAS eats exceptions¶
A broken user folder is one of the worst things that can happen in Zope: it can make it impossible to access any objects underneath the user folders level.
In order to secure itself against errors in plugins PAS ignores all exceptions of the common exception types: NameError, AttributeError, KeyError, TypeError and ValueError.
This can make debugging plugins hard: an error in a plugin can be silently ignored if its exception is swallowed by PAS.
You can tell PAS not to swallow your exceptions by setting the
_dont_swallow_my_exceptions attribute on the plugin class.
Products/PluggableAuthService/PluggableAuthService.py line 86:
# except if they tell us not to do so def reraise(plugin): try: doreraise = plugin._dont_swallow_my_exceptions except AttributeError: return if doreraise: raise
Which means to take advantage of this feature, do something like this in your plugin class:
class LoginOnlyOncePlugin(BasePlugin): """ Class methods via Products/PluggableAuthService/interfaces/plugins.py """ meta_type = 'Login Only Once Plugin' security = ClassSecurityInfo() _dont_swallow_my_exceptions = True def __init__(self, id, title=None): self._setId(id) self.title = title ...