# -*- coding: UTF-8 -*-# Copyright (c) 2007 - 2012, Pascal Volk# See COPYING for distribution information.""" VirtualMailManager.cli.main ~~~~~~~~~~~~~~~~~~~~~~~~~~~ VirtualMailManager's command line interface."""fromconfigparserimportNoOptionError,NoSectionErrorfromVirtualMailManagerimportENCODING,errorsfromVirtualMailManager.configimportBadOptionError,ConfigValueErrorfromVirtualMailManager.cliimportw_errfromVirtualMailManager.cli.handlerimportCliHandlerfromVirtualMailManager.constantsimportDATABASE_ERROR,EX_MISSING_ARGS, \EX_SUCCESS,EX_UNKNOWN_COMMAND,EX_USER_INTERRUPT,INVALID_ARGUMENTfromVirtualMailManager.cli.subcommandsimportRunContext,cmd_map, \update_cmd_map,usage_=lambdamsg:msgdef_get_handler():"""Try to get a CliHandler. Exit the program when an error occurs."""try:handler=CliHandler()except(errors.NotRootError,errors.PermissionError,errors.VMMError,errors.ConfigError)aserr:w_err(err.code,_('Error: %s')%err.msg)else:handler.cfg_install()returnhandlerdefrun(argv):update_cmd_map()iflen(argv)<2:usage(EX_MISSING_ARGS,_("You must specify a subcommand at least."))sub_cmd=argv[1].lower()ifsub_cmdincmd_map:cmd_func=cmd_map[sub_cmd].funcelse:forcmdincmd_map.values():ifcmd.alias==sub_cmd:cmd_func=cmd.funcsub_cmd=cmd.namebreakelse:usage(EX_UNKNOWN_COMMAND,_("Unknown subcommand: '%s'")%sub_cmd)handler=_get_handler()run_ctx=RunContext(argv,handler,sub_cmd)try:cmd_func(run_ctx)except(EOFError,KeyboardInterrupt):# TP: We have to cry, because root has killed/interrupted vmm# with Ctrl+C or Ctrl+D.w_err(EX_USER_INTERRUPT,'',_('Ouch!'),'')excepterrors.VMMErroraserr:iferr.code!=DATABASE_ERROR:ifhandler.has_warnings():w_err(0,_('Warnings:'),*handler.get_warnings())w_err(err.code,_('Error: %s')%err.msg)w_err(err.code,str(err.msg,ENCODING,'replace'))except(BadOptionError,ConfigValueError)aserr:w_err(INVALID_ARGUMENT,_('Error: %s')%err)exceptNoSectionErroraserr:w_err(INVALID_ARGUMENT,_("Error: Unknown section: '%s'")%err.section)exceptNoOptionErroraserr:w_err(INVALID_ARGUMENT,_("Error: No option '%(option)s' in section: '%(section)s'")%{'option':err.option,'section':err.section})ifhandler.has_warnings():w_err(0,_('Warnings:'),*handler.get_warnings())returnEX_SUCCESSdel_