summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2009-01-23 16:16:00 -0700
committerRob Crittenden <rcritten@redhat.com>2009-02-03 15:29:03 -0500
commit0a3ae60038c7b672d83f24678e2d791b3cad443e (patch)
tree8e232b8e4759c3ac0c106e37b51fb576354bcbe4
parent0cfb0e191ad878d1b22e98ce484bf3048f7138c2 (diff)
downloadfreeipa-0a3ae60038c7b672d83f24678e2d791b3cad443e.tar.gz
freeipa-0a3ae60038c7b672d83f24678e2d791b3cad443e.tar.xz
freeipa-0a3ae60038c7b672d83f24678e2d791b3cad443e.zip
Ported xmlserver to subclass from Executioner
-rw-r--r--ipalib/rpc.py2
-rw-r--r--ipaserver/rpcserver.py30
-rwxr-xr-xlite-xmlrpc.py4
-rw-r--r--tests/test_ipaserver/test_rpcserver.py29
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)