rpc的odoo库
odoo-rpc-client的Python项目详细描述
内容
Canonical source
odoo rpc client的规范源位于GitLab。
Overview
这是OpenERP Proxy的核心部分
这个项目只是rpc client用于odoo。 此项目提供类似于 odoo对odoo对象隐藏执行操作的内部代码 xml-rpc或json-rpc在后面。
Features
- python 3.3+支持
- 您可以对任何openerp odoo对象调用任何公共方法,包括: read,search,write,unlink和其他
- 有很多速度优化(缓存,只读请求字段, 通过一次rpc调用等读取当前集合(缓存)中所有记录的数据
- 打算将ipython autocomplete的更多好处视为可能的
- 提供类似于browse_record的界面,允许浏览相关的 模特也是。支持浏览方法。 还添加了方法搜索记录以简化 搜索和读取操作。
- 扩展支持。您可以轻松地修改这个库的大多数组件 创建自己的扩展和插件。这真的很简单。参见中的示例 openerp_proxy/ext/目录。
- 插件支持。插件和扩展是一样的,但目的是实现额外的逻辑。 例如看odoo_rpc_client/plugins 以及odoo_rpc_client/plugin.py
- 支持json-rpc用于8+版本的odoo
- 支持在rpc方法调用(服务器版本6.1及更高版本)中使用命名参数。
- 实验性与AnyField 集成
- 错过的功能?在GitHub或GitLab上填写并发布
Quick example
fromodoo_rpc_clientimportClient# assume that odoo server is listening localhost on standard 8069 port and# have database 'my_db'.client=Client('localhost','my_db','user','password')# get current userclient.userprint(client.user.name)# simple rpc callsclient.execute('res.partner','read',[user.partner_id.id])# Model browsingSaleOrder=client['sale.order']s_orders=SaleOrder.search_records([])fororderins_orders:print(order.name)forlineinorder.order_line:print("\t%s"%line.name)print("-"*5)print()
Supported Odoo server versions
测试对象: -odoo版本:7.0,8.0,9.0,10.0,11.0,12.0 -python版本:2.7,3.3,3.4,3.5,3.6,3.7
Usage
Connect to server / database
使用as lib和使用as shell之间的一个区别是 已创建到数据库的连接。当用作外壳时 是会话,它提供了一些交互性。但当用作库时 在大多数情况下不需要这种交互,所以连接 应该手动创建,提供来自其他一些源的连接数据 比如配置文件之类的。
下面是一种创建连接的方法
fromodoo_rpc_clientimportClientdb=Client(host='my_host.int',dbname='my_db',user='my_db_user',pwd='my_password here')
接下来,shell和lib的用法没有什么不同。
General usage
例如,让我们试着找出有多少销售订单处于“完成”状态 我们的数据库。(请参阅以上各节以获取有关如何连接到ODOO数据库的帮助)
>>>sale_order_obj=db['sale.order']# or You may use 'db.get_obj('sale.order')' if You like>>>>>># Now lets search for sale orders:>>>sale_order_obj.search([('state','=','done')],count=True)5
所以我们有5个订单处于完成状态。所以让我们读一下。
从odoo读取数据的默认方法是搜索所需的记录 使用search方法返回记录的id列表,然后读取 使用read方法的数据。两种方法基本相同 一个:
>>>sale_order_ids=sale_order_obj.search([('state','=','done')])>>>sale_order_datas=sale_order_obj.read(sale_order_ids,['name'])# Last argument is optional.# it describes list of fields to read# if it is not provided then all fields# will be read>>>sale_order_datas[0]{'id':3,'name':'SO0004'}
正如我们所看到的那样,以这种方式读取数据可以让我们得到字典列表 其中每个包含字段都已读取
另一种读取数据的方法是使用 搜索记录 或 阅读单词 方法。每种方法都接收与search或 read方法。但是传递count参数 search\_records将导致错误。这些方法的主要区别 在使用记录类时 不是dict而是读取了每个记录。记录类为记录提供了一些类似orm的能力, 例如,允许将访问字段作为属性并提供机制 懒散地获取相关字段。
>>>sale_orders=sale_order_obj.search_records([('state','=','done')])>>>sale_orders[0]R(sale.order,9)[SO0011]>>>>>># So we have list of Record objects. Let's check what they are>>>so=sale_orders[0]>>>so.id9>>>so.nameSO0011>>>so.partner_idR(res.partner,9)[BetterCorp]>>>>>>so.partner_id.nameBetterCorp>>>so.partner_id.activeTrue
Additional features
插件
在0.4版中,插件系统被完全重构。在这个版本 我们开始使用extend_me 库来轻松构建扩展和插件。
插件是提供应该可用的功能的常用类。 在db.plugins.*点,实现与核心系统无关的逻辑。
有关详细信息,请参见source code和 documentation