Revision: 3869
Author: jussi.ao.malinen
Date: Mon Aug 23 06:35:19 2010
Log: rebot loglevel implementation
http://code.google.com/p/robotframework/source/detail?r=3869
Modified:
/trunk/src/robot/conf/settings.py
/trunk/src/robot/output/readers.py
=======================================
--- /trunk/src/robot/conf/settings.py Sat Jul 3 00:57:15 2010
+++ /trunk/src/robot/conf/settings.py Mon Aug 23 06:35:19 2010
@@ -46,7 +46,6 @@
'TagStatCombine' : ('tagstatcombine', []),
'TagDoc' : ('tagdoc', []),
'TagStatLink' : ('tagstatlink', []),
- 'LogLevel' : ('loglevel', 'INFO'),
'MonitorWidth' : ('monitorwidth', 78),
'MonitorColors' : ('monitorcolors', 'ON') }
_deprecated = {}
@@ -192,6 +191,7 @@
class RobotSettings(_BaseSettings):
_extra_cli_opts = { 'Output' : ('output', 'output.xml'),
+ 'LogLevel' : ('loglevel', 'INFO'),
'RunMode' : ('runmode', 'normal'),
'Variables' : ('variable', []),
'VariableFiles' : ('variablefile', []),
@@ -219,6 +219,7 @@
class RebotSettings(_BaseSettings):
_extra_cli_opts = { 'Output' : ('output', 'NONE'),
+ 'LogLevel' : ('loglevel', 'TRACE'),
'RemoveKeywords' : ('removekeywords', 'NONE'),
'StartTime' : ('starttime', 'N/A'),
'EndTime' : ('endtime', 'N/A')}
=======================================
--- /trunk/src/robot/output/readers.py Mon May 31 05:21:54 2010
+++ /trunk/src/robot/output/readers.py Mon Aug 23 06:35:19 2010
@@ -19,23 +19,24 @@
from robot.errors import DataError, XmlParsingError
from robot.common import BaseTestSuite, BaseTestCase, BaseKeyword
from robot.output import LOGGER
+from robot.output.loggerhelper import IsLogged
def process_outputs(paths, settings):
if not paths:
raise DataError('No output files given.')
if len(paths) == 1:
- return process_output(paths[0])
+ return process_output(paths[0], log_level=settings['LogLevel'])
suite = CombinedTestSuite(settings['StartTime'], settings['EndTime'])
exec_errors = CombinedExecutionErrors()
for path in paths:
- subsuite, suberrors = process_output(path)
+ subsuite, suberrors = process_output(path,
log_level=settings['LogLevel'])
suite.add_suite(subsuite)
exec_errors.add(suberrors)
return suite, exec_errors
-def process_output(path, read_level=-1):
+def process_output(path, read_level=-1, log_level=None):
"""Process one output file and return TestSuite and ExecutionErrors
'read_level' can be used to limit how many suite levels are read. This
is
@@ -54,7 +55,7 @@
(path, message), traceback)
suite = _get_suite_node(root, path)
errors = _get_errors_node(root)
- return TestSuite(suite, read_level), ExecutionErrors(errors)
+ return TestSuite(suite, read_level, log_level=log_level),
ExecutionErrors(errors)
def _get_suite_node(root, path):
if root.name != 'robot':
@@ -102,9 +103,9 @@
class _TestAndSuiteReader(_BaseReader):
- def __init__(self, node):
+ def __init__(self, node, log_level=None):
_BaseReader.__init__(self, node)
- self.keywords = [ Keyword(kw) for kw in node.get_nodes('kw') ]
+ self.keywords = [ Keyword(kw, log_level) for kw in
node.get_nodes('kw') ]
if len(self.keywords) > 0 and self.keywords[0].type == 'setup':
self.setup = self.keywords.pop(0)
if len(self.keywords) > 0 and self.keywords[-1].type == 'teardown':
@@ -113,8 +114,8 @@
class _SuiteReader(_TestAndSuiteReader):
- def __init__(self, node):
- _TestAndSuiteReader.__init__(self, node)
+ def __init__(self, node, log_level=None):
+ _TestAndSuiteReader.__init__(self, node, log_level)
del(self.keywords)
for metanode in node.get_nodes('metadata/item'):
self.metadata[metanode.get_attr('name')] = metanode.text
@@ -125,15 +126,15 @@
class _TestReader(_TestAndSuiteReader):
- def __init__(self, node):
- _TestAndSuiteReader.__init__(self, node)
+ def __init__(self, node, log_level=None):
+ _TestAndSuiteReader.__init__(self, node, log_level)
self.tags = [ tag.text for tag in node.get_nodes('tags/tag') ]
self.timeout = node.get_attr('timeout', '')
class _KeywordReader(_BaseReader):
- def __init__(self, node):
+ def __init__(self, node, log_level=None):
_BaseReader.__init__(self, node)
del(self.message)
self.args = [ arg.text for arg in node.get_nodes('arguments/arg') ]
@@ -142,12 +143,13 @@
self.keywords = []
self.messages = []
self.children = []
+ log_filter = IsLogged(log_level or 'TRACE')
for child in node.children:
if child.name == 'kw':
kw = Keyword(child)
self.keywords.append(kw)
self.children.append(kw)
- elif child.name == 'msg':
+ elif child.name == 'msg' and
log_filter(child.get_attr('level', 'INFO')):
msg = Message(child)
self.messages.append(msg)
self.children.append(msg)
@@ -155,16 +157,16 @@
class TestSuite(BaseTestSuite, _SuiteReader):
- def __init__(self, node, read_level=-1, level=1, parent=None):
+ def __init__(self, node, read_level=-1, level=1, parent=None,
log_level=None):
node = self._get_node(node, read_level, level)
BaseTestSuite.__init__(self, node.attrs.get('name'),
node.attrs.get('source', None), parent)
- _SuiteReader.__init__(self, node)
+ _SuiteReader.__init__(self, node, log_level=log_level)
for snode in node.get_nodes('suite'):
snode.generator = node.generator
- TestSuite(snode, read_level, level+1, parent=self)
+ TestSuite(snode, read_level, level+1, parent=self,
log_level=log_level)
for tnode in node.get_nodes('test'):
- TestCase(tnode, parent=self)
+ TestCase(tnode, parent=self, log_level=log_level)
self.set_status()
if node.generator == 'robot' and \
self.teardown is not None and self.teardown.status
== 'FAIL':
@@ -248,9 +250,9 @@
class TestCase(BaseTestCase, _TestReader):
- def __init__(self, node, parent):
+ def __init__(self, node, parent, log_level=None):
BaseTestCase.__init__(self, node.get_attr('name'), parent)
- _TestReader.__init__(self, node)
+ _TestReader.__init__(self, node, log_level=log_level)
self.set_criticality(parent.critical)
def remove_keywords(self, how):
@@ -262,10 +264,10 @@
class Keyword(BaseKeyword, _KeywordReader):
- def __init__(self, node):
+ def __init__(self, node, log_level=None):
self._init_data()
BaseKeyword.__init__(self, node.get_attr('name'))
- _KeywordReader.__init__(self, node)
+ _KeywordReader.__init__(self, node, log_level)
def _init_data(self):
self.messages = []