我检查了XML-RPC接口here上的文档。该文档提到了添加新用户的方法:
boolean setUser(String name, String passwd, String digestPasswd, Vector groups)
使用eulexistdb
连接到我的eXist实例,我运行:
import os
from eulexistdb.db import ExistDB
password = os.environ["PASS"]
db = ExistDB("http://localhost:8088/", "admin",
password, timeout=None, keep_alive=True)
db.server.setUser("foo", "foo", "", [])
但这导致了这个错误:
Traceback (most recent call last):
File "test.py", line 8, in <module>
db.server.setUser("foo", "foo", "", [])
File "/usr/lib/python2.7/xmlrpclib.py", line 1243, in __call__
return self.__send(self.__name, args)
File "/usr/lib/python2.7/xmlrpclib.py", line 1602, in __request
verbose=self.__verbose
File "/home/ldd/Documents/mangalam/btw/software/btw/.btw-venv/local/lib/python2.7/site-packages/eulexistdb/db.py", line 823, in request
return self.parse_response(resp)
File "/home/ldd/Documents/mangalam/btw/software/btw/.btw-venv/local/lib/python2.7/site-packages/eulexistdb/db.py", line 832, in parse_response
return unmarshaller.close()
File "/usr/lib/python2.7/xmlrpclib.py", line 800, in close
raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 0: 'No such handler: Default.setUser'>
我知道与服务器的连接有效,因为我可以使用createCollection
,这也记录在同一页面上。
我正在使用eXist 2.2版。
答案 0 :(得分:1)
eXist-db的文档错误。
setUser
不是2.2版支持的功能。有关支持哪些调用的更好列表,请查看RpcApi
的javadoc。您会看到setUser
未列出,但查找addAccount
,可以创建新用户。所以这段代码有效:
import os
from eulexistdb.db import ExistDB
password = os.environ["PASS"]
db = ExistDB("http://localhost:8088/", "admin",
password, timeout=None, keep_alive=True)
db.server.addAccount("foo", "foo", "", [], True, 0022, {})
我实际上建议查看实现RpcApi
的{{3}}代码,因为API文档几乎没有说明所需参数的格式以及各种方法的行为。例如,getGroup
在请求的组不存在时返回null
(在Python中变为None
),但如果该帐户不存在,则getAccount
会引发异常。为什么?谁知道,但文档肯定不会告诉你这个。