Pular para o conteúdo
Menu
Esta pergunta foi sinalizada
3 Respostas
9665 Visualizações

Is there some way that I can check if certain module is installed from the __init__.py file (for example if I want to conditionally import one of my .py files depending on whether a specific module is installed, without having to set it as a mandatory dependency in my __openerp__.py).

I see I have no cr cursor to somehow browse it from database, nor do I have the dbname to be able to instantiate my own cursor. I was hoping I could do something like

import openerp.modules as addons
loaded_mods = addons.module.loaded
if 'addon_x' in loaded_mods:
    import addon_x_inheritage

but loaded returns an empty list [].

Is there any workable way to achieve this?

Avatar
Cancelar

Odoo Module Structure: https://goo.gl/cPZ6gM

Melhor resposta

Create a link module

If your aim to make differents behaviors depending on whether or not a module is installed, you might create a link modules.

From OpenERP 7.0 [1], you can specifiy in your __openerp__.py an option called auto_install

  auto_install     True or False (default: False). If set to ``True``, the
                   module is a link module. It will be installed as soon
                   as all its dependencies are installed.

With this, you should be able to create a module A without all dependancies, and an other link module L which pill patch your module A taking in account the changes made by the module you didn't wanted to set in the module A dependancies.

Otherwise, you may have issues with inheritances processes.


[1] [Module structure](http://doc.openerp.com/trunk/developers/server/03_module_dev_01/)

Avatar
Cancelar
Autor

Ok, this seems the most logical and elegant way to solve this particular problem. However, it would be nice to know if there is a way to specifically "check for installed modules from my __init__.py" for some other scenario.

Publicações relacionadas Respostas Visualizações Atividade
1
jul. 24
872
1
jan. 24
3517
2
mar. 23
1831
2
mar. 20
7857
4
abr. 18
3012