开发odoo模块时,懒得通过ui进行模块升级,由于开发过程中更新模块可能比较频繁,干脆利用odoo的xmlrpc功能直接进行模块更新. xmlrpclib(python2下使用) 包下载 代码如下: # !/usr/bin/env pyth
开发odoo模块时,懒得通过ui进行模块升级,由于开发过程中更新模块可能比较频繁,干脆利用odoo的xmlrpc功能直接进行模块更新.
xmlrpclib(python2下使用) 包下载
代码如下:
#!/usr/bin/env python2 # -*- coding: utf-8 -*- import xmlrpclib db_name="demo" #要访问的数据库名称 自行修改 db_pwd="user" #密码 自行修改 db_user="111" #用户名 自行修改 url="http://localhost" #odoo服务器地址 自行修改 wait_for_upgrade=[‘stock‘,‘sale‘] #待更新的模块列表 自行修改 try: server=xmlrpclib.ServerProxy(‘{}/xmlrpc/2/common‘.format(url)) except Exception as e: print("连接服务器失败..") print(e) exit() uid = server.authenticate(db_name, db_user, db_pwd, {}) module_domain=[[(‘name‘,‘in‘,wait_for_upgrade)]] if uid: models = xmlrpclib.ServerProxy(‘{}/xmlrpc/2/object‘.format(url)) module_ids=models.execute_kw(db_name, uid, db_pwd, ‘ir.module.module‘, ‘search‘, module_domain, {}) if not module_ids: print("没有模块需要升级") exit() upgrade_module_list=models.execute_kw(db_name, uid, db_pwd,‘ir.module.module‘,‘read‘,[module_ids],{‘fields‘:[‘id‘,‘name‘]}) print(upgrade_module_list) for module_info in upgrade_module_list: module_name=module_info[‘name‘] module_id=module_info[‘id‘] print("开始升级模块:%s...."%module_info[‘name‘]) try: result=models.execute_kw(db_name, uid, db_pwd,‘ir.module.module‘,‘button_immediate_upgrade‘,[[module_id]],{}) if result.get(‘url‘) and result.get(‘type‘) and result.get(‘target‘): print("模块 %s 升级成功!" %module_name) else: print("模块 %s 升级失败!"% module_name) except Exception as e: print("模块 %s 升级中发生了错误!" %module_name) print(e) else: print("无效的用户名或者密码!")