2016-05-23 1 views
1

J'ai vérifié la documentation sur l'interface XML-RPC here. La documentation mentionne cette méthode pour ajouter de nouveaux utilisateurs:Impossible de créer l'utilisateur avec l'interface XML-RPC: Aucun gestionnaire de ce type: Default.setUser

boolean setUser(String name, String passwd, String digestPasswd, Vector groups) 

En utilisant eulexistdb pour se connecter à mon instance existes, je lance:

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", "", []) 

Mais cela conduit à cette erreur:

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'> 

Je sais que la connexion au serveur fonctionne parce que je peux utiliser createCollection qui est également documenté sur la même page. J'utilise la version 2.2 d'eXist.

Répondre

1

La documentation d'eXist-db est incorrecte.

setUser n'est pas une fonction prise en charge par la version 2.2. Pour une meilleure liste des appels pris en charge, consultez javadoc pour RpcApi. Vous verrez que setUser n'est pas répertorié, mais que vous trouvez addAccount, ce qui peut créer de nouveaux utilisateurs. Donc, ce code fonctionne:

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, {}) 

Je recommande vraiment regarder le code de RpcConnection, qui met en œuvre RpcApi parce que la documentation de l'API ne dit presque rien sur le format des paramètres requis et sur le comportement des différentes méthodes. Par exemple getGroup renvoie un null (qui devient None en Python) lorsque le groupe demandé n'existe pas, mais getAccount déclenche une exception si le compte n'existe pas. Pourquoi? Qui sait, mais la documentation ne vous le dit pas.

+0

S'il vous plaît envisager de déposer un problème pour eXist-db à l'adresse https://github.com/exist-db/exist. – joewiz