Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
3 Trả lời
10334 Lượt xem

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?

Ảnh đại diện
Huỷ bỏ

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

Câu trả lời hay nhất

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/)

Ảnh đại diện
Huỷ bỏ
Tác giả

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.

Bài viết liên quan Trả lời Lượt xem Hoạt động
1
thg 7 24
1681
1
thg 1 24
4650
2
thg 3 23
2527
2
thg 3 20
8686
4
thg 4 18
3678