Revision: 2981
Author: jprantan
Date: Wed Apr 14 10:55:35 2010
Log: Implementation for logging arguments from library keywords as repr. Issue 531.
http://code.google.com/p/robotframework/source/detail?r=2981

Modified:
 /trunk/src/robot/common/handlers.py
 /trunk/src/robot/running/arguments.py

=======================================
--- /trunk/src/robot/common/handlers.py Fri Apr  9 08:06:17 2010
+++ /trunk/src/robot/common/handlers.py Wed Apr 14 10:55:35 2010
@@ -27,8 +27,8 @@
                              % (self.__class__.__name__, name))

     def _tracelog_args(self, logger, posargs, kwargs={}):
-        args = [ utils.unic(a) for a in posargs ] \
- + [ '%s=%s' % (utils.unic(a), utils.unic(kwargs[a])) for a in kwargs ]
+        args = [ utils.safe_repr(a) for a in posargs ] \
+ + [ '%s=%s' % (utils.unic(a), utils.safe_repr(kwargs[a])) for a in kwargs ]
         logger.trace('Arguments: [ %s ]' % ' | '.join(args))


=======================================
--- /trunk/src/robot/running/arguments.py       Wed Apr 14 06:08:25 2010
+++ /trunk/src/robot/running/arguments.py       Wed Apr 14 10:55:35 2010
@@ -203,8 +203,8 @@
         template_with_defaults = self._template_for(variables)
argument_values = self._fill(template_with_defaults, arguments, variables)
         self._check_arg_limits(argument_values, len(arguments))
-        argstr = self._set_variables(variables, argument_values)
-        self._tracelog_args(output, argstr)
+        self._set_variables(variables, argument_values)
+        self._tracelog_args(output, variables)

     def _template_for(self, variables):
         return [ _MissingArg() for _ in range(self.minargs) ] \
@@ -234,26 +234,27 @@
                 self._raise_inv_args(arg_count)

     def _set_variables(self, variables, arg_values):
-        args = []
-        varargstr = ''
+        before_varargs, varargs = self._split_args_and_varargs(arg_values)
+        for name, value in zip(self.names, before_varargs):
+            variables[name] = value
         if self._vararg:
-            varargs = self._get_varargs(arg_values)
             variables[self._vararg] = varargs
-            varargstr = ' | %s=%s' % (self._vararg, varargs)
-            arg_values = arg_values[:len(self.names)]
-        for name, value in zip(self.names, arg_values):
-            try:
-                args.append('%s=%r' % (name, value))
-            except UnicodeError:
-                args.append('%s=%s' % (name, value))
-            variables[name] = value
-        return ' | '.join(args) + varargstr
-
-    def _tracelog_args(self, logger, argstr):
-        logger.trace('Arguments: [ %s ]' % argstr)
-
-    def _get_varargs(self, args):
-        return args[len(self.names):]
+
+    def _split_args_and_varargs(self, args):
+        if not self._vararg:
+            return args, []
+        return args[:len(self.names)], args[len(self.names):]
+
+    def _tracelog_args(self, logger, variables):
+        arguments_string = self._get_arguments_as_string(variables)
+        logger.trace('Arguments: [ %s ]' % arguments_string)
+
+    def _get_arguments_as_string(self, variables):
+        args = []
+        for name in self.names + (self._vararg and [self._vararg] or []):
+            args.append('%s=%s' % (name, utils.safe_repr(variables[name])))
+        return ' | '.join(args)
+


 class PythonInitArguments(PythonKeywordArguments):

Reply via email to