3 new revisions:

Revision: aba4fefe62a5
Author:   Pekka Klärck
Date:     Thu Dec  1 12:51:44 2011
Log: XML reading: renamed Element -> Handler to separate actual XML element...
http://code.google.com/p/robotframework/source/detail?r=aba4fefe62a5

Revision: c409df813e76
Author:   Pekka Klärck
Date:     Thu Dec  1 13:10:10 2011
Log: XML reading: Initialize handlers only once. This may save a little mem...
http://code.google.com/p/robotframework/source/detail?r=c409df813e76

Revision: 059e1db89abb
Author:   Pekka Klärck
Date:     Thu Dec  1 13:24:48 2011
Log:      cleanup
http://code.google.com/p/robotframework/source/detail?r=059e1db89abb

==============================================================================
Revision: aba4fefe62a5
Author:   Pekka Klärck
Date:     Thu Dec  1 12:51:44 2011
Log: XML reading: renamed Element -> Handler to separate actual XML elements emitted by ET from classes processing them.
http://code.google.com/p/robotframework/source/detail?r=aba4fefe62a5

Modified:
 /src/robot/result/executionresult.py
 /src/robot/result/xmlelementhandlers.py

=======================================
--- /src/robot/result/executionresult.py        Thu Dec  1 12:48:02 2011
+++ /src/robot/result/executionresult.py        Thu Dec  1 12:51:44 2011
@@ -22,7 +22,7 @@
 from .configurer import SuiteConfigurer
 from .suiteteardownfailed import SuiteTeardownFailureHandler
 from .testsuite import TestSuite
-from .xmlelementhandlers import ElementStack
+from .xmlelementhandlers import XmlHandler


 def ResultFromXml(*sources):
@@ -45,10 +45,10 @@
             if isinstance(source, XmlSource) else XmlSource(source)

     def build(self, result):
-        elements = ElementStack(result)
+        handler = XmlHandler(result)
         with self._source as source:
for action, elem in ET.iterparse(source, events=('start', 'end')):
-               getattr(elements, action)(elem)
+               getattr(handler, action)(elem)
SuiteTeardownFailureHandler(result.generator).visit_suite(result.suite)
         return result

=======================================
--- /src/robot/result/xmlelementhandlers.py     Thu Dec  1 12:48:02 2011
+++ /src/robot/result/xmlelementhandlers.py     Thu Dec  1 12:51:44 2011
@@ -15,30 +15,30 @@
 from robot.errors import DataError


-class ElementStack(object):
-
-    def __init__(self, result, root_element=None):
+class XmlHandler(object):
+
+    def __init__(self, result, root_handler=None):
         self._results = [result]
-        self._elements = [root_element or RootElement()]
+        self._handlers = [root_handler or RootHandler()]

     @property
     def _result(self):
         return self._results[-1]

     @property
-    def _element(self):
-        return self._elements[-1]
+    def _handler(self):
+        return self._handlers[-1]

     def start(self, elem):
-        self._elements.append(self._element.child_element(elem.tag))
-        self._results.append(self._element.start(elem, self._result))
+        self._handlers.append(self._handler.child_handler(elem.tag))
+        self._results.append(self._handler.start(elem, self._result))

     def end(self, elem):
-        self._elements.pop().end(elem, self._results.pop())
+        self._handlers.pop().end(elem, self._results.pop())
         elem.clear()


-class _Element(object):
+class _Handler(object):
     tag = ''

     def start(self, elem, result):
@@ -47,24 +47,24 @@
     def end(self, elem, result):
         pass

-    def child_element(self, tag):
+    def child_handler(self, tag):
         # TODO: replace _children() list with dict
         for child_type in self._children():
             if child_type.tag == tag:
                 return child_type()
-        raise DataError("Incompatible XML element '%s'" % tag)
+        raise DataError("Incompatible XML handler '%s'" % tag)

     def _children(self):
         return []


-class RootElement(_Element):
+class RootHandler(_Handler):

     def _children(self):
-        return [RobotElement]
+        return [RobotHandler]


-class RobotElement(_Element):
+class RobotHandler(_Handler):
     tag = 'robot'

     def start(self, elem, result):
@@ -72,10 +72,10 @@
         return result

     def _children(self):
-        return [RootSuiteElement, StatisticsElement, ErrorsElement]
+        return [RootSuiteHandler, StatisticsHandler, ErrorsHandler]


-class SuiteElement(_Element):
+class SuiteHandler(_Handler):
     tag = 'suite'

     def start(self, elem, result):
@@ -83,11 +83,11 @@
                                     source=elem.get('source'))

     def _children(self):
-        return [SuiteElement, DocElement, SuiteStatusElement,
-                KeywordElement, TestCaseElement, MetadataElement]
+        return [SuiteHandler, DocHandler, SuiteStatusHandler,
+                KeywordHandler, TestCaseHandler, MetadataHandler]


-class RootSuiteElement(SuiteElement):
+class RootSuiteHandler(SuiteHandler):

     def start(self, elem, result):
         result.suite.name = elem.get('name')
@@ -95,7 +95,7 @@
         return result.suite


-class TestCaseElement(_Element):
+class TestCaseHandler(_Handler):
     tag = 'test'

     def start(self, elem, result):
@@ -103,10 +103,10 @@
                                    timeout=elem.get('timeout'))

     def _children(self):
-        return [KeywordElement, TagsElement, DocElement, TestStatusElement]
+        return [KeywordHandler, TagsHandler, DocHandler, TestStatusHandler]


-class KeywordElement(_Element):
+class KeywordHandler(_Handler):
     tag = 'kw'

     def start(self, elem, result):
@@ -115,11 +115,11 @@
                                       type=elem.get('type'))

     def _children(self):
- return [DocElement, ArgumentsElement, KeywordElement, MessageElement,
-                KeywordStatusElement]
+ return [DocHandler, ArgumentsHandler, KeywordHandler, MessageHandler,
+                KeywordStatusHandler]


-class MessageElement(_Element):
+class MessageHandler(_Handler):
     tag = 'msg'

     def end(self, elem, result):
@@ -129,7 +129,7 @@
                                html, elem.get('timestamp'), linkable)


-class _StatusElement(_Element):
+class _StatusHandler(_Handler):
     tag = 'status'

     def _set_status(self, elem, result):
@@ -143,21 +143,21 @@
         result.endtime = elem.get('endtime', 'N/A')


-class KeywordStatusElement(_StatusElement):
+class KeywordStatusHandler(_StatusHandler):

     def end(self, elem, result):
         self._set_status(elem, result)
         self._set_times(elem, result)


-class SuiteStatusElement(_StatusElement):
+class SuiteStatusHandler(_StatusHandler):

     def end(self, elem, result):
         self._set_message(elem, result)
         self._set_times(elem, result)


-class TestStatusElement(_StatusElement):
+class TestStatusHandler(_StatusHandler):

     def end(self, elem, result):
         self._set_status(elem, result)
@@ -165,70 +165,70 @@
         self._set_times(elem, result)


-class DocElement(_Element):
+class DocHandler(_Handler):
     tag = 'doc'

     def end(self, elem, result):
         result.doc = elem.text or ''


-class MetadataElement(_Element):
+class MetadataHandler(_Handler):
     tag = 'metadata'

     def _children(self):
-        return [MetadataItemElement]
+        return [MetadataItemHandler]


-class MetadataItemElement(_Element):
+class MetadataItemHandler(_Handler):
     tag = 'item'

     def _children(self):
-        return [MetadataItemElement]
+        return [MetadataItemHandler]

     def end(self, elem, result):
         result.metadata[elem.get('name')] = elem.text or ''


-class TagsElement(_Element):
+class TagsHandler(_Handler):
     tag = 'tags'

     def _children(self):
-        return [TagElement]
+        return [TagHandler]


-class TagElement(_Element):
+class TagHandler(_Handler):
     tag = 'tag'

     def end(self, elem, result):
         result.tags.add(elem.text or '')


-class ArgumentsElement(_Element):
+class ArgumentsHandler(_Handler):
     tag = 'arguments'

     def _children(self):
-        return [ArgumentElement]
+        return [ArgumentHandler]


-class ArgumentElement(_Element):
+class ArgumentHandler(_Handler):
     tag = 'arg'

     def end(self, elem, result):
         result.args.append(elem.text or '')


-class ErrorsElement(_Element):
+class ErrorsHandler(_Handler):
     tag = 'errors'

     def start(self, elem, result):
         return result.errors

     def _children(self):
-        return [MessageElement]
+        return [MessageHandler]


-class StatisticsElement(_Element):
+class StatisticsHandler(_Handler):
     tag = 'statistics'

-    def child_element(self, tag):
+    def child_handler(self, tag):
         return self

==============================================================================
Revision: c409df813e76
Author:   Pekka Klärck
Date:     Thu Dec  1 13:10:10 2011
Log: XML reading: Initialize handlers only once. This may save a little memory and time but also allow further refactoring.
http://code.google.com/p/robotframework/source/detail?r=c409df813e76

Modified:
 /src/robot/result/xmlelementhandlers.py

=======================================
--- /src/robot/result/xmlelementhandlers.py     Thu Dec  1 12:51:44 2011
+++ /src/robot/result/xmlelementhandlers.py     Thu Dec  1 13:10:10 2011
@@ -41,6 +41,16 @@
 class _Handler(object):
     tag = ''

+    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):
+        return []
+
     def start(self, elem, result):
         return result

@@ -48,19 +58,15 @@
         pass

     def child_handler(self, tag):
-        # TODO: replace _children() list with dict
-        for child_type in self._children():
-            if child_type.tag == tag:
-                return child_type()
-        raise DataError("Incompatible XML handler '%s'" % tag)
-
-    def _children(self):
-        return []
+        try:
+            return self._children[tag]
+        except KeyError:
+            raise DataError("Incompatible XML handler '%s'" % tag)


 class RootHandler(_Handler):

-    def _children(self):
+    def _child_classes(self):
         return [RobotHandler]


@@ -71,7 +77,7 @@
result.generator = elem.get('generator', 'unknown').split()[0].upper()
         return result

-    def _children(self):
+    def _child_classes(self):
         return [RootSuiteHandler, StatisticsHandler, ErrorsHandler]


@@ -82,7 +88,7 @@
         return result.suites.create(name=elem.get('name'),
                                     source=elem.get('source'))

-    def _children(self):
+    def _child_classes(self):
         return [SuiteHandler, DocHandler, SuiteStatusHandler,
                 KeywordHandler, TestCaseHandler, MetadataHandler]

@@ -102,7 +108,7 @@
         return result.tests.create(name=elem.get('name'),
                                    timeout=elem.get('timeout'))

-    def _children(self):
+    def _child_classes(self):
         return [KeywordHandler, TagsHandler, DocHandler, TestStatusHandler]


@@ -114,7 +120,7 @@
                                       timeout=elem.get('timeout'),
                                       type=elem.get('type'))

-    def _children(self):
+    def _child_classes(self):
return [DocHandler, ArgumentsHandler, KeywordHandler, MessageHandler,
                 KeywordStatusHandler]

@@ -175,14 +181,14 @@
 class MetadataHandler(_Handler):
     tag = 'metadata'

-    def _children(self):
+    def _child_classes(self):
         return [MetadataItemHandler]


 class MetadataItemHandler(_Handler):
     tag = 'item'

-    def _children(self):
+    def _child_classes(self):
         return [MetadataItemHandler]

     def end(self, elem, result):
@@ -192,7 +198,7 @@
 class TagsHandler(_Handler):
     tag = 'tags'

-    def _children(self):
+    def _child_classes(self):
         return [TagHandler]


@@ -206,7 +212,7 @@
 class ArgumentsHandler(_Handler):
     tag = 'arguments'

-    def _children(self):
+    def _child_classes(self):
         return [ArgumentHandler]


@@ -223,7 +229,7 @@
     def start(self, elem, result):
         return result.errors

-    def _children(self):
+    def _child_classes(self):
         return [MessageHandler]



==============================================================================
Revision: 059e1db89abb
Author:   Pekka Klärck
Date:     Thu Dec  1 13:24:48 2011
Log:      cleanup
http://code.google.com/p/robotframework/source/detail?r=059e1db89abb

Modified:
 /src/robot/result/executionresult.py
 /src/robot/result/xmlelementhandlers.py

=======================================
--- /src/robot/result/executionresult.py        Thu Dec  1 12:51:44 2011
+++ /src/robot/result/executionresult.py        Thu Dec  1 13:24:48 2011
@@ -22,7 +22,7 @@
 from .configurer import SuiteConfigurer
 from .suiteteardownfailed import SuiteTeardownFailureHandler
 from .testsuite import TestSuite
-from .xmlelementhandlers import XmlHandler
+from .xmlelementhandlers import XmlElementHandler


 def ResultFromXml(*sources):
@@ -45,7 +45,7 @@
             if isinstance(source, XmlSource) else XmlSource(source)

     def build(self, result):
-        handler = XmlHandler(result)
+        handler = XmlElementHandler(result)
         with self._source as source:
for action, elem in ET.iterparse(source, events=('start', 'end')):
                getattr(handler, action)(elem)
=======================================
--- /src/robot/result/xmlelementhandlers.py     Thu Dec  1 13:10:10 2011
+++ /src/robot/result/xmlelementhandlers.py     Thu Dec  1 13:24:48 2011
@@ -15,7 +15,7 @@
 from robot.errors import DataError


-class XmlHandler(object):
+class XmlElementHandler(object):

     def __init__(self, result, root_handler=None):
         self._results = [result]
@@ -39,7 +39,6 @@


 class _Handler(object):
-    tag = ''

     def __init__(self):
         self._children = dict((c.tag, c) for c in self._child_handlers())
@@ -51,18 +50,18 @@
     def _child_classes(self):
         return []

-    def start(self, elem, result):
-        return result
-
-    def end(self, elem, result):
-        pass
-
     def child_handler(self, tag):
         try:
             return self._children[tag]
         except KeyError:
             raise DataError("Incompatible XML handler '%s'" % tag)

+    def start(self, elem, result):
+        return result
+
+    def end(self, elem, result):
+        pass
+

 class RootHandler(_Handler):

@@ -129,10 +128,11 @@
     tag = 'msg'

     def end(self, elem, result):
-        html = elem.get('html', 'no') == 'yes'
-        linkable = elem.get('linkable', 'no') == 'yes'
-        result.messages.create(elem.text or '', elem.get('level'),
-                               html, elem.get('timestamp'), linkable)
+        result.messages.create(elem.text or '',
+                               elem.get('level'),
+                               elem.get('html', 'no') == 'yes',
+                               elem.get('timestamp'),
+                               elem.get('linkable', 'no') == 'yes')


 class _StatusHandler(_Handler):

Reply via email to