Revision: 4284
Author: jussi.ao.malinen
Date: Sat Nov 13 05:28:00 2010
Log: a few percentages faster performance in parsing, by avoiding creation
of dictionaries per test case and keyword object. (This will only matter if
data is in tsv/plain text format. HTML format is so slow to parse, that
this optimization will be totally below noise level.)
http://code.google.com/p/robotframework/source/detail?r=4284
Modified:
/trunk/src/robot/parsing/model.py
=======================================
--- /trunk/src/robot/parsing/model.py Sat Nov 13 04:26:50 2010
+++ /trunk/src/robot/parsing/model.py Sat Nov 13 05:28:00 2010
@@ -22,7 +22,6 @@
from settings import (Documentation, Fixture, Timeout, Tags, Metadata,
Library, Resource, Variables, Arguments, Return,
Template)
from populators import FromFilePopulator, FromDirectoryPopulator
-from robot.utils.normalizing import normalize
def TestData(parent=None, source=None, include_suites=[]):
@@ -211,16 +210,14 @@
class _WithSettings(object):
- normalizer = lambda s: normalize(s, [], True, True)
-
def get_setter(self, setting_name):
- normalized = normalize(setting_name)
+ normalized = utils.normalize(setting_name)
if normalized in self._setters:
- return self._setters[normalized]
+ return self._setters[normalized](self)
self.report_invalid_syntax("Non-existing setting '%s'." %
setting_name)
def is_setting(self, setting_name):
- return normalize(setting_name) in self._setters
+ return utils.normalize(setting_name) in self._setters
class _SettingTable(_Table, _WithSettings):
@@ -239,7 +236,6 @@
self.test_timeout = Timeout('Test Timeout', self)
self.metadata = []
self.imports = []
- self._setters = self._get_setters()
def _get_adder(self, adder_method):
def adder(value, comment):
@@ -269,25 +265,24 @@
class TestCaseFileSettingTable(_SettingTable):
- def _get_setters(self):
- return {'documentation': self.doc.populate,
- 'document': self.doc.populate,
- 'suitesetup': self.suite_setup.populate,
- 'suiteprecondition': self.suite_setup.populate,
- 'suiteteardown': self.suite_teardown.populate,
- 'suitepostcondition': self.suite_teardown.populate,
- 'testsetup': self.test_setup.populate,
- 'testprecondition': self.test_setup.populate,
- 'testteardown': self.test_teardown.populate,
- 'testpostcondition': self.test_teardown.populate,
- 'forcetags': self.force_tags.populate,
- 'defaulttags': self.default_tags.populate,
- 'testtemplate': self.test_template.populate,
- 'testtimeout': self.test_timeout.populate,
- 'library': self._get_adder(self.add_library),
- 'resource': self._get_adder(self.add_resource),
- 'variables': self._get_adder(self.add_variables),
- 'metadata': self._get_adder(self.add_metadata)}
+ _setters = {'documentation': lambda s: s.doc.populate,
+ 'document': lambda s: s.doc.populate,
+ 'suitesetup': lambda s: s.suite_setup.populate,
+ 'suiteprecondition': lambda s: s.suite_setup.populate,
+ 'suiteteardown': lambda s: s.suite_teardown.populate,
+ 'suitepostcondition': lambda s: s.suite_teardown.populate,
+ 'testsetup': lambda s: s.test_setup.populate,
+ 'testprecondition': lambda s: s.test_setup.populate,
+ 'testteardown': lambda s: s.test_teardown.populate,
+ 'testpostcondition': lambda s: s.test_teardown.populate,
+ 'forcetags': lambda s: s.force_tags.populate,
+ 'defaulttags': lambda s: s.default_tags.populate,
+ 'testtemplate': lambda s: s.test_template.populate,
+ 'testtimeout': lambda s: s.test_timeout.populate,
+ 'library': lambda s: s._get_adder(s.add_library),
+ 'resource': lambda s: s._get_adder(s.add_resource),
+ 'variables': lambda s: s._get_adder(s.add_variables),
+ 'metadata': lambda s: s._get_adder(s.add_metadata)}
def __iter__(self):
for setting in [self.doc, self.suite_setup, self.suite_teardown,
@@ -299,12 +294,11 @@
class ResourceFileSettingTable(_SettingTable):
- def _get_setters(self):
- return {'documentation': self.doc.populate,
- 'document': self.doc.populate,
- 'library': self._get_adder(self.add_library),
- 'resource': self._get_adder(self.add_resource),
- 'variables': self._get_adder(self.add_variables)}
+ _setters = {'documentation': lambda s: s.doc.populate,
+ 'document': lambda s: s.doc.populate,
+ 'library': lambda s: s._get_adder(s.add_library),
+ 'resource': lambda s: s._get_adder(s.add_resource),
+ 'variables': lambda s: s._get_adder(s.add_variables)}
def __iter__(self):
for setting in [self.doc] + self.imports:
@@ -313,22 +307,21 @@
class InitFileSettingTable(_SettingTable):
- def _get_setters(self):
- return {'documentation': self.doc.populate,
- 'document': self.doc.populate,
- 'suitesetup': self.suite_setup.populate,
- 'suiteprecondition': self.suite_setup.populate,
- 'suiteteardown': self.suite_teardown.populate,
- 'suitepostcondition': self.suite_teardown.populate,
- 'testsetup': self.test_setup.populate,
- 'testprecondition': self.test_setup.populate,
- 'testteardown': self.test_teardown.populate,
- 'testpostcondition': self.test_teardown.populate,
- 'forcetags': self.force_tags.populate,
- 'library': self._get_adder(self.add_library),
- 'resource': self._get_adder(self.add_resource),
- 'variables': self._get_adder(self.add_variables),
- 'metadata': self._get_adder(self.add_metadata)}
+ _setters = {'documentation': lambda s: s.doc.populate,
+ 'document': lambda s: s.doc.populate,
+ 'suitesetup': lambda s: s.suite_setup.populate,
+ 'suiteprecondition': lambda s: s.suite_setup.populate,
+ 'suiteteardown': lambda s: s.suite_teardown.populate,
+ 'suitepostcondition': lambda s: s.suite_teardown.populate,
+ 'testsetup': lambda s: s.test_setup.populate,
+ 'testprecondition': lambda s: s.test_setup.populate,
+ 'testteardown': lambda s: s.test_teardown.populate,
+ 'testpostcondition': lambda s: s.test_teardown.populate,
+ 'forcetags': lambda s: s.force_tags.populate,
+ 'library': lambda s: s._get_adder(s.add_library),
+ 'resource': lambda s: s._get_adder(s.add_resource),
+ 'variables': lambda s: s._get_adder(s.add_variables),
+ 'metadata': lambda s: s._get_adder(s.add_metadata)}
def __iter__(self):
for setting in [self.doc, self.suite_setup, self.suite_teardown,
@@ -436,18 +429,16 @@
self.teardown = Fixture('[Teardown]', self)
self.timeout = Timeout('[Timeout]', self)
self.steps = []
- self._setters = self._get_setters()
-
- def _get_setters(self):
- return {'documentation': self.doc.populate,
- 'document': self.doc.populate,
- 'template': self.template.populate,
- 'setup': self.setup.populate,
- 'precondition': self.setup.populate,
- 'teardown': self.teardown.populate,
- 'postcondition': self.teardown.populate,
- 'tags': self.tags.populate,
- 'timeout': self.timeout.populate}
+
+ _setters = {'documentation': lambda s: s.doc.populate,
+ 'document': lambda s: s.doc.populate,
+ 'template': lambda s: s.template.populate,
+ 'setup': lambda s: s.setup.populate,
+ 'precondition': lambda s: s.setup.populate,
+ 'teardown': lambda s: s.teardown.populate,
+ 'postcondition': lambda s: s.teardown.populate,
+ 'tags': lambda s: s.tags.populate,
+ 'timeout': lambda s: s.timeout.populate}
@property
@@ -484,14 +475,12 @@
self.return_ = Return('[Return]', self)
self.timeout = Timeout('[Timeout]', self)
self.steps = []
- self._setters = self._get_setters()
-
- def _get_setters(self):
- return {'documentation': self.doc.populate,
- 'document': self.doc.populate,
- 'arguments': self.args.populate,
- 'return': self.return_.populate,
- 'timeout': self.timeout.populate}
+
+ _setters = {'documentation': lambda s: s.doc.populate,
+ 'document': lambda s: s.doc.populate,
+ 'arguments': lambda s: s.args.populate,
+ 'return': lambda s: s.return_.populate,
+ 'timeout': lambda s: s.timeout.populate}
def __iter__(self):
for element in [self.args, self.doc, self.timeout] \