Merge lp:~openerp-dev/openobject-server/trunk-bug-1084943-aja into lp:openobject-server

Proposed by ajay javiya (OpenERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openobject-server/trunk-bug-1084943-aja
Merge into: lp:openobject-server
Diff against target: 44 lines (+27/-0)
1 file modified
openerp/addons/base/module/module.py (+27/-0)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/trunk-bug-1084943-aja
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+140588@code.launchpad.net

Description of the change

Hello,
Fix issue :
> module must not be installable if a dependency module is not installable.
Thank You

To post a comment you must log in.
4711. By ajay javiya (OpenERP)

[REM]: Remove unwanted parameter

Unmerged revisions

4711. By ajay javiya (OpenERP)

[REM]: Remove unwanted parameter

4710. By ajay javiya (OpenERP)

[FIX] : Module must not be installable if depency is unmet

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openerp/addons/base/module/module.py'
2--- openerp/addons/base/module/module.py 2012-12-17 14:30:29 +0000
3+++ openerp/addons/base/module/module.py 2012-12-19 06:08:20 +0000
4@@ -400,6 +400,14 @@
5 :returns: next res.config item to execute
6 :rtype: dict[str, object]
7 """
8+ uninstallable = []
9+ dependency_ids=self.upstream_dependencies(cr,uid,ids,context)
10+ for dependency_id in dependency_ids:
11+ uninstalled_modules = self.browse(cr, uid ,dependency_id, context)
12+ if uninstalled_modules.state == "uninstallable":
13+ uninstallable.append(uninstalled_modules.shortdesc)
14+ if uninstallable:
15+ raise orm.except_orm(_('Warning '), _("Unmet dependencies \n-%s ") % ('\n-'.join(uninstallable)))
16 return self._button_immediate_function(cr, uid, ids, self.button_install, context=context)
17
18 def button_install_cancel(self, cr, uid, ids, context=None):
19@@ -419,6 +427,25 @@
20 ir_model_data._module_data_uninstall(cr, uid, modules_to_remove, context)
21 self.write(cr, uid, ids, {'state': 'uninstalled'})
22 return True
23+
24+ def upstream_dependencies(self, cr,uid,ids,known_dep_ids=None,context=None):
25+ if not ids: return []
26+ known_dep_ids = set(known_dep_ids or [])
27+ cr.execute('''SELECT DISTINCT m.id
28+ FROM
29+ ir_module_module m
30+ JOIN
31+ ir_module_module_dependency d ON (m.id = d.module_id)
32+ WHERE
33+ m.name
34+ IN( SELECT name FROM ir_module_module_dependency
35+ WHERE module_id IN %s)''',(tuple(ids),))
36+ new_dep_ids = set([m[0] for m in cr.fetchall()])
37+ missing_mod_ids = new_dep_ids - known_dep_ids
38+ known_dep_ids |= new_dep_ids
39+ if missing_mod_ids:
40+ known_dep_ids |= set(self.upstream_dependencies(cr, uid, list(missing_mod_ids), known_dep_ids, context))
41+ return list(known_dep_ids)
42
43 def downstream_dependencies(self, cr, uid, ids, known_dep_ids=None,
44 exclude_states=['uninstalled','uninstallable','to remove'],