diff options
| author | Barry Warsaw | 2008-01-01 22:37:08 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2008-01-01 22:37:08 -0500 |
| commit | 6ca002e04d647671d55ee928fe134b0e223606cb (patch) | |
| tree | 16f0ace720c78d49b06d5587618a82565305c24e | |
| parent | adae635a4ca147937019fdd91aebd95a2769b9ca (diff) | |
| download | mailman-6ca002e04d647671d55ee928fe134b0e223606cb.tar.gz mailman-6ca002e04d647671d55ee928fe134b0e223606cb.tar.zst mailman-6ca002e04d647671d55ee928fe134b0e223606cb.zip | |
| -rw-r--r-- | Mailman/app/rules.py | 4 | ||||
| -rw-r--r-- | Mailman/interfaces/rules.py | 16 | ||||
| -rw-r--r-- | Mailman/rules/__init__.py | 10 | ||||
| -rw-r--r-- | Mailman/rules/docs/rules.txt | 5 |
4 files changed, 11 insertions, 24 deletions
diff --git a/Mailman/app/rules.py b/Mailman/app/rules.py index e4c3c8c40..37f5d9af4 100644 --- a/Mailman/app/rules.py +++ b/Mailman/app/rules.py @@ -45,7 +45,7 @@ def process(mlist, msg, msgdata, rule_set=None): # Now process all rules, returning the set of rules that match. rule_matches = set() for rule in rules: - if rule().check(mlist, msg, msgdata): + if rule.check(mlist, msg, msgdata): rule_matches.add(rule.name) return rule_matches @@ -60,5 +60,5 @@ def find_rule(rule_name): for rule_set_class in get_plugins('mailman.rules'): rule = rule_set_class().get(rule_name) if rule is not None: - return rule() + return rule return None diff --git a/Mailman/interfaces/rules.py b/Mailman/interfaces/rules.py index c023acf6b..5549b8e6b 100644 --- a/Mailman/interfaces/rules.py +++ b/Mailman/interfaces/rules.py @@ -17,25 +17,10 @@ """Interface describing the basics of rules.""" -from munepy import Enum from zope.interface import Interface, Attribute -class ChainJump(Enum): - # Allow the next rule in the chain to be run. - defer = 0 - # Jump to the 'accept' chain. - accept = 1 - # Jump to the 'hold' chain. - hold = 2 - # Jump to the 'reject' chain. - reject = 3 - # Jump to the 'discard' chain. - discard = 4 - - - class DuplicateRuleError(Exception): """A rule or rule name is added to a processor more than once.""" @@ -57,7 +42,6 @@ class IRule(Interface): :param mlist: The mailing list object. :param msg: The message object. :param msgdata: The message metadata. - :return: A chain to jump to, i.e. an ChainJump enum. """ diff --git a/Mailman/rules/__init__.py b/Mailman/rules/__init__.py index 2a1e2ec2b..299c9f697 100644 --- a/Mailman/rules/__init__.py +++ b/Mailman/rules/__init__.py @@ -56,14 +56,18 @@ class BuiltinRules: def __getitem__(self, rule_name): """See `IRuleSet`.""" - return self._rules[rule_name] + return self._rules[rule_name]() def get(self, rule_name, default=None): """See `IRuleSet`.""" - return self._rules.get(rule_name, default) + missing = object() + rule = self._rules.get(rule_name, missing) + if rule is missing: + return default + return rule() @property def rules(self): """See `IRuleSet`.""" for rule in self._rules.values(): - yield rule + yield rule() diff --git a/Mailman/rules/docs/rules.txt b/Mailman/rules/docs/rules.txt index 4e5db7012..b9606663c 100644 --- a/Mailman/rules/docs/rules.txt +++ b/Mailman/rules/docs/rules.txt @@ -13,7 +13,7 @@ only the rule processing system. Rule sets -========= +--------- IRuleSet is the interface that describes a set of rules. Mailman can be extended by plugging in additional rule sets, but it also comes with a default @@ -32,7 +32,6 @@ You can iterator over all the rules in a rule set. >>> rule = None >>> for rule in rule_set.rules: ... if rule.name == 'emergency': - ... rule = rule() ... break >>> verifyObject(IRule, rule) True @@ -81,7 +80,7 @@ For example, the emergency rule just checks to see if the emergency flag is set on the mailing list, and the message has not been pre-approved by the list administrator. - >>> rule = rule_set['emergency']() + >>> rule = rule_set['emergency'] >>> rule.name 'emergency' >>> mlist.emergency = False |
