3 new revisions:
Revision: c2b450144392
Author: Pekka Klärck
Date: Thu Dec 1 13:34:40 2011
Log: cleanup
http://code.google.com/p/robotframework/source/detail?r=c2b450144392
Revision: ca4c1611eebc
Author: Pekka Klärck
Date: Thu Dec 1 13:50:53 2011
Log: a bit more xml reading cleanup
http://code.google.com/p/robotframework/source/detail?r=ca4c1611eebc
Revision: 9177785657a9
Author: Pekka Klärck
Date: Thu Dec 1 14:32:10 2011
Log: XML reading: Simplify getting child element handlers a little.
This cl...
http://code.google.com/p/robotframework/source/detail?r=9177785657a9
==============================================================================
Revision: c2b450144392
Author: Pekka Klärck
Date: Thu Dec 1 13:34:40 2011
Log: cleanup
http://code.google.com/p/robotframework/source/detail?r=c2b450144392
Modified:
/src/robot/result/xmlelementhandlers.py
=======================================
--- /src/robot/result/xmlelementhandlers.py Thu Dec 1 13:24:48 2011
+++ /src/robot/result/xmlelementhandlers.py Thu Dec 1 13:34:40 2011
@@ -18,23 +18,17 @@
class XmlElementHandler(object):
def __init__(self, result, root_handler=None):
- self._results = [result]
- self._handlers = [root_handler or RootHandler()]
-
- @property
- def _result(self):
- return self._results[-1]
-
- @property
- def _handler(self):
- return self._handlers[-1]
+ self._stack = [(root_handler or RootHandler(), result)]
def start(self, elem):
- self._handlers.append(self._handler.child_handler(elem.tag))
- self._results.append(self._handler.start(elem, self._result))
+ handler, result = self._stack[-1]
+ handler = handler.child_handler(elem.tag)
+ result = handler.start(elem, result)
+ self._stack.append((handler, result))
def end(self, elem):
- self._handlers.pop().end(elem, self._results.pop())
+ handler, result = self._stack.pop()
+ handler.end(elem, result)
elem.clear()
==============================================================================
Revision: ca4c1611eebc
Author: Pekka Klärck
Date: Thu Dec 1 13:50:53 2011
Log: a bit more xml reading cleanup
http://code.google.com/p/robotframework/source/detail?r=ca4c1611eebc
Modified:
/src/robot/result/xmlelementhandlers.py
=======================================
--- /src/robot/result/xmlelementhandlers.py Thu Dec 1 13:34:40 2011
+++ /src/robot/result/xmlelementhandlers.py Thu Dec 1 13:50:53 2011
@@ -22,9 +22,7 @@
def start(self, elem):
handler, result = self._stack[-1]
- handler = handler.child_handler(elem.tag)
- result = handler.start(elem, result)
- self._stack.append((handler, result))
+ self._stack.append(handler.handle_child(elem, result))
def end(self, elem):
handler, result = self._stack.pop()
@@ -44,11 +42,13 @@
def _child_classes(self):
return []
- def child_handler(self, tag):
+ def handle_child(self, elem, result):
try:
- return self._children[tag]
+ handler = self._children[elem.tag]
except KeyError:
- raise DataError("Incompatible XML handler '%s'" % tag)
+ raise DataError("Incompatible XML element '%s'" % elem.tag)
+ else:
+ return handler, handler.start(elem, result)
def start(self, elem, result):
return result
@@ -230,5 +230,5 @@
class StatisticsHandler(_Handler):
tag = 'statistics'
- def child_handler(self, tag):
- return self
+ def handle_child(self, elem, result):
+ return self, result
==============================================================================
Revision: 9177785657a9
Author: Pekka Klärck
Date: Thu Dec 1 14:32:10 2011
Log: XML reading: Simplify getting child element handlers a little.
This cleanup ought to be done now.
http://code.google.com/p/robotframework/source/detail?r=9177785657a9
Modified:
/src/robot/result/xmlelementhandlers.py
=======================================
--- /src/robot/result/xmlelementhandlers.py Thu Dec 1 13:50:53 2011
+++ /src/robot/result/xmlelementhandlers.py Thu Dec 1 14:32:10 2011
@@ -17,15 +17,15 @@
class XmlElementHandler(object):
- def __init__(self, result, root_handler=None):
- self._stack = [(root_handler or RootHandler(), result)]
+ def __init__(self, execution_result, root_handler=None):
+ self._stack = [(execution_result, root_handler or RootHandler())]
def start(self, elem):
- handler, result = self._stack[-1]
+ result, handler = self._stack[-1]
self._stack.append(handler.handle_child(elem, result))
def end(self, elem):
- handler, result = self._stack.pop()
+ result, handler = self._stack.pop()
handler.end(elem, result)
elem.clear()
@@ -33,22 +33,17 @@
class _Handler(object):
def __init__(self):
- self._children = dict((c.tag, c) for c in self._child_handlers())
-
- def _child_handlers(self):
- for child_class in self._child_classes():
- yield child_class() if type(self) is not child_class else self
-
- def _child_classes(self):
+ self._child_map = dict((c.tag, c) for c in self._children())
+
+ def _children(self):
return []
def handle_child(self, elem, result):
try:
- handler = self._children[elem.tag]
+ handler = self._child_map[elem.tag]
except KeyError:
raise DataError("Incompatible XML element '%s'" % elem.tag)
- else:
- return handler, handler.start(elem, result)
+ return handler.start(elem, result), handler
def start(self, elem, result):
return result
@@ -59,8 +54,8 @@
class RootHandler(_Handler):
- def _child_classes(self):
- return [RobotHandler]
+ def _children(self):
+ return [RobotHandler()]
class RobotHandler(_Handler):
@@ -70,8 +65,8 @@
result.generator =
elem.get('generator', 'unknown').split()[0].upper()
return result
- def _child_classes(self):
- return [RootSuiteHandler, StatisticsHandler, ErrorsHandler]
+ def _children(self):
+ return [RootSuiteHandler(), StatisticsHandler(), ErrorsHandler()]
class SuiteHandler(_Handler):
@@ -81,9 +76,9 @@
return result.suites.create(name=elem.get('name'),
source=elem.get('source'))
- def _child_classes(self):
- return [SuiteHandler, DocHandler, SuiteStatusHandler,
- KeywordHandler, TestCaseHandler, MetadataHandler]
+ def _children(self):
+ return [DocHandler(), MetadataHandler(), SuiteStatusHandler(),
+ KeywordHandler(), TestCaseHandler(), self]
class RootSuiteHandler(SuiteHandler):
@@ -93,6 +88,9 @@
result.suite.source = elem.get('source')
return result.suite
+ def _children(self):
+ return SuiteHandler._children(self)[:-1] + [SuiteHandler()]
+
class TestCaseHandler(_Handler):
tag = 'test'
@@ -101,8 +99,8 @@
return result.tests.create(name=elem.get('name'),
timeout=elem.get('timeout'))
- def _child_classes(self):
- return [KeywordHandler, TagsHandler, DocHandler, TestStatusHandler]
+ def _children(self):
+ return [DocHandler(), TagsHandler(), TestStatusHandler(),
KeywordHandler()]
class KeywordHandler(_Handler):
@@ -113,9 +111,9 @@
timeout=elem.get('timeout'),
type=elem.get('type'))
- def _child_classes(self):
- return [DocHandler, ArgumentsHandler, KeywordHandler,
MessageHandler,
- KeywordStatusHandler]
+ def _children(self):
+ return [DocHandler(), ArgumentsHandler(), KeywordStatusHandler(),
+ MessageHandler(), self]
class MessageHandler(_Handler):
@@ -175,16 +173,13 @@
class MetadataHandler(_Handler):
tag = 'metadata'
- def _child_classes(self):
- return [MetadataItemHandler]
+ def _children(self):
+ return [MetadataItemHandler()]
class MetadataItemHandler(_Handler):
tag = 'item'
- def _child_classes(self):
- return [MetadataItemHandler]
-
def end(self, elem, result):
result.metadata[elem.get('name')] = elem.text or ''
@@ -192,8 +187,8 @@
class TagsHandler(_Handler):
tag = 'tags'
- def _child_classes(self):
- return [TagHandler]
+ def _children(self):
+ return [TagHandler()]
class TagHandler(_Handler):
@@ -206,8 +201,8 @@
class ArgumentsHandler(_Handler):
tag = 'arguments'
- def _child_classes(self):
- return [ArgumentHandler]
+ def _children(self):
+ return [ArgumentHandler()]
class ArgumentHandler(_Handler):
@@ -223,12 +218,12 @@
def start(self, elem, result):
return result.errors
- def _child_classes(self):
- return [MessageHandler]
+ def _children(self):
+ return [MessageHandler()]
class StatisticsHandler(_Handler):
tag = 'statistics'
def handle_child(self, elem, result):
- return self, result
+ return result, self