summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mailman/commands/cli_members.py31
-rw-r--r--src/mailman/commands/docs/members.txt73
2 files changed, 87 insertions, 17 deletions
diff --git a/src/mailman/commands/cli_members.py b/src/mailman/commands/cli_members.py
index a69b086d7..b47d72127 100644
--- a/src/mailman/commands/cli_members.py
+++ b/src/mailman/commands/cli_members.py
@@ -77,11 +77,34 @@ class Members:
if mlist is None:
self.parser.error(_('No such list: $fqdn_listname'))
if args.input_filename is None:
- for address in sorted(mlist.members.addresses,
- key=attrgetter('address')):
- print formataddr((address.real_name, address.original_address))
+ self.display_members(mlist, args)
+ else:
+ self.add_members(mlist, args)
+
+ def display_members(self, mlist, args):
+ """Display the members of a mailing list.
+
+ :param mlist: The mailing list to operate on.
+ :type mlist: `IMailingList`
+ :param args: The command line arguments.
+ :type args: `argparse.Namespace`
+ """
+ addresses = list(mlist.members.addresses)
+ if len(addresses) == 0:
+ print mlist.fqdn_listname, 'has no members'
return
- elif args.input_filename == '-':
+ for address in sorted(addresses, key=attrgetter('address')):
+ print formataddr((address.real_name, address.original_address))
+
+ def add_members(self, mlist, args):
+ """Add the members in a file to a mailing list.
+
+ :param mlist: The mailing list to operate on.
+ :type mlist: `IMailingList`
+ :param args: The command line arguments.
+ :type args: `argparse.Namespace`
+ """
+ if args.input_filename == '-':
fp = sys.stdin
else:
fp = codecs.open(args.input_filename, 'r', 'utf-8')
diff --git a/src/mailman/commands/docs/members.txt b/src/mailman/commands/docs/members.txt
index 530a5acc2..73cd1c252 100644
--- a/src/mailman/commands/docs/members.txt
+++ b/src/mailman/commands/docs/members.txt
@@ -1,22 +1,69 @@
-==============
-Adding members
-==============
+================
+Managing members
+================
-You can add members to a mailing list from the command line.
+The `bin/mailman members` command allows a site administrator to display, add,
+and remove members from a mailing list.
- >>> mlist = create_list('test@example.com')
+ >>> mlist1 = create_list('test1@example.com')
>>> class FakeArgs:
... input_filename = None
- ... listname = None
+ ... listname = []
>>> args = FakeArgs()
>>> from mailman.commands.cli_members import Members
>>> command = Members()
-To do so, you need a file containing email addresses and full names that can
-be parsed by email.utils.parseaddr().
+Listing members
+===============
+
+You can list all the members of a mailing list by calling the command with no
+options. To start with, there are no members of the mailing list.
+
+ >>> args.listname = [mlist1.fqdn_listname]
+ >>> command.process(args)
+ test1@example.com has no members
+
+Once the mailing list add some members, they will be displayed.
+
+ >>> from mailman.interfaces.member import DeliveryMode
+ >>> from mailman.app.membership import add_member
+ >>> add_member(mlist1, 'anne@example.com', 'Anne Person', 'xxx',
+ ... DeliveryMode.regular, mlist1.preferred_language.code)
+ <Member: Anne Person <anne@example.com>
+ on test1@example.com as MemberRole.member>
+ >>> add_member(mlist1, 'bart@example.com', 'Bart Person', 'xxx',
+ ... DeliveryMode.regular, mlist1.preferred_language.code)
+ <Member: Bart Person <bart@example.com>
+ on test1@example.com as MemberRole.member>
+
+ >>> command.process(args)
+ Anne Person <anne@example.com>
+ Bart Person <bart@example.com>
+
+Members are displayed in alphabetical order based on their address.
+
+ >>> add_member(mlist1, 'anne@aaaxample.com', 'Anne Person', 'xxx',
+ ... DeliveryMode.regular, mlist1.preferred_language.code)
+ <Member: Anne Person <anne@aaaxample.com>
+ on test1@example.com as MemberRole.member>
+
+ >>> command.process(args)
+ Anne Person <anne@aaaxample.com>
+ Anne Person <anne@example.com>
+ Bart Person <bart@example.com>
+
+
+Adding members
+==============
+
+You can add members to a mailing list from the command line. To do so, you
+need a file containing email addresses and full names that can be parsed by
+email.utils.parseaddr().
+
+ >>> mlist2 = create_list('test2@example.com')
>>> addresses = [
... ]
@@ -30,10 +77,10 @@ be parsed by email.utils.parseaddr().
... print >> fp, address
>>> args.input_filename = path
- >>> args.listname = [mlist.fqdn_listname]
+ >>> args.listname = [mlist2.fqdn_listname]
>>> command.process(args)
- >>> sorted(address.address for address in mlist.members.addresses)
+ >>> sorted(address.address for address in mlist2.members.addresses)
[u'aperson@example.com', u'bperson@example.com', u'cperson@example.com']
You can also specify '-' as the filename, in which case the addresses are
@@ -55,7 +102,7 @@ taken from standard input.
>>> command.process(args)
>>> sys.stdin = sys.__stdin__
- >>> sorted(address.address for address in mlist.members.addresses)
+ >>> sorted(address.address for address in mlist2.members.addresses)
[u'aperson@example.com', u'bperson@example.com', u'cperson@example.com',
u'dperson@example.com', u'eperson@example.com', u'fperson@example.com']
@@ -72,7 +119,7 @@ Blank lines and lines that begin with '#' are ignored.
>>> args.input_filename = path
>>> command.process(args)
- >>> sorted(address.address for address in mlist.members.addresses)
+ >>> sorted(address.address for address in mlist2.members.addresses)
[u'aperson@example.com', u'bperson@example.com', u'cperson@example.com',
u'dperson@example.com', u'eperson@example.com', u'fperson@example.com',
u'gperson@example.com', u'iperson@example.com']
@@ -91,7 +138,7 @@ printed.
Already subscribed (skipping): gperson@example.com
Already subscribed (skipping): aperson@example.com
- >>> sorted(address.address for address in mlist.members.addresses)
+ >>> sorted(address.address for address in mlist2.members.addresses)
[u'aperson@example.com', u'bperson@example.com', u'cperson@example.com',
u'dperson@example.com', u'eperson@example.com', u'fperson@example.com',
u'gperson@example.com', u'iperson@example.com', u'jperson@example.com']