[IMP] Use the openerp namespace in YML tests.
[odoo/odoo.git] / openerpcommand / uninstall.py
1 """
2 Install OpenERP on a new (by default) database.
3 """
4 import os
5 import sys
6
7 import common
8
9 # TODO turn template1 in a parameter
10 # This should be exposed from openerp (currently in
11 # openerp/service/web_services.py).
12 def create_database(database_name):
13     import openerp
14     db = openerp.sql_db.db_connect('template1')
15     cr = db.cursor() # TODO `with db as cr:`
16     try:
17         cr.autocommit(True)
18         cr.execute("""CREATE DATABASE "%s"
19             ENCODING 'unicode' TEMPLATE "template1" """ \
20             % (database_name,))
21     finally:
22         cr.close()
23
24 def run(args):
25     assert args.database
26     assert args.module
27
28     import openerp
29
30     config = openerp.tools.config
31     config['log_handler'] = [':CRITICAL']
32     if args.addons:
33         args.addons = args.addons.split(':')
34     else:
35         args.addons = []
36     config['addons_path'] = ','.join(args.addons)
37     openerp.netsvc.init_logger()
38
39     # Install the import hook, to import openerp.addons.<module>.
40     openerp.modules.module.initialize_sys_path()
41     openerp.modules.loading.open_openerp_namespace()
42
43     registry = openerp.modules.registry.RegistryManager.get(
44         args.database, update_module=False)
45
46     ir_module_module = registry.get('ir.module.module')
47     cr = registry.db.cursor() # TODO context manager
48     try:
49         ids = ir_module_module.search(cr, openerp.SUPERUSER_ID, [('name', 'in', args.module), ('state', '=', 'installed')], {})
50         if len(ids) == len(args.module):
51             ir_module_module.button_immediate_uninstall(cr, openerp.SUPERUSER_ID, ids, {})
52         else:
53             print "At least one module not found (database `%s`)." % (args.database,)
54     finally:
55         cr.close()
56
57 def add_parser(subparsers):
58     parser = subparsers.add_parser('uninstall',
59         description='Uninstall some modules from an OpenERP database.')
60     parser.add_argument('-d', '--database', metavar='DATABASE',
61         **common.required_or_default('DATABASE', 'the database to modify'))
62     common.add_addons_argument(parser)
63     parser.add_argument('--module', metavar='MODULE', action='append',
64         help='specify a module to uninstall'
65         ' (this option can be repeated)')
66
67     parser.set_defaults(run=run)