backout, the _memoizedcall change worked only due to a local effect
This commit is contained in:
parent
6e5f491a42
commit
9568ff3b23
|
@ -251,6 +251,24 @@ class Node(object):
|
|||
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 @@ class Collector(Node):
|
|||
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
|
||||
|
|
|
@ -332,12 +332,8 @@ def transfer_markers(funcobj, cls, mod):
|
|||
|
||||
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)
|
||||
|
|
|
@ -244,7 +244,7 @@ class TeardownErrorReport(BaseReport):
|
|||
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"
|
||||
|
|
Loading…
Reference in New Issue