The issue occurs because in bin/addons/base/ir/ir_model.py,
the self.loads collection doesn't contain everything it should.
Here is the instrumentation of the code I'm using:
@@ -723,9 +725,22 @@
module_in = ",".join(["%s"] * len(modules)) cr.execute('select id,name,model,res_id,module from ir_model_data where module IN (' + module_in + ') and noupdate=%s', modules + [False])
wkf_todo = []
+# print "*********** loads", self.loads
+ for item in self.loads:
+ if (item[0] == unicode('base') or item[0] == 'base'):
+ print "**** in loads:", item
+
for (id, name, model, res_id,module) in cr.fetchall():
if (module,name) not in self.loads:
- self.unlink_mark[(model,res_id)] = id
+# self.unlink_mark[(model,res_id)] = id
+# print "module", module
+ if module != 'base':
+ #print "****", (module,name)
+ self.unlink_mark[(model,res_id)] = id
+ else:
+ self.unlink_mark[(model,res_id)] = id
+ print "not in loads: :(module,name)", (module,name)
And then it will print (with kaboom installed):
**** in loads: ('base', 'user_root')
not in loads: :(module,name) (u'base', u'menu_administration_shortcut')
not in loads: :(module,name) (u'base', u'menu_custom')
not in loads: :(module,name) (u'base', u'next_id_4')
not in loads: :(module,name) (u'base', u'menu_low_workflow')
not in loads: :(module,name) (u'base', u'menu_custom_action')
not in loads: :(module,name) (u'base', u'menu_config')
not in loads: :(module,name) (u'base', u'menu_translation')
not in loads: :(module,name) (u'base', u'menu_translation_app')
not in loads: :(module,name) (u'base', u'menu_translation_export')
not in loads: :(module,name) (u'base', u'menu_users')
not in loads: :(module,name) (u'base', u'menu_security')
not in loads: :(module,name) (u'base', u'menu_management')
not in loads: :(module,name) (u'base', u'reporting_menu')
...
Whereas, without the 'kaboom' module installed, there are dozens of entries in the self.loads collection instead:
**** in loads: ('base', 'values_view_form_action')
**** in loads: ('base', 'bw')
**** in loads: ('base', 'JPY')
**** in loads: ('base', 'ratePLN')
**** in loads: ('base', 'CRC')
**** in loads: ('base', u'access_res_widget')
**** in loads: ('base', 'res_partner_event-wopartner-view_tree')
**** in loads: ('base', 'action_view_base_module_upgrade_window')
**** in loads: ('base', 'config_wizard_simple_view')
**** in loads: ('base', 'action_res_users')
**** in loads: ('base', 'view_translation_form')
**** in loads: ('base', u'access_res_widget_user_group_user')
**** in loads: ('base', 'ir_cron_act')
**** in loads: ('base', 'vi')
**** in loads: ('base', u'access_res_log_all')
**** in loads: ('base', 'RON')
**** in loads: ('base', 'sa')
and nothing that is not in self.loads.
I've still not been able to track why this self.loads is empty at update with kaboom installed.
Other remark: if you flag the module kaboom as 'uninstalled' using SQL, your update seems able to restore the menus but this is no long term solution.
A few comments:
The issue occurs because in bin/addons/ base/ir/ ir_model. py,
the self.loads collection doesn't contain everything it should.
Here is the instrumentation of the code I'm using:
@@ -723,9 +725,22 @@
cr.execute( 'select id,name, model,res_ id,module from ir_model_data where module IN (' + module_in + ') and noupdate=%s', modules + [False]) mark[(model, res_id) ] = id mark[(model, res_id) ] = id mark[(model, res_id) ] = id mark[(model, res_id) ] = id
module_in = ",".join(["%s"] * len(modules))
wkf_todo = []
+# print "*********** loads", self.loads
+ for item in self.loads:
+ if (item[0] == unicode('base') or item[0] == 'base'):
+ print "**** in loads:", item
+
for (id, name, model, res_id,module) in cr.fetchall():
if (module,name) not in self.loads:
- self.unlink_
+# self.unlink_
+# print "module", module
+ if module != 'base':
+ #print "****", (module,name)
+ self.unlink_
+ else:
+ self.unlink_
+ print "not in loads: :(module,name)", (module,name)
And then it will print (with kaboom installed): administration_ shortcut' ) low_workflow' ) custom_ action' ) translation' ) translation_ app') translation_ export' )
**** in loads: ('base', 'user_root')
not in loads: :(module,name) (u'base', u'menu_
not in loads: :(module,name) (u'base', u'menu_custom')
not in loads: :(module,name) (u'base', u'next_id_4')
not in loads: :(module,name) (u'base', u'menu_
not in loads: :(module,name) (u'base', u'menu_
not in loads: :(module,name) (u'base', u'menu_config')
not in loads: :(module,name) (u'base', u'menu_
not in loads: :(module,name) (u'base', u'menu_
not in loads: :(module,name) (u'base', u'menu_
not in loads: :(module,name) (u'base', u'menu_users')
not in loads: :(module,name) (u'base', u'menu_security')
not in loads: :(module,name) (u'base', u'menu_management')
not in loads: :(module,name) (u'base', u'reporting_menu')
...
Whereas, without the 'kaboom' module installed, there are dozens of entries in the self.loads collection instead: view_form_ action' ) res_widget' ) event-wopartner -view_tree' ) view_base_ module_ upgrade_ window' ) wizard_ simple_ view') on_form' ) res_widget_ user_group_ user') res_log_ all')
**** in loads: ('base', 'values_
**** in loads: ('base', 'bw')
**** in loads: ('base', 'JPY')
**** in loads: ('base', 'ratePLN')
**** in loads: ('base', 'CRC')
**** in loads: ('base', u'access_
**** in loads: ('base', 'res_partner_
**** in loads: ('base', 'action_
**** in loads: ('base', 'config_
**** in loads: ('base', 'action_res_users')
**** in loads: ('base', 'view_translati
**** in loads: ('base', u'access_
**** in loads: ('base', 'ir_cron_act')
**** in loads: ('base', 'vi')
**** in loads: ('base', u'access_
**** in loads: ('base', 'RON')
**** in loads: ('base', 'sa')
and nothing that is not in self.loads.
I've still not been able to track why this self.loads is empty at update with kaboom installed.
Other remark: if you flag the module kaboom as 'uninstalled' using SQL, your update seems able to restore the menus but this is no long term solution.