This question has been flagged
2 Replies
7355 Views

I have this issue when trying to remove a module (created for v6 but installed on v8, installed by a hired programmer) from Odoo.

Here is the error:

Traceback (most recent call last):

  File "/home/username/odoo/openerp/http.py", line 536, in _handle_exception

    return super(JsonRequest, self)._handle_exception(exception)

  File "/home/username/odoo/openerp/http.py", line 573, in dispatch

    result = self._call_function(**self.params)

  File "/home/username/odoo/openerp/http.py", line 309, in _call_function

    return checked_call(self.db, *args, **kwargs)

  File "/home/username/odoo/openerp/service/model.py", line 113, in wrapper

    return f(dbname, *args, **kwargs)

  File "/home/username/odoo/openerp/http.py", line 306, in checked_call

    return self.endpoint(*a, **kw)

  File "/home/username/odoo/openerp/http.py", line 802, in __call__

    return self.method(*args, **kw)

  File "/home/username/odoo/openerp/http.py", line 402, in response_wrap

    response = f(*args, **kw)

  File "/home/username/odoo/addons/web/controllers/main.py", line 941, in call_button

    action = self._call_kw(model, method, args, {})

  File "/home/username/odoo/addons/web/controllers/main.py", line 929, in _call_kw

    return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)

  File "/home/username/odoo/openerp/api.py", line 241, in wrapper

    return old_api(self, *args, **kwargs)

  File "/home/username/odoo/openerp/addons/base/module/wizard/base_module_upgrade.py", line 105, in upgrade_module

    openerp.modules.registry.RegistryManager.new(cr.dbname, update_module=True)

  File "/home/username/odoo/openerp/modules/registry.py", line 370, in new

    openerp.modules.load_modules(registry._db, force_demo, status, update_module)

  File "/home/username/odoo/openerp/modules/loading.py", line 423, in load_modules

    registry['ir.module.module'].module_uninstall(cr, SUPERUSER_ID, modules_to_remove.values())

  File "/home/username/odoo/openerp/api.py", line 241, in wrapper

    return old_api(self, *args, **kwargs)

  File "/home/username/odoo/openerp/addons/base/module/module.py", line 462, in module_uninstall

    ir_model_data._module_data_uninstall(cr, uid, modules_to_remove, context)

  File "/home/username/odoo/openerp/api.py", line 241, in wrapper

    return old_api(self, *args, **kwargs)

  File "/home/username/odoo/openerp/addons/base/ir/ir_model.py", line 1217, in _module_data_uninstall

    ir_model_constraint._module_data_uninstall(cr, uid, constraint_ids, context)

  File "/home/username/odoo/openerp/api.py", line 241, in wrapper

    return old_api(self, *args, **kwargs)

  File "/home/username/odoo/openerp/addons/base/ir/ir_model.py", line 575, in _module_data_uninstall

    model_obj = self.pool[model]

  File "/home/username/odoo/openerp/modules/registry.py", line 102, in __getitem__

    return self.models[model_name]

KeyError: u'custom.purchase'

How can I remove this module?

Context: This was a module developed for us for v6 and it worked fine.  We installed v8 with a different programmer who I guess tried installing that v6 module which sent an email message alerting that a product had reached its Min Reorder Point.  Now we are unable to remove it.  

I found a post here:https://www.odoo.com/forum/help-1/question/error-when-uninstalling-a-custom-module-that-inherits-from-crm-lead-keyerror-crm-lead-74761

So we tried adding ['base', 'custom'] to depends: but that didnt help.

Any ideas?

Avatar
Discard

First thing to do, test on a backup before ! You can after try to delete ir_model_data and view for this model ... Let us know ...

@Jérémy Kersten can you detail how to delete from ir_model_data ?

Best Answer

Those who run on this issue in new versions, Jérémy's solution helped me out. But he could make it more descriptive. Basically you can get the KeyError if you had a fixture/data inserted into the database via xml/csv from your custom module. This data insert used an external identifier which is saved with a model name which is not available anymore in your current code. And that prevents uninstall. Simply find these identifiers and delete them and KeyError disappears. Like wrote you can find these identifiers in Settings > Technical > Sequence & identifiers > External Identifiers, easily filter by model name.

Avatar
Discard
Best Answer

in debug mode

Settings > Technical > Sequence & identifiers > External Identifiers


KR

Avatar
Discard