[FIX] orm: correctly set the module name on the model, even when imported with
`import openerp.modules.<module_name>`. bzr revid: vmt@openerp.com-20120109101647-4hvy3n6eifzeozzq
This commit is contained in:
parent
e50025945a
commit
f24a29717e
|
@ -222,19 +222,20 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
def find_module(self, module_name, package_path):
|
def find_module(self, module_name, package_path):
|
||||||
module_parts = module_name.split('.')
|
module_parts = module_name.split('.')
|
||||||
if len(module_parts) == 3 and module_name.startswith('openerp.addons.'):
|
if len(module_parts) == 3 and module_name.startswith('openerp.modules.'):
|
||||||
return self # We act as a loader too.
|
return self # We act as a loader too.
|
||||||
|
|
||||||
# TODO list of loadable modules can be cached instead of always
|
# TODO list of loadable modules can be cached instead of always
|
||||||
# calling get_module_path().
|
# calling get_module_path().
|
||||||
if len(module_parts) == 1 and \
|
if len(module_parts) == 1 and \
|
||||||
openerp.modules.module.get_module_path(module_parts[0]):
|
openerp.modules.module.get_module_path(module_parts[0],
|
||||||
|
display_warning=False):
|
||||||
return self # We act as a loader too.
|
return self # We act as a loader too.
|
||||||
|
|
||||||
def load_module(self, module_name):
|
def load_module(self, module_name):
|
||||||
|
|
||||||
module_parts = module_name.split('.')
|
module_parts = module_name.split('.')
|
||||||
if len(module_parts) == 3 and module_name.startswith('openerp.addons.'):
|
if len(module_parts) == 3 and module_name.startswith('openerp.modules.'):
|
||||||
module_part = module_parts[2]
|
module_part = module_parts[2]
|
||||||
if module_name in sys.modules:
|
if module_name in sys.modules:
|
||||||
return sys.modules[module_name]
|
return sys.modules[module_name]
|
||||||
|
@ -247,16 +248,19 @@ if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
# Check if the bare module name clashes with another module.
|
# Check if the bare module name clashes with another module.
|
||||||
f, path, descr = imp.find_module(module_part)
|
f, path, descr = imp.find_module(module_part)
|
||||||
print "Warning: ambiguous import:", module_name, f, path, descr
|
logger = logging.getLogger('init')
|
||||||
|
logger.warning("""
|
||||||
|
Ambiguous import: the OpenERP module `%s` is shadowing another module
|
||||||
|
(available at %s).""" % (module_name, path))
|
||||||
except ImportError, e:
|
except ImportError, e:
|
||||||
# Using `import openerp.addons.<module_name>` instead of
|
# Using `import <module_name>` instead of
|
||||||
# `import <module_name>` is ugly but not harmful.
|
# `import openerp.modules.<module_name>` is ugly but not harmful.
|
||||||
pass
|
pass
|
||||||
|
|
||||||
f, path, descr = imp.find_module(module_part, openerp.modules.module.ad_paths)
|
f, path, descr = imp.find_module(module_part, openerp.modules.module.ad_paths)
|
||||||
mod = imp.load_module(module_name, f, path, descr)
|
mod = imp.load_module(module_name, f, path, descr)
|
||||||
sys.modules[module_part] = mod
|
sys.modules[module_part] = mod
|
||||||
sys.modules['openerp.addons.' + module_part] = mod
|
sys.modules['openerp.modules.' + module_part] = mod
|
||||||
return mod
|
return mod
|
||||||
|
|
||||||
openerp.modules.module.initialize_sys_path()
|
openerp.modules.module.initialize_sys_path()
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
This module serves to contain all OpenERP addons, across all configured addons
|
This module serves to contain all OpenERP addons, across all configured addons
|
||||||
paths. For the code to manage those addons, see openerp.modules.
|
paths. For the code to manage those addons, see openerp.modules.
|
||||||
|
|
||||||
Addons are made available here (i.e. under openerp.addons) after
|
Addons are made available under `openerp.modules` after
|
||||||
openerp.tools.config.parse_config() is called (so that the addons paths
|
openerp.tools.config.parse_config() is called (so that the addons paths are
|
||||||
are known).
|
known).
|
||||||
|
|
||||||
This module also conveniently reexports some symbols from openerp.modules.
|
This module also conveniently reexports some symbols from openerp.modules.
|
||||||
Importing them from here is deprecated.
|
Importing them from here is deprecated.
|
||||||
|
|
|
@ -70,7 +70,7 @@ def initialize_sys_path():
|
||||||
ad_paths.append(_ad) # for get_module_path
|
ad_paths.append(_ad) # for get_module_path
|
||||||
|
|
||||||
|
|
||||||
def get_module_path(module, downloaded=False):
|
def get_module_path(module, downloaded=False, display_warning=True):
|
||||||
"""Return the path of the given module.
|
"""Return the path of the given module.
|
||||||
|
|
||||||
Search the addons paths and return the first path where the given
|
Search the addons paths and return the first path where the given
|
||||||
|
@ -85,7 +85,8 @@ def get_module_path(module, downloaded=False):
|
||||||
|
|
||||||
if downloaded:
|
if downloaded:
|
||||||
return opj(_ad, module)
|
return opj(_ad, module)
|
||||||
logger.notifyChannel('init', netsvc.LOG_WARNING, 'module %s: module not found' % (module,))
|
if display_warning:
|
||||||
|
logger.notifyChannel('init', netsvc.LOG_WARNING, 'module %s: module not found' % (module,))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -608,7 +608,16 @@ class MetaModel(type):
|
||||||
super(MetaModel, self).__init__(name, bases, attrs)
|
super(MetaModel, self).__init__(name, bases, attrs)
|
||||||
return
|
return
|
||||||
|
|
||||||
module_name = self.__module__.split('.')[0]
|
# The (OpenERP) module name can be in the `openerp.modules` namespace
|
||||||
|
# or not. For instance module `sale` can be imported as
|
||||||
|
# `openerp.modules.sale` (the good way) or `sale` (for backward
|
||||||
|
# compatibility).
|
||||||
|
module_parts = self.__module__.split('.')
|
||||||
|
if len(module_parts) > 2 and module_parts[0] == 'openerp' and \
|
||||||
|
module_parts[1] == 'modules':
|
||||||
|
module_name = self.__module__.split('.')[2]
|
||||||
|
else:
|
||||||
|
module_name = self.__module__.split('.')[0]
|
||||||
if not hasattr(self, '_module'):
|
if not hasattr(self, '_module'):
|
||||||
self._module = module_name
|
self._module = module_name
|
||||||
|
|
||||||
|
|
|
@ -461,9 +461,6 @@ class configmanager(object):
|
||||||
if complete:
|
if complete:
|
||||||
openerp.modules.module.initialize_sys_path()
|
openerp.modules.module.initialize_sys_path()
|
||||||
openerp.modules.loading.open_openerp_namespace()
|
openerp.modules.loading.open_openerp_namespace()
|
||||||
# openerp.addons.__path__.extend(openerp.conf.addons_paths) # This
|
|
||||||
# is not compatible with initialize_sys_path(): import crm and
|
|
||||||
# import openerp.addons.crm load twice the module.
|
|
||||||
|
|
||||||
def _generate_pgpassfile(self):
|
def _generate_pgpassfile(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue