--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/VirtualMailManager/cli/handler.py Wed Jul 28 02:08:03 2010 +0000
@@ -0,0 +1,84 @@
+# -*- coding: UTF-8 -*-
+# Copyright (c) 2010, Pascal Volk
+# See COPYING for distribution information.
+"""
+ VirtualMailManager.cli.handler
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ A derived Handler class with a few changes/additions for cli use.
+"""
+
+import os
+
+from VirtualMailManager.errors import VMMError
+from VirtualMailManager.handler import Handler
+from VirtualMailManager.cli import read_pass
+from VirtualMailManager.cli.config import CliConfig as Cfg
+from VirtualMailManager.constants import INVALID_SECTION
+
+_ = lambda msg: msg
+
+
+class CliHandler(Handler):
+ """This class uses a `CliConfig` for configuration stuff, instead of
+ the non-interactive `Config` class.
+
+ It provides the additional methods cfgSet() and configure().
+
+ Additionally it uses `VirtualMailManager.cli.read_pass()` for for the
+ interactive password dialog.
+ """
+
+ __slots__ = () # nothing additional, also no __dict__/__weakref__
+
+ def __init__(self):
+ """Creates a new CliHandler instance.
+
+ Throws a NotRootError if your uid is greater 0.
+ """
+ # Overwrite the parent CTor partly, we use the CliConfig class
+ # and add some command line checks.
+ skip_some_checks = os.sys.argv[1] in ('cf', 'configure', 'h', 'help',
+ 'v', 'version')
+ super(CliHandler, self).__init__(skip_some_checks)
+
+ self._cfg = Cfg(self._cfg_fname)
+ self._cfg.load()
+ if not skip_some_checks:
+ self._cfg.check()
+ self._chkenv()
+
+ def cfg_set(self, option, value):
+ """Set a new value for the given option."""
+ return self._cfg.set(option, value)
+
+ def configure(self, section=None):
+ """Starts the interactive configuration.
+
+ Configures in interactive mode options in the given ``section``.
+ If no section is given (default) all options from all sections
+ will be prompted.
+ """
+ if section is None:
+ self._cfg.configure(self._cfg.sections())
+ elif self._cfg.has_section(section):
+ self._cfg.configure([section])
+ else:
+ raise VMMError(_(u'Invalid section: ā%sā') % section,
+ INVALID_SECTION)
+
+ def user_add(self, emailaddress, password=None):
+ """Prefix the parent user_add() with the interactive password
+ dialog."""
+ if password is None:
+ password = read_pass()
+ super(CliHandler, self).user_add(emailaddress, password)
+
+ def user_password(self, emailaddress, password=None):
+ """Prefix the parent user_password() with the interactive password
+ dialog."""
+ if password is None:
+ password = read_pass()
+ super(CliHandler, self).user_password(emailaddress, password)
+
+del _