diff --git a/trytond/ir/module/module.py b/trytond/ir/module/module.py index 809559e6ee..a202f8a934 100644 --- a/trytond/ir/module/module.py +++ b/trytond/ir/module/module.py @@ -8,6 +8,7 @@ import trytond.tools as tools from trytond.module import ADDONS_PATH from trytond.osv.orm import ExceptORM from trytond.wizard import Wizard, WizardOSV +from trytond.pooler import get_db, restart_pool VER_REGEXP = re.compile( "^(\\d+)((\\.\\d+)*)([a-z]?)((_(pre|p|beta|alpha|rc)\\d*)*)(-r(\\d+))?$") @@ -620,3 +621,80 @@ class ModuleUpdateList(Wizard): } ModuleUpdateList() + + +class ModuleInstallUpgradeInit(WizardOSV): + _name = 'ir.module.module.install_upgrade.init' + _columns = { + 'module_info': fields.Text('Modules to update', readonly=True), + 'module_download': fields.Text('Modules to download', readonly=True), + } + +ModuleInstallUpgradeInit() + + +class ModuleInstallUpgradeStart(WizardOSV): + _name = 'ir.module.module.install_upgrade.start' + _columns = { + } + +ModuleInstallUpgradeStart() + + +class ModuleInstallUpgrade(Wizard): + "Install / Upgrade modules" + _name = 'ir.module.module.install_upgrade' + + def _get_install(self, cursor, user, data, context): + module_obj = self.pool.get('ir.module.module') + module_ids = module_obj.search(cursor, user, [ + ('state', 'in', ['to upgrade', 'to remove', 'to install']), + ], context=context) + modules = module_obj.browse(cursor, user, module_ids, context=context) + url = module_obj.download(cursor, user, module_ids, download=False, + context=context) + return { + 'module_info': '\n'.join([x.name + ': ' + x.state \ + for x in modules]), + 'module_download': '\n'.join(url), + } + + def _upgrade_module(self, cursor, user, data, context): + module_obj = self.pool.get('ir.module.module') + dbname = cursor.dbname + db = get_db(dbname) + cursor = db.cursor() + module_ids = module_obj.search(cursor, user, [ + ('state', 'in', ['to upgrade', 'to remove', 'to install']), + ], context=context) + module_obj.download(cursor, user, module_ids, context=context) + cursor.commit() + cursor.close() + restart_pool(dbname, update_module=True) + return {} + + states = { + 'init': { + 'actions': [_get_install], + 'result': { + 'type': 'form', + 'object': 'ir.module.module.install_upgrade.init', + 'state': [ + ('end', 'Cancel', 'gtk-cancel'), + ('start', 'Start Upgrade', 'gtk-ok', True), + ], + }, + }, + 'start': { + 'actions': [_upgrade_module], + 'result': { + 'type': 'form', + 'object': 'ir.module.module.install_upgrade.start', + 'state': [ + ('end', 'Close', 'gtk-close', True), + ], + }, + }, + } + +ModuleInstallUpgrade() diff --git a/trytond/ir/module/module.xml b/trytond/ir/module/module.xml index cf2ddd7a24..55369ee0ec 100644 --- a/trytond/ir/module/module.xml +++ b/trytond/ir/module/module.xml @@ -103,7 +103,7 @@ Update Module List ir.module.module.update_list - + ir.module.module.update_list.init.form ir.module.module.update_list.init form @@ -117,7 +117,7 @@ ]]> - + ir.module.module.update_list.update.form ir.module.module.update_list.update form @@ -134,5 +134,58 @@ action="act_module_update_list" type="wizard" id="menu_module_update_list"/> + + Install / Upgrade Modules + ir.module.module.install_upgrade + + + ir.module.module.install_upgrade.init.form + ir.module.module.install_upgrade.init + form + + + + + + + ]]> + + + + ir.module.module.install_upgrade.start.form + ir.module.module.install_upgrade.start + form + + + + + +