Author: janne.t.harkonen
Date: Thu Sep 25 06:46:34 2008
New Revision: 831

Modified:
   trunk/proto/remote/Remote.py
   trunk/proto/remote/python/robotremoteserver.py

Log:
returning traceback

Modified: trunk/proto/remote/Remote.py
==============================================================================
--- trunk/proto/remote/Remote.py        (original)
+++ trunk/proto/remote/Remote.py        Thu Sep 25 06:46:34 2008
@@ -2,8 +2,8 @@

 try:
     from robot.errors import RemoteError
-except ImportError:  # RemoteError available only after 2.0.2
-    RemoteError = AssertionError
+except ImportError:
+    RemoteError = None


 class Remote:
@@ -13,7 +13,7 @@
     def __init__(self, uri='http://localhost:8270'):
         if '://' not in uri:
             uri = 'http://' + uri
-        self._library = xmlrpclib.Server(uri)  #.robotframework
+        self._library = xmlrpclib.Server(uri)

     def get_keyword_names(self):
         # TODO: Support also getKeywordNames (and runKeyword etc.)
@@ -34,7 +34,7 @@
             raise RuntimeError(err.faultString)
         print result['output']
         if result['status'] != 'PASS':
-            raise RemoteError(result['message'])
+ self._raise_failed(result['error'], result.get('traceback', ''))
         return result['return']

     def _handle_argument(self, arg):
@@ -51,3 +51,11 @@
         if item is None:
             return ''
         return str(item)
+
+    def _raise_failed(self, message, traceback):
+        if RemoteError is not None:
+            raise RemoteError(message, traceback)
+        # Support for Robot Framework 2.0.2 and earlier.
+        print '*INFO*', traceback
+        raise AssertionError(message)
+

Modified: trunk/proto/remote/python/robotremoteserver.py
==============================================================================
--- trunk/proto/remote/python/robotremoteserver.py      (original)
+++ trunk/proto/remote/python/robotremoteserver.py      Thu Sep 25 06:46:34 2008
@@ -41,20 +41,17 @@
         return names + ['stop_remote_server']

     def run_keyword(self, name, args):
-        result = {'status':'PASS', 'return':'', 'message':'', 'output':''}
+        result = {'status':'PASS', 'return':'', 'error':'',
+                  'traceback': '', 'output':''}
         self._intercept_stdout()
         try:
             return_value = self._get_keyword(name)(*args)
         except:
             result['status'] = 'FAIL'
-            result['message'], trace = self._get_error_details()
+ result['error'], result['traceback'] = self._get_error_details()
         else:
             result['return'] = self._handle_return_value(return_value)
-            trace = None
-        output = self._restore_stdout()
-        if trace is not None:
- output = output != '' and '%s\n*INFO* %s' % (output, trace) or trace
-        result['output'] = output
+        result['output'] = self._restore_stdout()
         return result

     def get_keyword_arguments(self, name):

Reply via email to