diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2009-01-23 16:16:00 -0700 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2009-02-03 15:29:03 -0500 |
commit | 0a3ae60038c7b672d83f24678e2d791b3cad443e (patch) | |
tree | 8e232b8e4759c3ac0c106e37b51fb576354bcbe4 | |
parent | 0cfb0e191ad878d1b22e98ce484bf3048f7138c2 (diff) | |
download | freeipa-0a3ae60038c7b672d83f24678e2d791b3cad443e.tar.gz freeipa-0a3ae60038c7b672d83f24678e2d791b3cad443e.tar.xz freeipa-0a3ae60038c7b672d83f24678e2d791b3cad443e.zip |
Ported xmlserver to subclass from Executioner
-rw-r--r-- | ipalib/rpc.py | 2 | ||||
-rw-r--r-- | ipaserver/rpcserver.py | 30 | ||||
-rwxr-xr-x | lite-xmlrpc.py | 4 | ||||
-rw-r--r-- | tests/test_ipaserver/test_rpcserver.py | 29 |
4 files changed, 12 insertions, 53 deletions
diff --git a/ipalib/rpc.py b/ipalib/rpc.py index 80360202..b6db683e 100644 --- a/ipalib/rpc.py +++ b/ipalib/rpc.py @@ -226,7 +226,7 @@ class xmlclient(Backend): ) ) conn = ServerProxy(self.env.xmlrpc_uri, - transport=KerbTransport(), + #transport=KerbTransport(), allow_none=True, encoding='UTF-8', ) diff --git a/ipaserver/rpcserver.py b/ipaserver/rpcserver.py index 8c04158a..9616e481 100644 --- a/ipaserver/rpcserver.py +++ b/ipaserver/rpcserver.py @@ -24,7 +24,7 @@ Also see the `ipalib.rpc` module. """ from xmlrpclib import Fault -from ipalib import Backend +from ipalib.backend import Executioner from ipalib.errors2 import PublicError, InternalError, CommandError from ipalib.rpc import xml_dumps, xml_loads from ipalib.util import make_repr @@ -39,36 +39,22 @@ def params_2_args_options(params): return (params, dict()) -class xmlserver(Backend): +class xmlserver(Executioner): """ Execution backend plugin for XML-RPC server. Also see the `ipalib.rpc.xmlclient` plugin. """ - def dispatch(self, method, params): - self.debug('Received RPC call to %r', method) - if method not in self.Command: - raise CommandError(name=method) - (args, options) = params_2_args_options(params) - result = self.Command[method](*args, **options) - return (result,) # Must wrap XML-RPC response in a tuple singleton - - def execute(self, data): + def marshaled_dispatch(self, data): """ Execute the XML-RPC request in contained in ``data``. """ try: - (params, method) = xml_loads(data) - response = self.dispatch(method, params) - print 'okay' - except Exception, e: - if not isinstance(e, PublicError): - self.exception( - '%s: %s', e.__class__.__name__, str(e) - ) - e = InternalError() - assert isinstance(e, PublicError) - self.info('%s: %s', e.__class__.__name__, str(e)) + (params, name) = xml_loads(data) + (args, options) = params_2_args_options(params) + response = (self.execute(name, *args, **options),) + except PublicError, e: + self.info('response: %s: %s', e.__class__.__name__, str(e)) response = Fault(e.errno, e.strerror) return xml_dumps(response, methodresponse=True) diff --git a/lite-xmlrpc.py b/lite-xmlrpc.py index 9c51bceb..811fe21c 100755 --- a/lite-xmlrpc.py +++ b/lite-xmlrpc.py @@ -50,9 +50,9 @@ class Server(SimpleXMLRPCServer): def _marshaled_dispatch(self, data, dispatch_method=None): """ - Use `ipaserver.rpcserver.xmlserver.execute()` to do the real work. + Use `ipaserver.rpcserver.xmlserver.marshaled_dispatch()`. """ - return api.Backend.xmlserver.execute(data) + return api.Backend.xmlserver.marshaled_dispatch(data) kw = dict(logRequests=False) diff --git a/tests/test_ipaserver/test_rpcserver.py b/tests/test_ipaserver/test_rpcserver.py index 48c1d36e..bb0cba68 100644 --- a/tests/test_ipaserver/test_rpcserver.py +++ b/tests/test_ipaserver/test_rpcserver.py @@ -48,32 +48,5 @@ class test_xmlserver(PluginTester): _plugin = rpcserver.xmlserver - def test_dispatch(self): - """ - Test the `ipaserver.rpcserver.xmlserver.dispatch` method. - """ - (o, api, home) = self.instance('Backend', in_server=True) - e = raises(errors2.CommandError, o.dispatch, 'echo', tuple()) - assert e.name == 'echo' - - class echo(Command): - takes_args = ['arg1', 'arg2+'] - takes_options = ['option1?', 'option2?'] - def execute(self, *args, **options): - assert type(args[1]) is tuple - return args + (options,) - - (o, api, home) = self.instance('Backend', echo, in_server=True) - def call(params): - response = o.dispatch('echo', params) - assert type(response) is tuple and len(response) == 1 - return response[0] - arg1 = unicode_str - arg2 = (u'Hello', unicode_str, u'world!') - options = dict(option1=u'How are you?', option2=unicode_str) - assert call((arg1, arg2, options)) == (arg1, arg2, options) - assert call((arg1,) + arg2 + (options,)) == (arg1, arg2, options) - - - def test_execute(self): + def test_marshaled_dispatch(self): (o, api, home) = self.instance('Backend', in_server=True) |