美观、健壮的Odoo CLI
项目描述
click-odoo 帮助您创建和运行美观且健壮的Odoo命令行脚本。它基于出色的Click库。
有用的社区管理脚本可以在click-odoo-contrib中找到。
快速开始
检查Odoo是否正确安装:从Odoo根目录以外的目录运行时,python -c "import odoo" 必须能正常工作。
安装 click-odoo
pip install click-odoo
假设以下脚本名为 list-users.py。
#!/usr/bin/env python
from __future__ import print_function
for u in env['res.users'].search([]):
print(u.login, u.name)
可以使用以下方式运行:
python -m click_odoo -d dbname --log-level=error ./list-users.py
或
click-odoo -d dbname --log-level=error ./list-users.py
或
./list-users.py -d dbname --log-level=error
创建脚本的另一种技术如下。假设以下脚本名为 list-users2.py。
#!/usr/bin/env python
from __future__ import print_function
import click
import click_odoo
@click.command()
@click_odoo.env_options(default_log_level='error')
@click.option('--say-hello', is_flag=True)
def main(env, say_hello):
if say_hello:
click.echo("Hello!")
for u in env['res.users'].search([]):
print(u.login, u.name)
if __name__ == '__main__':
main()
可以按照以下方式运行:
$ ./list-users2.py --help Usage: list-users2.py [OPTIONS] Options: -c, --config PATH Specify the Odoo configuration file. Other ways to provide it are with the ODOO_RC or OPENERP_SERVER environment variables, or ~/.odoorc (Odoo >= 10) or ~/.openerp_serverrc. -d, --database TEXT Specify the database name. If present, this parameter takes precedence over the database provided in the Odoo configuration file. --log-level TEXT Specify the logging level. Accepted values depend on the Odoo version, and include debug, info, warn, error, critical. [default: error] --logfile PATH Specify the log file. --rollback Rollback the transaction even if the script does not raise an exception. Note that if the script itself commits, this option has no effect, this is why it is not named dry run. This option is implied when an interactive console is started. --say-hello --help Show this message and exit. $ ./list-users2.py --say-hello -d dbname Hello! admin Administrator ...
最后,只需输入 python -m click_odoo -d dbname 或 click-odoo -d dbname 即可启动交互式shell。这将启动一个带有Odoo env的全局变量的Python REPL。
支持的Odoo版本
支持Odoo版本11、12、13、14、15和16。
一个重要的设计目标是提供跨Odoo版本的一致行为。
数据库事务
默认情况下,click-odoo 会为您提交事务,除非您的脚本抛出异常。这样,您就不需要在脚本中显式提交,这使得它们在大事务(只要它们传递相同的env)中更容易组合。
使用 --rollback 选项可以强制回滚。
在交互式会话之后总是执行回滚。如果您需要提交在交互式会话之前或期间所做的更改,请使用 env.cr.commit()。
日志记录
日志记录受通常的Odoo日志选项(--log-level,--logfile)或Odoo配置文件的控制。
请注意,--log-level 选项仅适用于 odoo 包。
命令行界面(click-odoo)
Usage: click-odoo [OPTIONS] [SCRIPT] [SCRIPT_ARGS]...
Execute a python script in an initialized Odoo environment. The script has
access to a 'env' global variable which is an odoo.api.Environment
initialized for the given database. If no script is provided, the script
is read from stdin or an interactive console is started if stdin appears
to be a terminal.
Options:
-c, --config FILE Specify the Odoo configuration file. Other
ways to provide it are with the ODOO_RC or
OPENERP_SERVER environment variables, or
~/.odoorc (Odoo >= 10) or
~/.openerp_serverrc.
--addons-path TEXT Specify the addons path. If present, this
parameter takes precedence over the addons
path provided in the Odoo configuration
file.
-d, --database TEXT Specify the database name. If present, this
parameter takes precedence over the database
provided in the Odoo configuration file.
--log-level TEXT Specify the logging level. Accepted values
depend on the Odoo version, and include
debug, info, warn, error. [default: info]
--logfile FILE Specify the log file.
--rollback Rollback the transaction even if the script
does not raise an exception. Note that if
the script itself commits, this option has
no effect. This is why it is not named dry
run. This option is implied when an
interactive console is started.
-i, --interactive / --no-interactive
Inspect interactively after running the
script.
--shell-interface TEXT Preferred shell interface for interactive
mode. Accepted values are ipython, ptpython,
bpython, python. If not provided they are
tried in this order.
--help Show this message and exit.
上面的大多数选项与 odoo 选项相同,行为也相同。可以在配置文件中设置额外的Odoo选项。但是请注意,大多数与服务器相关的选项(工作者、http接口等)都被忽略,因为在运行脚本时实际上不会启动服务器。
与 odoo shell 相比,click-odoo 的一个重要特性是能够向脚本传递参数。
为了避免 click-odoo 选项与您的脚本选项和参数之间的混淆,建议使用 -- 将它们分开。
click-odoo -d dbname -- list-users.py -d a b ./list-users.py -d dbname -- -d a b
在上面的两个示例中,sys.argv[1:] 在脚本中将包含 ['-d', 'a', 'b']。
API
click_odoo.env_options装饰器
@click_odoo.env_options() 是一个类似于 @click.option() 的装饰器,它用于插入预定义的 click-odoo 选项列表。它不是将这些选项传递给命令,而是准备一个Odoo Environment 并将其作为 env 参数传递。
它可以使用以下关键字参数进行配置:
- default_log_level
--log-level 选项的默认值(默认:'info')。
- with_rollback
控制是否启用 --rollback 选项(默认:True)。这对于创建提交后无回滚可能性的命令很有用。
- with_database
控制是否启用 --database 选项(默认:True)。这有助于创建可以访问预加载的 Odoo 配置但不包含数据库的脚本。在这种情况下,环境未设置(env 为 None)。如果 with_database 为 False,则 database_required 也隐含为 False。
- database_required
控制是否必须通过 --database 选项或 Odoo 配置文件提供数据库(默认:True)。
- database_must_exist
如果此标志为 False 且所选数据库不存在,则不失败并传递 env=None(默认:True)。
- with_addons_path
控制是否启用 --addons-path 选项(默认:False)。
- environment_manager
实验性功能 一个上下文管理器,它产生一个初始化的 odoo.api.Environment。它在解析和初始化 Odoo 配置后调用。它必须具有以下签名(与下面的 OdooEnvironment 完全相同,加上 click ctx 以及 **kwargs 以便向后兼容)
environment_manager(database, rollback, ctx, **kwargs)
自定义click_odoo.env_options(实验性)
click_odoo.env_options 是一个可以扩展用于自定义目的的类。
它目前有一个方法,该方法旨在被覆盖,具有以下签名
def get_odoo_args(self, ctx: click.Context) -> List[str]:
...
它必须返回一个由 Click 上下文计算出的 Odoo 命令行参数列表。它将在解析命令的所有参数之后,在初始化 Odoo 和调用命令函数之前调用。
click_odoo命名空间
作为便利,click_odoo 导出了 odoo 命名空间,因此 from click_odoo import odoo 是 import odoo 的别名。
OdooEnvironment上下文管理器(实验性)
此软件包还提供了一个实验性的 OdooEnvironment 上下文管理器。它打算在正确初始化 Odoo 后使用(例如解析配置文件等)。
示例
from click_odoo import OdooEnvironment
with OdooEnvironment(database='dbname') as env:
env['res.users'].search([])
开发
要运行测试,请输入 tox。测试使用 pytest 进行。要运行与特定关键字匹配的测试,例如 Odoo 12 和 Python 3.6,请使用 tox -e py36-12.0 -- -k 关键字。
此项目使用 black 作为代码格式规范,以及 isort 和 flake8。在提交之前确保遵守本地编码规范,请安装 pre-commit 并在克隆存储库后运行 pre-commit install。
有用的链接
在以下位置报告问题: https://github.com/acsone/click-odoo/issues
致谢
作者
Stéphane Bidoul (ACSONE)
贡献者
灵感来自
Odoo 自身的 shell 命令
维护者
此项目由 ACSONE SA/NV 维护。
变更
1.6.0 (2022-09-21)
特性
为 Odoo 16 和 Python 3.10 添加 CI 测试。(#51)
弃用和删除
停止支持 python < 3.6 和 Odoo 8、9、10。(#48)
1.5.0 (2021-10-08)
功能
抑制了 Odoo 15 中 Environment.manage() 为空操作的警告。(#43)
1.4.3 (2020-09-30)
功能
优化了 from click_odoo import odoo 中的 ImportError 检测,以便更容易诊断 Odoo 安装问题。(#36)
1.4.2 (2019-10-01)
Odoo 8 无条件注册 wsgi 处理程序,这在某些情况下会产生意外副作用,例如在 click-odoo-initdb 中调用 env["ir.module.module"].update_list() 时启动服务器。由于它们无用,并且其他 Odoo 版本没有安装它们,因此在 click-odoo 初始化中禁用它们。
支持 Odoo saas 版本。
1.4.1 (2019-01-24)
撤销 1.4.0 中对日志的更改
1.4.0(已提取)
添加支持使用 python -m click_odoo 启动。修复 #20。
将 --log-level 应用于根记录器,使其更加直观,不仅应用于 odoo 命名空间,还应用于脚本。 这可能会改变某些脚本的日志输出。特别是,--log-level=debug 现在将调试日志应用于所有使用的 Python 库,而不仅仅是 Odoo。可以通过 log_handler 配置项进行微调。
支持在 db_name 配置条目中包含多个以逗号分隔的数据库名称的 Odoo 配置文件。
1.3.0 (2018-11-21)
将 click ctx 传递给 environment_manager
1.2.0 (2018-11-18)
重构 @click_odoo.env_options,允许通过 click 上下文传播 env 到子命令。修复 #16。
不要记录 click Exit 异常,该异常可能由子命令在 -help 的结果中引发。
升级:- click-odoo 现在需要 click>=7
1.1.1 (2018-11-01)
将 with_addons_path 选项添加到 @click_odoo.env_options,以控制 --addons-path 选项的存在。默认为 False。在 click-odoo CLI 中启用。
1.1.0 (2018-10-31)
将 environment_manager 添加到 @click_odoo.env_options,在 odoo.api.Environment 创建时提供钩子。
将 --addons-path 选项添加到 CLI。
将 database_must_exist 选项添加到 @click_odoo.env_options,以便在数据库不存在的情况下,脚本可以按需运行。
1.0.4 (2018-10-07)
抑制弃用警告
为 Odoo 12 调整测试
1.0.3 (2018-06-05)
阐明 @env_option with_database 和 database_required 参数的行为;特别是,当 with_database 和 database_required 都设置(默认)时,如果 Odoo 配置文件中声明了数据库,则可以省略 --database 选项。
1.0.2 (2018-06-01)
重构 OdooEnvironment 类:当它不修改全局 Odoo 配置时,它更干净,所以我们完全将初始化 Odoo 配置的责任转移到 CLI 部分。
1.0.1 (2018-05-27)
更好的错误日志记录和处理:记录并转换发生在 click_odoo.env_options 下的脚本中的所有异常为 ClickException,以确保它们既在日志文件中也在控制台上(由 click 处理)可见,供用户查看。OdooEnvironment 上下文管理器不执行额外的日志记录,将该责任留给调用者。
1.0.0 (2018-05-20)
在释放 OdooEnvironment 时关闭数据库连接
公开 click_odoo.odoo_bin(根据 Odoo 系列,可能是 odoo 或 openerp-server)。尚未记录,因为理想情况下它应是对应于已安装 click_odoo.odoo 的完整路径,而我还不确定如何最好地检测它。
1.0.0b4(2018-05-17)
文档的微小改进
添加在无需--database(即无需环境变量,但使用正确初始化的Odoo库,如插件路径)的情况下运行脚本的选项
在无法获取用户上下文的情况下更具弹性
1.0.0b3(2018-03-22)
click_odoo现在导出odoo命名空间:从click_odoo导入odoo是导入odoo(>9)或导入openerp作为odoo(< =9)的别名
在env_options装饰器中添加with_rollback选项,以控制回滚选项的存在
记录env_options装饰器
1.0.0b2(2018-03-21)
在成功时提交,因此用户无需在脚本中提交,这使得脚本更容易在大事务中组合
添加–rollback选项
交互模式强制–rollback
1.0.0b1(2018-03-20)
在启动环境时清除缓存(主要用于测试)
简化并测试事务和异常处理
离开env时,将异常记录下来,以确保在使用--logfile时可见
1.0.0a2(2018-03-19)
改进事务管理:避免一些罕见的死锁
在回滚过程中发生错误时,避免掩盖原始异常
确保由click-odoo启动的脚本具有__name__ == '__main__'
添加--logfile选项
1.0.0a1(2018-03-19)
第一个alpha版本
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。