OpenERP python代码开发周期是编辑代码,重启服务器并测试它.重新启动服务器是必要的,因为它是使源代码重新加载到内存中的原因,但它会增加工作节奏的烦人延迟.
由于python是一种动态语言,我想知道是否有办法强制运行python解释器(应用服务器)动态重新加载代码模块,以便可以在不重新启动应用服务器的情况下测试它?
更新:
按照reload@ecatmur建议的路径,我得到了下面的代码,但它仍然无法正常工作:
class module(osv.osv):
_inherit = "ir.module.module"
def action_reload(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids, context=context):
modulename = 'openerp.addons.' + obj.name
tmp = __import__(modulename)
pycfile = tmp.__file__
modulepath = string.replace(pycfile, ".pyc", ".py")
code=open(modulepath, 'rU').read()
compile(code, modulename, "exec")
execfile(modulepath)
reload( sys.modules[modulename] )
openerp.modules.registry.RegistryManager.delete(cr.dbname)
openerp.modules.registry.RegistryManager.new(cr.dbname)
Run Code Online (Sandbox Code Playgroud)
eca*_*mur 14
该reload内置功能将重新加载一个模块.递归重新加载更新的包有各种解决方案; 请参阅如何在Python Interpreter中重新导入更新的包?
部分问题是需要调整现有对象以从重新加载的模块引用新类等; 重新进口做得相当好.在IPython交互式控制台中,我使用autoreload扩展,虽然它不是为在IPython之外使用而设计的.
更新:从v8开始,Odoo服务器提供了--auto-reload执行此操作的选项.
很好的问题,我经常想知道同样的问题.我认为您发布的代码的主要问题是它只重新加载OpenERP模块的__init__.py文件,而不是所有单个文件.ecatmurreimport推荐的模块负责这一点,在重新加载所有内容之前,我还必须取消注册模块的报告解析器和模型类.
我module_reload在Launchpad上发布了我的模块.它似乎适用于模型类,osv_memory向导和报表解析器的更改.它不适用于旧式向导,可能还有其他方案不起作用.
这是重新加载模块的方法.
def button_reload(self, cr, uid, ids, context=None):
for module_record in self.browse(cr, uid, ids, context=context):
#Remove any report parsers registered for this module.
module_path = 'addons/' + module_record.name
for service_name, service in Service._services.items():
template = getattr(service, 'tmpl', '')
if template.startswith(module_path):
Service.remove(service_name)
#Remove any model classes registered for this module
MetaModel.module_to_models[module_record.name] = []
#Reload all Python modules from the OpenERP module's directory.
modulename = 'openerp.addons.' + module_record.name
root = __import__(modulename)
module = getattr(root.addons, module_record.name)
reimport(module)
RegistryManager.delete(cr.dbname)
RegistryManager.new(cr.dbname)
return {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7659 次 |
| 最近记录: |