diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-11-25 11:54:51 -0700 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-11-25 11:54:51 -0700 |
commit | 7350ccbffefdf81992b3ccd8aac814f3bb954be8 (patch) | |
tree | cdd07d157a310f2bb801d736f5d44e65eaa032e2 /ipa_server | |
parent | 2d458a12339fbb7ef006ff7defc1e2f541e2f23f (diff) | |
download | freeipa-7350ccbffefdf81992b3ccd8aac814f3bb954be8.tar.gz freeipa-7350ccbffefdf81992b3ccd8aac814f3bb954be8.tar.xz freeipa-7350ccbffefdf81992b3ccd8aac814f3bb954be8.zip |
Started fleshing out doodles in xmlrpc.execute()
Diffstat (limited to 'ipa_server')
-rw-r--r-- | ipa_server/rpc.py | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/ipa_server/rpc.py b/ipa_server/rpc.py index 51007134b..34de915cb 100644 --- a/ipa_server/rpc.py +++ b/ipa_server/rpc.py @@ -18,14 +18,24 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA """ -Dispatcher for RPC server. +Execute an RPC request. """ +from xmlrpclib import dumps, loads, Fault from ipalib import Backend -from ipalib.errors import CommandError +from ipalib.errors import HandledError, CommandError from ipalib.rpc import xmlrpc_wrap, xmlrpc_unwrap +def params_2_args_options(params): + assert type(params) is tuple + if len(params) == 0: + return (tuple(), dict()) + if type(params[-1]) is dict: + return (params[:-1], params[-1]) + return (params, dict()) + + class xmlrpc(Backend): def dispatch(self, method, params): @@ -34,4 +44,17 @@ class xmlrpc(Backend): self.info('Received RPC call to %r', method) if method not in self.Command: raise CommandError(name=method) - params = xml_unwrap(params) + (args, options) = params_2_args_options(xmlrpc_unwrap(params)) + result = self.Command[method](*args, **options) + return (xmlrpc_wrap(result),) + + def execute(self, data, ccache=None, client_ip=None, locale=None): + try: + (params, method) = loads(data) + response = self.dispatch(method, params) + except Exception, e: + if not isinstance(e, HandledError): + e = UnknownError() + assert isinstance(e, HandledError) + response = Fault(e.code, e.message) + return dumps(response) |