1 new commit in pytest:

https://bitbucket.org/hpk42/pytest/changeset/da7434cf50bc/
changeset:   da7434cf50bc
user:        RonnyPfannschmidt
date:        2012-09-24 11:36:24
summary:     backout, the _memoizedcall change worked only due to a local effect
affected #:  3 files

diff -r cfe628a3d13254a5f6ea8a52656f014f0160116c -r 
da7434cf50bc85c393c42c1559ced0715f4db5e7 _pytest/main.py
--- a/_pytest/main.py
+++ b/_pytest/main.py
@@ -251,6 +251,24 @@
     def teardown(self):
         pass
 
+    def _memoizedcall(self, attrname, function):
+        exattrname = "_ex_" + attrname
+        failure = getattr(self, exattrname, None)
+        if failure is not None:
+            py.builtin._reraise(failure[0], failure[1], failure[2])
+        if hasattr(self, attrname):
+            return getattr(self, attrname)
+        try:
+            res = function()
+        except py.builtin._sysex:
+            raise
+        except:
+            failure = py.std.sys.exc_info()
+            setattr(self, exattrname, failure)
+            raise
+        setattr(self, attrname, res)
+        return res
+
     def listchain(self):
         """ return list of all parent collectors up to self,
             starting from root of collection tree. """
@@ -327,6 +345,10 @@
             return str(exc.args[0])
         return self._repr_failure_py(excinfo, style="short")
 
+    def _memocollect(self):
+        """ internal helper method to cache results of calling collect(). """
+        return self._memoizedcall('_collected', lambda: list(self.collect()))
+
     def _prunetraceback(self, excinfo):
         if hasattr(self, 'fspath'):
             path = self.fspath


diff -r cfe628a3d13254a5f6ea8a52656f014f0160116c -r 
da7434cf50bc85c393c42c1559ced0715f4db5e7 _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -332,12 +332,8 @@
 
 class Module(pytest.File, PyCollector):
     """ Collector for test classes and functions. """
-    _obj = None
-
     def _getobj(self):
-        if self._obj is None:
-            self._obj = self._importtestmodule()
-        return _obj
+        return self._memoizedcall('_obj', self._importtestmodule)
 
     def collect(self):
         self.session.funcargmanager._parsefactories(self.obj, self.nodeid)


diff -r cfe628a3d13254a5f6ea8a52656f014f0160116c -r 
da7434cf50bc85c393c42c1559ced0715f4db5e7 _pytest/runner.py
--- a/_pytest/runner.py
+++ b/_pytest/runner.py
@@ -244,7 +244,7 @@
         self.__dict__.update(extra)
 
 def pytest_make_collect_report(collector):
-    call = CallInfo(lambda: list(collector.collect()), "collect")
+    call = CallInfo(collector._memocollect, "memocollect")
     longrepr = None
     if not call.excinfo:
         outcome = "passed"

Repository URL: https://bitbucket.org/hpk42/pytest/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
py-svn mailing list
py-svn@codespeak.net
http://codespeak.net/mailman/listinfo/py-svn

Reply via email to