def getMailTemplate(self, obj, what, ec_bindings=None): """Return the template to notify for the ``what`` of an object ``obj``, ``what`` being one of the implemented notification ("*item_modification*", "*wf_transition*", etc.), or ``None`` if none could be found. ``ec_bindings`` is a mapping which is injected into the expression context of the expression of the rules. """ rules = self.getProperty('on_%s_mail_template' % what, None) if rules is None: raise NotImplementedError, \ 'Notification on "%s" is not implemented.' ec = getExpressionContext(obj, ec_bindings) template = None for rule in rules: try: match_expr, template_expr = rule.split(RULE_DELIMITER) match_expr, template_expr = match_expr.strip(), template_expr.strip() except ValueError: LOG.error("'%s' is not a valid rule "\ "('on_%s_mail_template' on '%s')", rule, what, obj.absolute_url(1)) continue match_expr = match_expr.strip() template_expr = template_expr.strip() try: if not self._match(match_expr, ec): continue except ConflictError: raise except: LOG.error("Error in 'on_%s_mail_template' rule "\ "('%s') for '%s'", what, match_expr, obj.absolute_url(1), exc_info=True) continue try: template = Expression(template_expr)(ec) except ConflictError: raise except: LOG.error("Error in 'on_%s_mail_template' rule "\ "('%s') for '%s'", what, template_expr, obj.absolute_url(1), exc_info=True) continue if type(template) == StringType: template = getattr(obj, template, None) if template is not None: break return template
def getUsersToNotify(self, obj, what, ec_bindings=None): """Return a list of users to notify for the ``what`` of an object ``obj``, ``what`` being one of the implemented notification ("*item_modification*", "*wf_transition*", etc.). ``ec_bindings`` is a mapping which is injected into the expression context of the expression of the rules. """ rules = self.getProperty('on_%s_users' % what, None) if rules is None: raise NotImplementedError, \ 'Notification on "%s" is not implemented.' % what ec = getExpressionContext(obj, ec_bindings) users = [] for rule in rules: try: match_expr, users_expr = rule.split(RULE_DELIMITER) match_expr, users_expr = match_expr.strip(), users_expr.strip() except ValueError: LOG.error("'%s' is not a valid rule "\ "('on_%s_users' on '%s')", rule, what, obj.absolute_url(1)) continue match_expr = match_expr.strip() users_expr = users_expr.strip() try: if not self._match(match_expr, ec): continue except ConflictError: raise except: LOG.error("Error in 'on_%s_users' rule "\ "('%s') for '%s'", what, match_expr, obj.absolute_url(1), exc_info=True) continue if users_expr == '*': users.extend(self.getAllUsers()) break else: try: users.extend(Expression(users_expr)(ec)) except ConflictError: raise except: LOG.error("Error in 'on_%s_users' rule "\ "('%s') for '%s'", what, users_expr, obj.absolute_url(1), exc_info=True) return users
def ignoreNotification(self, obj): """Return ``True`` iff notification have been set to be ignored for ``obj``. """ ec = getExpressionContext(obj) users = [] for match_expr in self.getProperty('ignore_rules', ()): try: if self._match(match_expr, ec): return True except ConflictError: raise except: LOG.error("Error in 'ignore_rules' rule "\ "('%s') for '%s'", match_expr, obj.absolute_url(1), exc_info=True) return False