author | Pascal Volk <user@localhost.localdomain.org> |
Mon, 24 Mar 2014 18:17:08 +0100 | |
changeset 747 | 670120e0fbb9 |
parent 703 | 58815c004a61 |
child 711 | 2a75058fc064 |
permissions | -rw-r--r-- |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
1 |
# -*- coding: UTF-8 -*- |
703
58815c004a61
Updated copyright notices to include the year 2014.
Pascal Volk <user@localhost.localdomain.org>
parents:
675
diff
changeset
|
2 |
# Copyright (c) 2007 - 2014, Pascal Volk |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
3 |
# See COPYING for distribution information. |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
4 |
""" |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
5 |
VirtualMailManager.cli.main |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
6 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
8 |
VirtualMailManager's command line interface. |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
9 |
""" |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
10 |
|
343
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
11 |
from ConfigParser import NoOptionError, NoSectionError |
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
12 |
|
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
13 |
from VirtualMailManager import ENCODING, errors |
343
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
14 |
from VirtualMailManager.config import BadOptionError, ConfigValueError |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
15 |
from VirtualMailManager.cli import w_err |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
16 |
from VirtualMailManager.cli.handler import CliHandler |
354
a653c43048b1
VMM/cli/main: Adjusted _get_handler() to changes in config module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
343
diff
changeset
|
17 |
from VirtualMailManager.constants import DATABASE_ERROR, EX_MISSING_ARGS, \ |
a653c43048b1
VMM/cli/main: Adjusted _get_handler() to changes in config module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
343
diff
changeset
|
18 |
EX_SUCCESS, EX_UNKNOWN_COMMAND, EX_USER_INTERRUPT, INVALID_ARGUMENT |
420
d4a341248500
VMM/cli/subcommands: Added function update_cmd_map().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
19 |
from VirtualMailManager.cli.subcommands import RunContext, cmd_map, \ |
d4a341248500
VMM/cli/subcommands: Added function update_cmd_map().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
20 |
update_cmd_map, usage |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
21 |
|
47
191d5a5adc4a
* Removed gettext import and setup in VirtualMailManager/:
Pascal Volk <neverseen@users.sourceforge.net>
parents:
45
diff
changeset
|
22 |
|
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
23 |
_ = lambda msg: msg |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
24 |
|
343
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
25 |
|
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
26 |
def _get_handler(): |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
27 |
"""Try to get a CliHandler. Exit the program when an error occurs.""" |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
28 |
try: |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
29 |
handler = CliHandler() |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
30 |
except (errors.NotRootError, errors.PermissionError, errors.VMMError, |
343
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
31 |
errors.ConfigError), err: |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
32 |
w_err(err.code, _(u'Error: %s') % err.msg) |
48
0d5f58f8b8f5
* 'VirtualMailManager/Exceptions.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
47
diff
changeset
|
33 |
else: |
354
a653c43048b1
VMM/cli/main: Adjusted _get_handler() to changes in config module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
343
diff
changeset
|
34 |
handler.cfg_install() |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
35 |
return handler |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
36 |
|
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
37 |
|
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
38 |
def run(argv): |
420
d4a341248500
VMM/cli/subcommands: Added function update_cmd_map().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
39 |
update_cmd_map() |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
40 |
if len(argv) < 2: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
41 |
usage(EX_MISSING_ARGS, _(u"You must specify a subcommand at least.")) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
43 |
sub_cmd = argv[1].lower() |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
44 |
if sub_cmd in cmd_map: |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
45 |
cmd_func = cmd_map[sub_cmd].func |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
46 |
else: |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
47 |
for cmd in cmd_map.itervalues(): |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
48 |
if cmd.alias == sub_cmd: |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
49 |
cmd_func = cmd.func |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
50 |
sub_cmd = cmd.name |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
51 |
break |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
52 |
else: |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
53 |
usage(EX_UNKNOWN_COMMAND, _(u"Unknown subcommand: '%s'") % sub_cmd) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
54 |
|
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
55 |
handler = _get_handler() |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
56 |
run_ctx = RunContext(argv, handler, sub_cmd) |
147
e3fd0b67ae50
Improved error handling in vmm's {user,alias,relocated}info.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
142
diff
changeset
|
57 |
try: |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
58 |
cmd_func(run_ctx) |
183
eb4c73d9d0a4
vmm: reworked subcommand/arguments mapping.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
180
diff
changeset
|
59 |
except (EOFError, KeyboardInterrupt): |
eb4c73d9d0a4
vmm: reworked subcommand/arguments mapping.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
180
diff
changeset
|
60 |
# TP: We have to cry, because root has killed/interrupted vmm |
eb4c73d9d0a4
vmm: reworked subcommand/arguments mapping.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
180
diff
changeset
|
61 |
# with Ctrl+C or Ctrl+D. |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
62 |
w_err(EX_USER_INTERRUPT, '', _(u'Ouch!'), '') |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
63 |
except errors.VMMError, err: |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
64 |
if err.code != DATABASE_ERROR: |
616
996bfcae49b0
VMM/cli/main: Check if we have warnings before exiting.
Pascal Volk <user@localhost.localdomain.org>
parents:
568
diff
changeset
|
65 |
if handler.has_warnings(): |
996bfcae49b0
VMM/cli/main: Check if we have warnings before exiting.
Pascal Volk <user@localhost.localdomain.org>
parents:
568
diff
changeset
|
66 |
w_err(0, _(u'Warnings:'), *handler.get_warnings()) |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
67 |
w_err(err.code, _(u'Error: %s') % err.msg) |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
68 |
w_err(err.code, unicode(err.msg, ENCODING, 'replace')) |
343
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
69 |
except (BadOptionError, ConfigValueError), err: |
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
70 |
w_err(INVALID_ARGUMENT, _(u'Error: %s') % err) |
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
71 |
except NoSectionError, err: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
72 |
w_err(INVALID_ARGUMENT, |
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
366
diff
changeset
|
73 |
_(u"Error: Unknown section: '%s'") % err.section) |
343
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
74 |
except NoOptionError, err: |
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
75 |
w_err(INVALID_ARGUMENT, |
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
76 |
_(u"Error: No option '%(option)s' in section: '%(section)s'") % |
9232ed7e4d85
VMM/cli/main: Except more errors and handle them correct.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
340
diff
changeset
|
77 |
{'option': err.option, 'section': err.section}) |
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
78 |
if handler.has_warnings(): |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
79 |
w_err(0, _(u'Warnings:'), *handler.get_warnings()) |
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
80 |
return EX_SUCCESS |
183
eb4c73d9d0a4
vmm: reworked subcommand/arguments mapping.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
180
diff
changeset
|
81 |
|
340
4515afec62e5
vmm: Renamed to VirtualMailManager/cli/main.py. Splitted subcommands
Pascal Volk <neverseen@users.sourceforge.net>
parents:
232
diff
changeset
|
82 |
del _ |