Browse Source

[IMP] deal with modules whose models can't be loaded

pull/159/head
Holger Brunn 10 years ago
parent
commit
714748ce5d
  1. 36
      database_cleanup/model/purge_modules.py

36
database_cleanup/model/purge_modules.py

@ -23,6 +23,42 @@ from openerp import pooler
from openerp.osv import orm, fields from openerp.osv import orm, fields
from openerp.modules.module import get_module_path from openerp.modules.module import get_module_path
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp.addons.base.ir.ir_model import MODULE_UNINSTALL_FLAG
class IrModelConstraint(orm.Model):
_inherit = 'ir.model.constraint'
def _module_data_uninstall(self, cr, uid, ids, context=None):
'''this function crashes for constraints on undefined models'''
for this in self.browse(cr, uid, ids, context=context):
if not self.pool.get(this.model.model):
ids.remove(this.id)
this.unlink()
return super(IrModelConstraint, self)._module_data_uninstall(
cr, uid, ids, context=context)
class IrModelData(orm.Model):
_inherit = 'ir.model.data'
def _module_data_uninstall(self, cr, uid, modules_to_remove, context=None):
'''this function crashes for xmlids on undefined models or fields
referring to undefined models'''
ids = self.search(cr, uid, [('module', 'in', modules_to_remove)])
for this in self.browse(cr, uid, ids, context=context):
if this.model == 'ir.model.fields':
field = self.pool[this.model].browse(
cr, uid, [this.res_id],
context=dict(
context or {}, **{MODULE_UNINSTALL_FLAG: True}))[0]
if not self.pool.get(field.model):
this.unlink()
continue
if not self.pool.get(this.model):
this.unlink()
return super(IrModelData, self)._module_data_uninstall(
cr, uid, modules_to_remove, context=context)
class CleanupPurgeLineModule(orm.TransientModel): class CleanupPurgeLineModule(orm.TransientModel):

Loading…
Cancel
Save