阅读源码的cli模块发现一个远程部署模块的命令,在官方文档并没有说,发现隐藏功能!
解决的问题
在odoo里面写界面是很烦人的,每次写完需要重启服务器并且到app界面点击升级模块才能看到效果,用部署命令即可一条命令刷新界面效果。也就是热重载。当然,这个也可以用于安装新模块。
前提条件
在 odoo/cli/deploy.py
源码中可以看到,部署命令的操作是将模块文件上传在运行中的odoo执行安装操作。
def authenticate(self, server, login, password, db=''):
print("Authenticating on server '%s' ..." % server)
# Fixate session with a given db if any
self.session.get(server + '/web/login', params=dict(db=db))
args = dict(login=login, password=password, db=db)
res = self.session.post(server + '/base_import_module/login', args)
if res.status_code == 404:
raise Exception("The server '%s' does not have the 'base_import_module' installed." % server)
elif res.status_code != 200:
raise Exception(res.text)
return res.headers.get('x-csrf-token')
复制代码
查找 /base_import_module/login
路由,发现在 addons/base_import_module 模块里,因此,我们需要先在web管理界面安装该模块 base_import_module
。
deploy命令介绍
$ odoo deploy -h
usage: odoo deploy [-h] [--db DB] [--login LOGIN] [--password PASSWORD]
[--verify-ssl] [--force]
path [url]
Deploy a module on an Odoo instance
positional arguments:
path Path of the module to deploy
url Url of the server (default=http://localhost:8069)
optional arguments:
-h, --help show this help message and exit
--db DB Database to use if server does not use db-filter.
--login LOGIN Login (default=admin)
--password PASSWORD Password (default=admin)
--verify-ssl Verify SSL certificate
--force Force init even if module is already installed. (will
update `noupdate="1"` records)
复制代码
odoo的命令解析都是用argparse模块,因此我们在传参的时候按照默认习惯就好。
从帮助上看,部署命令的使用为 odoo deploy 模块路径 网站url --login 用户名 --password 密码
使用示例
$ odoo deploy addons/my_module http://localhost:8888 --login account@email.com --password=this_is_password
Authenticating on server 'http://localhost:8888' ...
Zipping module directory...
Uploading module file...
Successfully imported module 'my_module'
复制代码
注意点
阅读 base_import_module
源码可以发现该命令只是安装或者升级模块的xml文件,并不会更新已经在运行的python代码。
个人博客 原文链接