Abhilash Raj pushed to branch master at GNU Mailman / Mailman Core


Commits:
9fbc107f by Abhilash Raj at 2019-12-14T22:54:25+00:00
Add a generate-alias-file argument to mailman command

Closes #469

- - - - -
c239a993 by Abhilash Raj at 2019-12-14T22:54:25+00:00
Merge branch 'peb/mailman-fix_469' into 'master'

Add a generate-alias-file argument to mailman command

Closes #469

See merge request mailman/mailman!415
- - - - -


5 changed files:

- src/mailman/commands/cli_control.py
- src/mailman/commands/docs/control.rst
- src/mailman/commands/tests/test_cli_control.py
- src/mailman/docs/NEWS.rst
- src/mailman/testing/mta.py


Changes:

=====================================
src/mailman/commands/cli_control.py
=====================================
@@ -28,6 +28,7 @@ from mailman.bin.master import WatcherState, master_state
 from mailman.config import config
 from mailman.core.i18n import _
 from mailman.interfaces.command import ICLISubCommand
+from mailman.utilities.modules import call_name
 from mailman.utilities.options import I18nCommand
 from public import public
 from zope.interface import implementer
@@ -50,6 +51,15 @@ qlog = logging.getLogger('mailman.runner')
     clean up the lock.  But if no matching process is found, the master will
     remove the apparently stale lock and make another attempt to claim the
     master lock."""))
+@click.option(
+    '--generate-alias-file', '-g',
+    is_flag=True, default=True,
+    help=_("""\
+    Generate the MTA alias files upon startup. Some MTA, like postfix, can't
+    deliver email if alias files mentioned in its configuration are not
+    present. In some situations, this could lead to a deadlock at the first
+    start of mailman3 server. Setting this option to true will make this
+    script create the files and thus allow the MTA to operate smoothly."""))
 @click.option(
     '--run-as-user', '-u',
     is_flag=True, default=True,
@@ -74,7 +84,7 @@ qlog = logging.getLogger('mailman.runner')
     Don't print status messages.  Error messages are still printed to standard
     error."""))
 @click.pass_context
-def start(ctx, force, run_as_user, quiet):
+def start(ctx, force, generate_alias_file, run_as_user, quiet):
     # Although there's a potential race condition here, it's a better user
     # experience for the parent process to refuse to start twice, rather than
     # having it try to start the master, which will error exit.
@@ -93,6 +103,10 @@ def start(ctx, force, run_as_user, quiet):
         # parent
         if not quiet:
             print(_("Starting Mailman's master runner"))
+        if generate_alias_file:
+            if not quiet:
+                print(_("Generating MTA alias maps"))
+            call_name(config.mta.incoming).regenerate()
         return
     # child: Create a new session and become the session leader, but since we
     # won't be opening any terminal devices, don't do the ultra-paranoid


=====================================
src/mailman/commands/docs/control.rst
=====================================
@@ -27,6 +27,7 @@ process in the background.
 
     >>> command('mailman start')
     Starting Mailman's master runner
+    Generating MTA alias maps
 
     >>> from mailman.commands.tests.test_cli_control import find_master
 


=====================================
src/mailman/commands/tests/test_cli_control.py
=====================================
@@ -270,6 +270,24 @@ class TestControl(unittest.TestCase):
         posargs, kws = self._execl.call_args_list[0]
         self.assertIn('--force', posargs)
 
+    def test_generate_aliases_file_on_start(self):
+        # Test that 'aliases' command is called when 'start' is called.
+        with ExitStack() as resources:
+            # To be able to get the output from aliases command, we need to
+            # capture the output from parent command, which invokes the aliases
+            # command.
+            resources.enter_context(patch(
+                'mailman.commands.cli_control.os.fork',
+                # Pretend to be the parent.
+                return_value=1))
+            mock_regenerate = resources.enter_context(
+                patch('{}.regenerate'.format(config.mta.incoming)))
+            result = self._command.invoke(start)
+            self.assertTrue('Generating MTA alias maps' in result.output)
+            # At some point, this should be moved to assert_called_once() when
+            # we drop support for Python 3.5.
+            self.assertTrue(mock_regenerate.called)
+
 
 class TestControlSimple(unittest.TestCase):
     layer = ConfigLayer


=====================================
src/mailman/docs/NEWS.rst
=====================================
@@ -27,7 +27,8 @@ Bugs
   domain names. (Closes #651)
 * Fix failing test cases due to changed API in a new version of dkimpy. (Closes
   #655)
-
+* Mailman now auto-geneartes alias maps when it starts for the first
+  time. (Closes #469)
 
 REST
 ----


=====================================
src/mailman/testing/mta.py
=====================================
@@ -41,7 +41,7 @@ class FakeMTA:
     def delete(self, mlist):
         pass
 
-    def regenerate(self, output=None):
+    def regenerate(self, directory=None):
         pass
 
 



View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/ac0879a2a4e233633820cad8c8efa3f2bf29dbac...c239a9937d6076aa9ce1e0045ac7e6bdc0f39c37

-- 
View it on GitLab: 
https://gitlab.com/mailman/mailman/compare/ac0879a2a4e233633820cad8c8efa3f2bf29dbac...c239a9937d6076aa9ce1e0045ac7e6bdc0f39c37
You're receiving this email because of your account on gitlab.com.


_______________________________________________
Mailman-checkins mailing list
Mailman-checkins@python.org
Unsubscribe: 
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org

Reply via email to