Author: laukpe
Date: Fri Sep 19 03:26:48 2008
New Revision: 764
Added:
trunk/proto/xmlrpc/test/util.py
- copied, changed from r763,
/trunk/proto/xmlrpc/test/XmlRpcServerHandler.py
Removed:
trunk/proto/xmlrpc/test/XmlRpcServerHandler.py
trunk/proto/xmlrpc/test/port.py
Modified:
trunk/proto/xmlrpc/RobotRemoteLibrary.py
trunk/proto/xmlrpc/python/RobotRemoteServer.py
trunk/proto/xmlrpc/python/test.sh
trunk/proto/xmlrpc/test/remote_library.html
Log:
1) more cleanup, 2) clean way to shut down the server remotely (no more
hanging processes)
Modified: trunk/proto/xmlrpc/RobotRemoteLibrary.py
==============================================================================
--- trunk/proto/xmlrpc/RobotRemoteLibrary.py (original)
+++ trunk/proto/xmlrpc/RobotRemoteLibrary.py Fri Sep 19 03:26:48 2008
@@ -11,7 +11,8 @@
self._library = xmlrpclib.Server(uri) #.robotframework
def get_keyword_names(self):
- return self._library.get_keyword_names()
+ # TODO: Support also getKeywordNames (and runKeyword etc.)
+ return self._library.get_keyword_names() + ['Stop Remote Server']
# def get_keyword_arguments(self, name):
# TODO: Handle errors
@@ -21,6 +22,10 @@
# return self._library.get_keyword_documentation(name)
def run_keyword(self, name, args):
+ if name == 'Stop Remote Server':
+ self._library.stop()
+ del self._library # Needed?
+ return
try:
result = self._library.run_keyword(name, args)
except xmlrpclib.Fault, err:
Modified: trunk/proto/xmlrpc/python/RobotRemoteServer.py
==============================================================================
--- trunk/proto/xmlrpc/python/RobotRemoteServer.py (original)
+++ trunk/proto/xmlrpc/python/RobotRemoteServer.py Fri Sep 19 03:26:48 2008
@@ -1,30 +1,41 @@
import sys
-from SimpleXMLRPCServer import SimpleXMLRPCServer
-from StringIO import StringIO
from datetime import datetime
+from StringIO import StringIO
from types import MethodType, FunctionType
+from SimpleXMLRPCServer import SimpleXMLRPCServer
+try:
+ import signal
+except ImportError:
+ signal = None
class RobotRemoteServer(SimpleXMLRPCServer):
- _supported_types = (datetime, int, long, float, bool, basestring,
- tuple, dict, list)
- # TODO: What about tuple/dict/list containing non-supported types?
- # Same issue also with the ruby version.
+ _supported_types = (basestring, int, long, float, bool,
+ datetime, tuple, dict, list)
def __init__(self, library, port=8270):
- SimpleXMLRPCServer.__init__(self, ('localhost', int(port)),
- allow_none=True)
- # TODO: allow_none doesn't seem to be available in Python 2.3
+ # Cannot use allow_none attribute since it's been added in 2.5
+ SimpleXMLRPCServer.__init__(self, ('localhost', int(port)))
self._library = library
self.register_function(self.get_keyword_names)
self.register_function(self.run_keyword)
self.register_function(self.stop)
- self.register_introspection_functions()
+ # May want to enable this later. May also want to use
DocXMLRPCServer.
+ # self.register_introspection_functions()
+ if signal:
+ signal.signal(signal.SIGHUP, lambda signum, frame: self.stop())
+ signal.signal(signal.SIGINT, lambda signum, frame: self.stop())
self.serve_forever()
+ def serve_forever(self):
+ self._shutdown = False
+ while not self._shutdown:
+ self.handle_request()
+
def stop(self):
- self.server_close()
+ self._shutdown = True
+ return True
def get_keyword_names(self):
return [ attr for attr in dir(self._library) if attr[0] != '_'
@@ -44,7 +55,12 @@
return result
def _convert_value_for_xmlrpc(self, return_value):
- if isinstance(return_value, self._supported_types):
+ # Can't set 'allow_none' in init because it's only in Python 2.5
+ if return_value is None:
+ return ''
+ # TODO: What about tuple/dict/list containing non-supported types?
+ # Same issue also with the ruby version.
+ elif isinstance(return_value, self._supported_types):
return return_value
else:
return str(return_value)
Modified: trunk/proto/xmlrpc/python/test.sh
==============================================================================
--- trunk/proto/xmlrpc/python/test.sh (original)
+++ trunk/proto/xmlrpc/python/test.sh Fri Sep 19 03:26:48 2008
@@ -1,14 +1,14 @@
#!/bin/bash
-base=$(dirname $0)
-cd $base/..
+cd $(dirname $0)/..
python python/examplelibrary.py 2> /dev/null &
sleep 1
+
pybot --log none --report none --output logs/output.xml
test/remote_library.html
+
../../tools/statuschecker/statuschecker.py logs/output.xml
rebot --outputdir logs logs/output.xml
-rc=$?
-python test/XmlRpcServerHandler.py stop
-echo $rc tests failed
+
+echo $? tests failed
Modified: trunk/proto/xmlrpc/test/remote_library.html
==============================================================================
--- trunk/proto/xmlrpc/test/remote_library.html (original)
+++ trunk/proto/xmlrpc/test/remote_library.html Fri Sep 19 03:26:48 2008
@@ -96,9 +96,9 @@
<tr>
- <td></td>
+ <td>Suite Teardown</td>
- <td></td>
+ <td>Stop Remote Server</td>
<td></td>
Copied: trunk/proto/xmlrpc/test/util.py (from r763,
/trunk/proto/xmlrpc/test/XmlRpcServerHandler.py)
==============================================================================
--- /trunk/proto/xmlrpc/test/XmlRpcServerHandler.py (original)
+++ trunk/proto/xmlrpc/test/util.py Fri Sep 19 03:26:48 2008
@@ -11,7 +11,7 @@
server.stop() #.robotframework.stop()
print "Stopped server at %s" % url
-def test_xmlrpc_server(port=8072, attempts=1):
+def test_xmlrpc_server(port=8270, attempts=1):
url = 'http://localhost:%s' % port
attempts = int(attempts)
for i in range(attempts):