summaryrefslogtreecommitdiff
path: root/src/mailman/rules/docs/rules.rst
blob: f82167a55435d8b2bb34f937047bb6f75a3dc401 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
=====
Rules
=====

Rules are applied to each message as part of a rule chain.  Individual rules
simply return a boolean specifying whether the rule matches or not.  Chain
links determine what happens when a rule matches.


All rules
=========

Rules are maintained in the configuration object as a dictionary mapping rule
names to rule objects.

    >>> from zope.interface.verify import verifyObject
    >>> from mailman.interfaces.rules import IRule
    >>> for rule_name in sorted(config.rules):
    ...     rule = config.rules[rule_name]
    ...     print(rule_name, verifyObject(IRule, rule))
    administrivia True
    any True
    approved True
    emergency True
    implicit-dest True
    loop True
    max-recipients True
    max-size True
    member-moderation True
    news-moderation True
    no-subject True
    nonmember-moderation True
    suspicious-header True
    truth True

You can get a rule by name.

    >>> rule = config.rules['emergency']
    >>> verifyObject(IRule, rule)
    True


Rule checks
===========

Individual rules can be checked to see if they match, by running the rule's
``check()`` method.  This returns a boolean indicating whether the rule was
matched or not.

    >>> mlist = create_list('_xtest@example.com')
    >>> msg = message_from_string("""\
    ... From: aperson@example.com
    ...
    ... An important message.
    ... """)

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.

    >>> print(rule.name)
    emergency
    >>> mlist.emergency = False
    >>> rule.check(mlist, msg, {})
    False
    >>> mlist.emergency = True
    >>> rule.check(mlist, msg, {})
    True
    >>> rule.check(mlist, msg, dict(moderator_approved=True))
    False

.. toctree::
   :glob:

   ./*