一个用于轻松构建CubicWeb客户端的Python库
项目描述
摘要
一个用于轻松构建CubicWeb客户端的Python库
远程执行RQL查询(使用rqlcontroller),
访问需要认证的实例(使用signedrequest)。
它还提供了一个简单的命令行工具(cwrql)来执行简单的请求。
需求
客户端
requests (>= 2.0)
服务器端
CubicWeb (>= 3.18.3) 与立方体 rqlcontroller 和 signedrequest
配置
cwclientlib 实现了一个 cwproxy_for(instance) 函数,它将为指定的实例构建一个 CWProxy,从配置文件中读取认证凭据(可以是ini文件、json或yaml)。默认配置文件名为 ~/.config/cwclientlibrc(使用ini文件格式),但可以通过 CWCLCONF 环境变量进行更改。例如
david@perseus:~$ cat ~/.config/cwclientlibrc
[cwo]
url = https://www.cubicweb.org/
token-id = my_cwo_token
secret = <my-secret>
[elo]
url = https://www.logilab.org
token-id = my_elo_token
secret = <my-secret>
使其可以编写
david@perseus:~$ cwrql cwo "Any N,S WHERE P eid 1251664, P name N, P summary S"
projman a project management tool
david@perseus:~$ cwrql -v ejsonexport -j cwo "Any P WHERE P eid 1251664"
[{"description": "It reads project descriptions [...]",
"modification_date": "2015/02/13 18:12:40",
"icon_format": null,
"description_format": "text/rest",
"summary": "a project management tool",
"downloadurl": "http://download.logilab.org/pub/projman",
"cwuri": "http://www.logilab.org/873",
"__cwetype__": "Project",
"eid": 1251664,
"creation_date": "2006/09/28 17:44:38",
"homepage": null,
"debian_source_package": null,
"name": "projman"}]
或
from cwclientlib import cwproxy_for
client = cwproxy_for('cwo')
# or client = cwproxy_for('https://www.cubicweb.org/')
query = 'Any X WHERE X is Ticket, X concerns P, P name "cwclientlib"'
resp = client.rql(query)
data = resp.json()
请注意,配置文件可能包含凭据,因此其权限必须只能由用户读取(仅在posix平台上检查)。
使用已签名的请求
一旦添加了立方体 signedrequest,在WebUI中
查看 CWUser 并点击操作 添加AuthToken
为令牌提供一个标识符并使其启用
在您的源代码中使用令牌标识符和令牌
配置
您可以在配置文件中定义常用cubicweb端点的URL和凭据。默认情况下,在Linux上,它将是一个位于$HOME/.config/cwclientlibrc的ini文件,但您可以定义CWCLCONF环境变量来指定它。此配置文件也可以是YAML(文件名必须以.yaml结尾)或JSON文件(.json)。
文件将看起来像
[cwo]
url = https://www.cubicweb.org/
token-id = my token id
secret = <my secret>
命令行工具
cwclientlib附带3个简单的命令行工具,允许您从shell中轻松请求cubicweb应用程序
cwrql用于执行RQL查询
david@perseus:~$ cwrql -h
Usage: cwrql [options] (url|instance_id) rqlquery [rqlquery2] ...
Options:
-h, --help show this help message and exit
-j, --json produce JSON data
-v VID, --vid=VID vid to use (default is jsonexport)
-S, --no-ssl do NOT verify ssl server certificate; ignored if --ca is
given
-c CA, --ca=CA Bundle CA to use to verify server certificate
-w, --rqlio use rqlio
david@perseus:~$ cwrql cwo "Any VN, VS WHERE V version_of P,
> P name 'cwclientlib', V num VN, V in_state S, S name VS"
0.2.1 published
0.3.0 dev
0.2.0 published
0.1.0 published
cwget用于执行任何类型的GET请求(例如,调用特定的cubicweb控制器)
david@perseus:~$ cwget cwo /testconfig/1251730 \
vid=apycot.get_configuration environment=4209277
[{"pylint_threshold": "7", "install": "python_setup", "pycoverage_threshold": "70"}]
cwshell用于连接到cubicweb端点并启动一个交互式Python shell,其中包含一些额外的内置功能 rql 和 client。此shell还提供RQL自动完成功能
david@perseus:~$ cwshell cwo
You are connected to https://www.cubicweb.org
>>> client.execute('Any X WHERE X is P
Patch Plan Project ProjectEnvironment
>>> rql('Any P, N WHERE X is Project, X name P ,V version_of X, V in_state S, V num N, S name "ready"')
[[u'cubicweb-pyramid', u'0.2.0'], [u'cubicweb-simplefacet', u'0.3.2']]
>>>
可用的额外内置功能
- client:
是与cubicweb端点连接的CWProxy实例。
- rql:
是client.execute()的快捷方式。
Python示例
简单的只读查询
from cwclientlib import cwproxy
client = cwproxy.CWProxy('http://www.cubicweb.org/')
query = 'Any X WHERE X is Ticket, X concerns P, P name "cwclientlib"'
resp = client.rql(query)
data = resp.json()
创建一个实体,使用从配置文件中读取的凭据通过signedrequest进行认证
from cwclientlib import cwproxy_for
client = cwproxy_for('cwo')
queries = [('INSERT CWUser U: U login %(l)s, U upassword %(p)s',
{'l': 'Babar', 'p': 'cubicweb rulez & 42'}), ]
resp = client.rqlio(queries)
data = resp.json()
创建一个实体,使用signedrequest手动构建认证器进行认证
from cwclientlib import cwproxy
auth = cwproxy.SignedRequestAuth('my token', '6ed44d82172211e49d9777269ec78bae')
client = cwproxy.CWProxy('https://www.cubicweb.org/', auth)
queries = [('INSERT CWUser U: U login %(l)s, U upassword %(p)s',
{'l': 'Babar', 'p': 'cubicweb rulez & 42'}), ]
resp = client.rqlio(queries)
data = resp.json()
创建一个文件实体,使用signedrequest进行认证
from io import BytesIO
from cwclientlib import cwproxy_for
client = cwproxy_for('cwo')
queries = [('INSERT File F: F data %(content)s, F data_name %(fname)s',
{'content': BytesIO('some binary data'), 'fname': 'toto.bin'})]
resp = client.rqlio(queries)
data = resp.json()
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
cwclientlib-1.3.0.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b5b145255b511735605da4350e37493f36d2a13c9f58a8b64490166c8809a55d |
|
MD5 | 163f4b6e4ce291351da71711a023b7a8 |
|
BLAKE2b-256 | 445ee0578d1c01ac3067c9460bb54fdf3c515cf6eb1287e88a24811ec583adb5 |
cwclientlib-1.3.0-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 226c094db8f350ccd9037b27b0d6a504e09db8aa42ced0f6fb84e676d53e5ac6 |
|
MD5 | 20206661200f72584f04721c85d624a0 |
|
BLAKE2b-256 | 0918b12e4b2c103e59b77b6702388c343c3f75d2f876a1bf709195986faccfac |