让你的Odoo脚本唱起来。
项目描述
Anthem 是一个工具,用于帮助自动化Odoo实例的脚本编写,包括设置、升级、测试等。
它应该是像 oerpscenario 这样的其他工具的替代品。
创作你的歌曲
编写你的歌曲就像创建一个Python包一样简单。被圣歌(anthem)调用的歌曲函数必须有一个位置参数 ctx。
ctx 实际上是执行上下文 - 你可以从中访问 ctx.env,这是一个你应该非常熟悉的Odoo环境实例。
## songs/install.py def setup_company(ctx): """ Setup company """ company = ctx.env.ref('base.main_company') company.name = 'My Company' def main(ctx): setup_company(ctx)
日志
当使用 @anthem.log、Context.log 和 Context.log_line 执行时,歌曲可以显示一些日志。
import anthem
@anthem.log
def setup_company(ctx):
""" Setting up company """
company = ctx.env.ref('base.main_company')
with ctx.log('Changing name'):
company.name = 'My Company'
ctx.log_line('Name changed')
with ctx.log('Loading a logo'):
company.logo = b64encode(LOGO_CONTENT)
ctx.log_line('Logo changed')
函数上的装饰器将显示文档字符串的第一行。装饰器和上下文管理器都将显示执行时间。上面的例子给出了
执行你的歌曲
使用命令行 anthem。假设你的歌曲和 openerp 都在 PYTHONPATH
圣歌将执行模块 songs.install 中的 main 函数,并用一个初始化了Odoo env 的 ctx。
你可以在命令行上不用 -c,而是导出环境变量 OPENERP_SERVER,带上配置文件的路径。
为了使 openerp 在 PYTHONPATH 中,你可能需要使用 pip install -e 将其安装为一个包,或者直接修改 PYTHONPATH。
为了使你的 songs 在 PYTHONPATH 中,最好是将其制作成一个Python包。
测试
依赖项
要运行测试,你必须有运行中的Postgresql,并且你有用户的访问权限(否则你将不得不修改 tests/config/odoo.cfg,加上你的数据库用户名和密码)。
运行测试
要运行圣歌(anthem)的测试,最好在一个虚拟环境中对其做一个可编辑的安装。你还必须通过安装Odoo包来准备环境。
Odoo 9.0 (Python 2)
Odoo 10.0 (Python 2)
Odoo 11.0 (Python 3)
如果需要,你可以使用(根据版本调整)删除测试数据库
这些步骤将下载Odoo的夜间版本,将其安装为包,然后安装数据库,以便测试可以针对它运行(这也是为什么使用虚拟环境很重要的原因!)
当调用 pytest 时,你必须使用将要用于测试的Odoo数据库的配置文件定义 OPENERP_SERVER 环境变量。
歌词
歌词是为最常用的案例预先定义的代码片段,例如
加载数据
有一个能力以方便的CSV格式提供数据 - 圣歌(Anthem)能够解析并加载这些数据。 load_csv 方法是为了这样做的主要入口点
参数 |
描述 |
---|---|
ctx |
圣歌上下文实例 |
model |
Odoo模型名或来自 ctx.env 的模型类 |
path |
CSV文件的绝对路径或相对路径。如果给出相对路径,您必须在环境中提供ODOO_DATA_PATH的值或设置--odoo-data-path选项。 |
标题 |
要加载的CSV列的白名单 |
header_exclude |
要忽略的CSV列的黑名单 |
fmtparams |
为csv_unireader的键词参数 |
CSV格式类似于Odoo导出格式,即:它应该包含一个字段名称集合在标题中 * 每一行连续定义一组值,用于在给定的模型上创建记录
记录
本节专门介绍针对记录的方法。
提供记录的XMLID
这就像用记录作为第一个参数,所需的XMLID作为第二个参数调用anthem.records.add_xmlid一样简单。
例如,您有一个非常特殊的res.partner记录foo
from anthem.records import add_xmlid
[...]
@anthem.log
def add_xmlid_to_foo(ctx):
"""Make Jhony Foo great again."""
foo = ctx.env['res.partner'].create({
'name': 'Jhony',
'lastname': 'Foo',
})
add_xmlid(foo, '__setup__.res_partner_foo_jhony')
从现在起,Jhony可以称为ctx.env.ref('__setup__.res_partner_foo_jhony')。
更新记录
“更新”是一个常用的术语,基本上代表更新或插入。Anthem具有执行此类操作的功能,它在Odoo数据库上。有一个名为anthem.records.create_or_update的方法,它依赖于模型、一组值和记录XMLID。
如果您的目标是首先创建记录并提供XMLID,就像前一个章节中展示的那样,create_or_update就正好符合您的需求。
示例
from anthem.records import create_or_update
[...]
@anthem.log
def create_partner_foo(ctx):
"""Ensure that Jhony Foo is known to our Company."""
create_or_update(
ctx,
model='res.partner',
xmlid='__setup__.res_partner_foo_jhony',
values={
'name': 'Jhony',
'lastname': 'Foo',
}
)
在调用时,它会
尝试通过给定的XMLID获取记录
- 如果找到记录
用给定的值更新它(在它上调用record.update(values))
- 否则
用给定的值创建记录(调用model.create(values))
为它提供一个XMLID(使用anthem.records.add_xmlid)
无论如何:返回该记录
模块
本节专门介绍针对模块的方法。
卸载模块
有时您只需要从实例中删除特定的模块,并且希望以编程方式完成,而无需到达每个实例,搜索它并点击“卸载”按钮。Anthem可以为您完成这项工作:您只需调用一个带有您不再使用的模块名称列表的anthem.lyrics.modules.uninstall即可。
示例(假设有您想要删除的模块foo和bar)
from anthem.lyrics.modules import uninstall
[...]
@anthem.log
def uninstall_foo(ctx):
"""Get rid of legacy `foo` and `bar`."""
uninstall(ctx, ['foo', 'bar'])
更新模块上的翻译
以类似的方式,有时您需要更新一组模块上的翻译 - anthem.lyrics.modules.update_translations就在那里等着您:wink
示例与上一个案例类似 - 只需调用不同的方法即可。
更新模块配置
使用此功能,您可以通过Anthem歌曲预先配置模块设置:您只需要一个明确的想法需要做什么,一个配置设置模型的实例(模型名称也行)以及一个技术配置名称与所需值的映射(Python字典形式)。
以下是sale模块配置的简要示例
from anthem.lyrics import settings
[...]
@anthem.log
def define_sale_settings(ctx):
"""Configure `sale` module."""
model = ctx.env['sale.config.settings']
# it's okay to use 'sale.config.settings' as a string though
model = 'sale.config.settings'
settings(ctx, model, {
'default_invoice_policy': 'delivery',
...: ...,
'et': 'cetera',
})
请注意:此函数不会触发设置onchange。
在Marabunta中的使用
当Anthem和Marabunta结合使用时非常强大:您可以使用以下语法在Marabunta的迁移步骤中调用一组歌曲
...
- version: 10.0.1.0.0
operations:
pre:
- anthem songs.upgrade.your_pre_song::main
post:
- anthem songs.upgrade.your_post_song::main
使用这种方法,您在由Marabunta提供的常规升级过程中,拥有初始化在实时数据库上的完整Odoo Environment实例的全部功能。
假设您需要在迁移到下一个版本时启用多公司间交易,比如说,10.0.1.1.0。在这种情况下,您首先需要在Python侧创建一个支持这首歌
# songs.upgrade.upgrade_10_0_1_1_0.py
from anthem.lyrics import settings
[...]
@anthem.log
def enable_multicompany(ctx):
"""Set up multicompany."""
settings(ctx, 'base.config.settings', {
# enable multicompany as it is
'group_light_multi_company': True,
# enable inter-company transactions
'module_inter_company_rules': True,
})
[...]
@anthem.log
def main(ctx):
enable_multicompany(ctx)
然后在迁移步骤中调用它
...
- version: 10.0.1.1.0
operations:
post:
- anthem songs.upgrade.upgrade_10_0_1_1_0::main
嘭!享受您的新多公司设置。
这就完了,朋友们!
感谢阅读。祝您黑客精神愉快,享受您的歌曲创作技巧!
发布历史
未发布
功能
错误修复
改进
文档
构建
0.14.0 (2023-05-16)
错误修复
修复更新_translation函数,并更新black版本22.3.0
将Setuptools版本固定在< 58
修复Odoo 15的环境初始化
修复Odoo 15的add_xmlid
改进
启用Travis-CI为Odoo 14和Odoo 15测试
添加:nuke_translations以允许删除已存在的翻译
0.13.0 (2019-08-29)
功能
- 重大变更:更改默认overwrite值
lyrics.modules.update_translations为False
支持Odoo SaaS版本
错误修复
使lyrics.modules.update_translations与Odoo >= 11.0兼容
0.12.2 (2019-06-21)
改进
将“tracking_disable=True”作为默认上下文加载CSV(避免创建“mail.message”记录并加快导入过程)
构建
打包:构建通用wheels
0.12.1 (2018-11-09)
文档
改进API文档
构建
现在,当添加标签时,Travis会自动将lib发布到Pypi
0.12.0 (2018-03-19)
功能
添加新的选项--odoo-data-path或环境变量ODOO_DATA_PATH。
现在,lyrics.loaders.load_csv方法现在接受一个相对路径附加到新的选项“odoo数据路径”。绝对路径仍然允许。
错误修复
lyrics.loaders.update_translations现在已弃用,因为它与lyrics.modules.update_translations重复
0.11.0 (2017-12-22)
功能
使其与Python 3和Odoo 11兼容
构建
切换到unicodecsv而不是自定义代码来处理它
修复测试设置中的波动。由于某些原因,删除了tox。
在构建中添加lint检查
0.10.0 (2017-09-19)
错误修复
禁用Odoo的xmlrpc端口
构建
添加“build-release.sh”脚本,其中包含构建和上传dist文件的命令
0.9.0 (2017-08-21)
功能
新的lyrics:modules.update_translations用于从po文件更新翻译
将lyrics的“uninstall”从uninstaller.uninstall移动到modules.uninstall,以前的路径仍然适用于向后兼容
新的lyrics上下文管理器“records.switch_company”
0.8.0 (2017-07-24)
功能
新的lyrics:定义设置,如处于界面中
添加CSV加载列控制(列白名单和黑名单)
错误修复
修复加载没有行的CSV时的错误
0.7.0 (2017-04-28)
改进
将CSV加载器拆分为函数,以便能够从CSV获取行或将行加载进来,例如在加载之前修改行
create_or_update lyrics现在接受一个模型,因此我们可以更改其环境(用户、上下文等)
新的lyrics来卸载模块
0.6.0 (2017-01-18)
功能
CSV加载器可以使用模型,以便传递上下文
错误修复
通过安装来自odoo/requirements.txt的eggs来修复测试
0.5.0 (2016-10-12)
功能
支持Odoo 10
允许指定导入文件的编码,默认为utf8
错误修复
“records.add_xmlid”lyrics不再在它已存在时失败
0.4.0 (2016-08-19)
功能
新的lyrics:从路径或流中加载CSV
添加新的ctx.log_line以打印一个符合当前缩进的行
改进
为现有的lyrics添加测试
构建
最终绿色构建!
0.3.0 (2016-07-26)
功能
添加–quiet模式
修复
将记录的字符串编码为默认编码或utf8
允许使用Ctrl-c停止anthem。
将openerp的loglevel设置为ERROR,它的日志会弄乱anthem的输出
0.2.0 (2016-07-22)
功能
使用上下文管理器Context.log和装饰器anthem.log,在歌曲中记录描述和计时信息。
from anthem import log @log def setup_company(ctx): """ Setup company """ # do stuff with ctx.log('other stuff'): # do other stuff @log def load_data(ctx): """ Load data """ # load @log def main(ctx): setup_company(ctx) load_data(ctx)
如果我们运行anthem在main上,我们将得到
running... main running... Setup company running... other stuff other stuff: 0.850s Setup company: 1.100s running... Load data Load data: 2.900s main: 4.000s
0.1.3 (2016-07-07)
修复
修正歌词以创建或更新记录
0.1.2 (2016-07-07)
添加创建xmlid的歌词
添加歌词以创建或更新记录
0.1.1 (2016-06-23)
修复了在不可编辑安装中发生的崩溃。
0.1.0 (2016-06-23)
初始发布。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
anthem-0.14.0.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a04d4e7e68dacc7f2915c3fadb842907964b7e19dda1d4fcab77528fdc65fed4 |
|
MD5 | 729a4fc179704e7155f7a619f697176f |
|
BLAKE2b-256 | 33e8c7d6bf359bfaf144d59d3f531ca042465e3419db3740c471ccfbb7f7018b |
anthem-0.14.0-py2.py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3acc3b8af66ec15840fabb7821080ad2663dc4fc03a96b12e70c30a28a27be85 |
|
MD5 | 2a90536445d84ff93158efaf5384f023 |
|
BLAKE2b-256 | 90643b6686cd0133028ab2280636afe1b2a5af37924e17274a9781946b0886ce |