summaryrefslogtreecommitdiff
path: root/src/mailman/commands/cli_aliases.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/commands/cli_aliases.py')
-rw-r--r--src/mailman/commands/cli_aliases.py88
1 files changed, 4 insertions, 84 deletions
diff --git a/src/mailman/commands/cli_aliases.py b/src/mailman/commands/cli_aliases.py
index d692ba356..d26e5a754 100644
--- a/src/mailman/commands/cli_aliases.py
+++ b/src/mailman/commands/cli_aliases.py
@@ -25,18 +25,11 @@ __all__ = [
]
-import sys
-
-from operator import attrgetter
-from zope.component import getUtility
from zope.interface import implementer
from mailman.config import config
from mailman.core.i18n import _
from mailman.interfaces.command import ICLISubCommand
-from mailman.interfaces.listmanager import IListManager
-from mailman.interfaces.mta import (
- IMailTransportAgentAliases, IMailTransportAgentLifecycle)
from mailman.utilities.modules import call_name
@@ -51,84 +44,11 @@ class Aliases:
"""See `ICLISubCommand`."""
self.parser = parser
command_parser.add_argument(
- '-o', '--output',
- action='store', help=_("""\
- File to send the output to. If not given, a file in $VAR/data is
- used. The argument can be '-' to use standard output.."""))
- command_parser.add_argument(
- '-f', '--format',
+ '-d', '--directory',
action='store', help=_("""\
- Alternative output format to use. This is the Python object path
- to an implementation of the `IMailTransportAgentLifecycle`
- interface."""))
- command_parser.add_argument(
- '-s', '--simple',
- action='store_true', default=False, help=_("""\
- Simply output the list of aliases.
- """))
+ An alternative directory to output the various MTA files to."""))
def process(self, args):
"""See `ICLISubCommand`."""
- if args.format is not None and args.simple:
- self.parser.error(_('Cannot use both -s and -f'))
- # Does not return.
- output = None
- if args.output == '-':
- output = sys.stdout
- elif args.output is None:
- output = None
- else:
- output = args.output
- if args.simple:
- Dummy().regenerate(output)
- else:
- format_arg = (config.mta.incoming
- if args.format is None
- else args.format)
- # Call the MTA-specific regeneration method.
- call_name(format_arg).regenerate(output)
-
-
-
-@implementer(IMailTransportAgentLifecycle)
-class Dummy:
- """Dummy aliases implementation for simpler output format."""
-
- def create(self, mlist):
- """See `IMailTransportAgentLifecycle`."""
- raise NotImplementedError
-
- def delete(self, mlist):
- """See `IMailTransportAgentLifecycle`."""
- raise NotImplementedError
-
- def regenerate(self, output=None):
- """See `IMailTransportAgentLifecycle`."""
- fp = None
- close = False
- try:
- if output is None:
- # There's really no place to print the output.
- return
- elif isinstance(output, basestring):
- fp = open(output, 'w')
- close = True
- else:
- fp = output
- self._do_write_file(fp)
- finally:
- if fp is not None and close:
- fp.close()
-
- def _do_write_file(self, fp):
- # First, sort mailing lists by domain.
- by_domain = {}
- for mlist in getUtility(IListManager).mailing_lists:
- by_domain.setdefault(mlist.mail_host, []).append(mlist)
- sort_key = attrgetter('list_name')
- for domain in sorted(by_domain):
- for mlist in sorted(by_domain[domain], key=sort_key):
- utility = getUtility(IMailTransportAgentAliases)
- for alias in utility.aliases(mlist):
- print(alias, file=fp)
- print(file=fp)
+ # Call the MTA-specific regeneration method.
+ call_name(config.mta.incoming).regenerate(args.directory)