Author: janne.t.harkonen
Date: Wed Mar 25 02:25:56 2009
New Revision: 1525

Modified:
   trunk/src/robot/__init__.py
   trunk/src/robot/conf/settings.py
   trunk/src/robot/output/output.py
   trunk/src/robot/output/systemlogger.py
   trunk/utest/output/test_systemlogger.py

Log:
Use the caching feature of SYSLOG.
Caching makes it possible to use SYSLOG easily also when parsing settings

Modified: trunk/src/robot/__init__.py
==============================================================================
--- trunk/src/robot/__init__.py (original)
+++ trunk/src/robot/__init__.py Wed Mar 25 02:25:56 2009
@@ -40,7 +40,6 @@
     _run_or_rebot_from_cli(rebot, args, usage)

 def _run_or_rebot_from_cli(method, cliargs, usage, **argparser_config):
-    SYSLOG.register_command_line_monitor()
     SYSLOG.register_file_logger()
     ap = utils.ArgumentParser(usage, utils.get_full_version())
     try:
@@ -51,6 +50,7 @@
     except Information, msg:
         _exit(INFO_PRINTED, str(msg))
     except DataError, err:
+        SYSLOG.register_command_line_monitor()
         _exit(DATA_ERROR, str(err))

     try:
@@ -85,12 +85,12 @@
     SYSLOG.register_command_line_monitor(settings['MonitorWidth'],
                                          settings['MonitorColors'])
     output = Output(settings)
-    settings.report_possible_errors()
     init_global_variables(settings)
     _syslog_start_info('Robot', datasources, settings)
     suite = TestSuite(datasources, settings)
     suite.run(output)
- SYSLOG.info("Tests executed successfully. Statistics:\n%s" % suite.get_stat_message())
+    SYSLOG.info("Tests execution ended. Statistics:\n%s"
+                % suite.get_stat_message())
     testoutput = RobotTestOutput(suite, settings)
     output.close1(suite)
     if settings.is_rebot_needed():
@@ -121,7 +121,7 @@
     """
     settings = RebotSettings(options)
     SYSLOG.register_command_line_monitor(colors=settings['MonitorColors'])
-    settings.report_possible_errors()
+    SYSLOG.disable_message_cache()
     _syslog_start_info('Rebot', datasources, settings)
     testoutput = RebotTestOutput(datasources, settings)
     testoutput.serialize(settings, generator='Rebot')

Modified: trunk/src/robot/conf/settings.py
==============================================================================
--- trunk/src/robot/conf/settings.py    (original)
+++ trunk/src/robot/conf/settings.py    Wed Mar 25 02:25:56 2009
@@ -63,18 +63,10 @@

     def __init__(self, opts={}):
         self._opts = {}
-        self._errors = []
         self._cli_opts.update(self._extra_cli_opts)
         self._process_deprecated_cli_opts(opts)
         self._process_cli_opts(opts)

-    def report_possible_errors(self):
-        for msg, level in self._errors:
-            SYSLOG.write(msg, level)
-
-    def _add_error(self, msg, level='ERROR'):
-        self._errors.append((msg, level))
-
     def _process_cli_opts(self, opts):
         for name, (cli_name, default) in self._cli_opts.items():
             try:
@@ -90,11 +82,11 @@
             if oldname not in opts or opts[oldname] in [None, []]:
                 continue
             if newname:
-                self._add_error("Option '--%s' is deprecated. Use '--%s' "
-                                "instead." % (oldname, newname), 'WARN')
+ SYSLOG.warn("Option '--%s' is deprecated. Use '--%s' instead."
+                            % (oldname, newname))
                 opts[newname] = opts[oldname]
             else:
- self._add_error("Option '--%s' has been removed." % oldname)
+                SYSLOG.error("Option '--%s' has been removed." % oldname)

     def __setitem__(self, name, value):
         if not self._cli_opts.has_key(name):
@@ -182,19 +174,19 @@
         ret = []
         for item in value:
             tokens = item.split(':')
-            if len(tokens) < 3:
- self._add_error("Invalid format for option '--tagstatlink'. " - "Expected 'tag:link:title' but got '%s'." % item)
-                continue
-            ret.append((tokens[0], ':'.join(tokens[1:-1]), tokens[-1]))
+            if len(tokens) >= 3:
+                ret.append((tokens[0], ':'.join(tokens[1:-1]), tokens[-1]))
+            else:
+                SYSLOG.error("Invalid format for option '--tagstatlink'. "
+ "Expected 'tag:link:title' but got '%s'." % item)
         return ret

     def _convert_to_integer(self, name, value):
         try:
             return int(value)
         except ValueError:
- self._add_error("Option '--%s' expected integer value but got '%s'. " - "Default value used instead." % (name.lower(), value)) + SYSLOG.error("Option '--%s' expected integer value but got '%s'. " + "Default value used instead." % (name.lower(), value))
             return self._cli_opts[name][1]

     def _split_args_from_name(self, name):

Modified: trunk/src/robot/output/output.py
==============================================================================
--- trunk/src/robot/output/output.py    (original)
+++ trunk/src/robot/output/output.py    Wed Mar 25 02:25:56 2009
@@ -27,7 +27,6 @@
 from debugfile import DebugFile


-
 class Output(AbstractLogger):

     def __init__(self, settings):
@@ -36,6 +35,7 @@
         self.listeners = Listeners(settings['Listeners'])
         self._execution_errors = _ExecutionErrorLogger()
         SYSLOG.register_logger(self.listeners, self._execution_errors)
+        SYSLOG.disable_message_cache()
         self._debugfile = DebugFile(settings['DebugFile'])
         self._namegen = self._get_log_name_generator(settings['Log'])
         self._settings = settings

Modified: trunk/src/robot/output/systemlogger.py
==============================================================================
--- trunk/src/robot/output/systemlogger.py      (original)
+++ trunk/src/robot/output/systemlogger.py      Wed Mar 25 02:25:56 2009
@@ -27,15 +27,18 @@
         self._writers = []
         self._output_filers = []
         self._closers = []
-        self.message_cache = []
+        self._message_cache = []
         self.monitor = None

+    def disable_message_cache(self):
+        self._message_cache = None
+
     def register_logger(self, *loggers):
         for logger in loggers:
             if hasattr(logger, 'write'):
                 self._writers.append(logger.write)
-                if self.message_cache:
-                    for msg in self.message_cache:
+                if self._message_cache:
+                    for msg in self._message_cache:
                         logger.write(msg, msg.level)
             if hasattr(logger, 'output_file'):
                 self._output_filers.append(logger.output_file)
@@ -43,12 +46,8 @@
                 self._closers.append(logger.close)

     def register_command_line_monitor(self, width=78, colors=True):
-        if not self.monitor:
-            self.monitor = CommandLineMonitor(width, colors)
-            self.register_logger(self.monitor)
-        else:
-            self.monitor.width = width
-            self.monitor.colors = colors
+        self.monitor = CommandLineMonitor(width, colors)
+        self.register_logger(self.monitor)

     def register_file_logger(self, path=None, level='INFO'):
         if not path:
@@ -68,10 +67,10 @@

     def write(self, message, level='INFO'):
         msg = Message(message, level)
-        if self.message_cache is not None:
-            self.message_cache.append(msg)
         for write in self._writers:
             write(msg, level)
+        if self._message_cache is not None:
+            self._message_cache.append(msg)

     def output_file(self, name, path):
         for output_file in self._output_filers:

Modified: trunk/utest/output/test_systemlogger.py
==============================================================================
--- trunk/utest/output/test_systemlogger.py     (original)
+++ trunk/utest/output/test_systemlogger.py     Wed Mar 25 02:25:56 2009
@@ -143,13 +143,11 @@
         assert_equals(logger.msg.message, 'Another cached message')

     def test_message_cache_can_be_turned_off(self):
-        self.syslog.message_cache = None
+        self.syslog.disable_message_cache()
         self.syslog.write('This message is not cached', 'INFO')
         logger = LoggerMock(('', ''))
         self.syslog.register_logger(logger)
         assert_false(hasattr(logger, 'msg'))
-
-


 if __name__ == "__main__":

Reply via email to