summaryrefslogtreecommitdiff
path: root/openerp/modules/module.py
diff options
context:
space:
mode:
authorVo Minh Thu <vmt@openerp.com>2011-10-03 17:35:09 +0200
committerVo Minh Thu <vmt@openerp.com>2011-10-03 17:35:09 +0200
commitd9b6f5e2d0d0c30e4e55bc72454b6ec4b720232c (patch)
tree14eb229c961e3413abd06b6ad1a86d64d2d3a2ab /openerp/modules/module.py
parentfbb6e5e56aaf36ff652edbec0181a0fcb95a3601 (diff)
parentbf3d0d604c89edfd709603c8ca261d020e9ac748 (diff)
[MERGE] merged trunk.
bzr revid: vmt@openerp.com-20111003153509-8mbfg1t8hm92pult
Diffstat (limited to 'openerp/modules/module.py')
-rw-r--r--openerp/modules/module.py35
1 files changed, 20 insertions, 15 deletions
diff --git a/openerp/modules/module.py b/openerp/modules/module.py
index 1514e836dd8..809339897ab 100644
--- a/openerp/modules/module.py
+++ b/openerp/modules/module.py
@@ -31,7 +31,6 @@ import openerp.osv as osv
import openerp.tools as tools
import openerp.tools.osutil as osutil
from openerp.tools.safe_eval import safe_eval as eval
-import openerp.pooler as pooler
from openerp.tools.translate import _
import openerp.netsvc as netsvc
@@ -58,6 +57,11 @@ loaded = []
logger = netsvc.Logger()
def initialize_sys_path():
+ """ Add all addons paths in sys.path.
+
+ This ensures something like ``import crm`` works even if the addons are
+ not in the PYTHONPATH.
+ """
global ad_paths
if ad_paths:
@@ -245,11 +249,14 @@ def load_information_from_description_file(module):
info.setdefault('website', '')
info.setdefault('name', False)
info.setdefault('description', '')
+ info.setdefault('complexity', False)
info['certificate'] = info.get('certificate') or None
info['web'] = info.get('web') or False
info['license'] = info.get('license') or 'AGPL-3'
info.setdefault('installable', True)
info.setdefault('active', False)
+ # If the following is provided, it is called after the module is --loaded.
+ info.setdefault('post_load', None)
for kind in ['data', 'demo', 'test',
'init_xml', 'update_xml', 'demo_xml']:
info.setdefault(kind, [])
@@ -271,7 +278,6 @@ def init_module_models(cr, module_name, obj_list):
TODO better explanation of _auto_init and init.
"""
-
logger.notifyChannel('init', netsvc.LOG_INFO,
'module %s: creating or updating database tables' % module_name)
todo = []
@@ -290,23 +296,22 @@ def init_module_models(cr, module_name, obj_list):
t[1](cr, *t[2])
cr.commit()
+# Import hook to write a addon m in both sys.modules['m'] and
+# sys.modules['openerp.addons.m']. Otherwise it could be loaded twice
+# if imported twice using different names.
+#class MyImportHook(object):
+# def find_module(self, module_name, package_path):
+# print ">>>", module_name, package_path
+# def load_module(self, module_name):
+# raise ImportError("Restricted")
-def load_module(module_name):
- """ Load a Python module found on the addons paths."""
- fm = imp.find_module(module_name, ad_paths)
- try:
- imp.load_module(module_name, *fm)
- finally:
- if fm[0]:
- fm[0].close()
-
+#sys.meta_path.append(MyImportHook())
def register_module_classes(m):
""" Register module named m, if not already registered.
- This will load the module and register all of its models. (Actually, the
- explicit constructor call of each of the models inside the module will
- register them.)
+ This loads the module and register all of its models, thanks to either
+ the MetaModel metaclass, or the explicit instantiation of the model.
"""
@@ -326,7 +331,7 @@ def register_module_classes(m):
try:
zip_mod_path = mod_path + '.zip'
if not os.path.isfile(zip_mod_path):
- load_module(m)
+ __import__(m)
else:
zimp = zipimport.zipimporter(zip_mod_path)
zimp.load_module(m)