Цикл разработки кода Python OpenERP - это отредактировать код, перезапустить сервер и протестировать его. Перезапуск сервера необходим, потому что это то, что заставляет ваш исходный код перезагружаться в память, но он добавляет раздражающую задержку в вашем рабочем темпе.
Поскольку python - такой динамический язык, мне интересно, есть ли способ заставить запущенный интерпретатор python (сервер приложений) перезагрузить "на лету" модуль кода, чтобы его можно было протестировать без перезапуска сервера приложений?
Update:
После использования пути 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)