New issue 53: Error during collection
http://bitbucket.org/hpk42/py-trunk/issue/53/error-during-collection

Anonymous on Fri, 9 Oct 2009 01:33:51 +0200:

Description:
  The following test module causes an error during collection:

{{{
#!python

import unittest
class _E(object):
    def __getattr__(self, tag):
        pass
E = _E()
}}}

the error:

{{{
#!python

(default)l-rjones:foo richard$ py.test
================================================================= test session 
starts ==================================================================
python: platform darwin -- Python 2.6.1
test object 1: /private/tmp/foo

test_foo.py E

======================================================================== ERRORS 
========================================================================
_________________________________________________ ERROR during collection 
/private/tmp/foo/test_foo.py _________________________________________________

collector = <Module 'test_foo.py'>

    def pytest_make_collect_report(collector):
        result = excinfo = None
        try:
>           result = collector._memocollect()

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/test/plugin/pytest_runner.py:32:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Module 'test_foo.py'>

    def _memocollect(self):
        """ internal helper method to cache results of calling collect(). """
>       return self._memoizedcall('_collected', self.collect)

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/test/collect.py:300:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Module 'test_foo.py'>, attrname = '_collected', function = <bound 
method Module.collect of <Module 'test_foo.py'>>

    def _memoizedcall(self, attrname, function):
        exattrname = "_ex_" + attrname
        failure = getattr(self, exattrname, None)
        if failure is not None:
            raise failure[0], failure[1], failure[2]
        if hasattr(self, attrname):
            return getattr(self, attrname)
        try:
>           res = function()

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/test/collect.py:99:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Module 'test_foo.py'>

    def collect(self):
        l = self._deprecated_collect()
        if l is not None:
            return l
>       name2items = self._buildname2items()

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/test/pycollect.py:94:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Module 'test_foo.py'>

    def _buildname2items(self):
        # NB. we avoid random getattrs and peek in the __dict__ instead
        d = {}
        dicts = [getattr(self.obj, '__dict__', {})]
        for basecls in py.std.inspect.getmro(self.obj.__class__):
            dicts.append(basecls.__dict__)
        seen = {}
        for dic in dicts:
            for name, obj in dic.items():
                if name in seen:
                    continue
                seen[name] = True
>               res = self.makeitem(name, obj)

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/test/pycollect.py:111:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Module 'test_foo.py'>, name = 'E', obj = <test_foo._E object at 
0x758a50>

    def makeitem(self, name, obj):
        res = self.config.hook.pytest_pycollect_makeitem(
>           collector=self, name=name, obj=obj)

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/test/pycollect.py:123:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <HookCaller 'pytest_pycollect_makeitem'>

    def __call__(self, **kwargs):
        methods = self.hookrelay._getmethods(self.name, self.extralookup)
        mc = MultiCall(methods, kwargs, firstresult=self.firstresult)
>       return self.hookrelay._performcall(self.name, mc)

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/_com.py:120:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <py.__._com.HookRelay instance at 0x68ef08>, name = 
'pytest_pycollect_makeitem'
multicall = <MultiCall 0 results, 0 meths, kwargs={'collector': <Module 
'test_foo.py'>, '__multicall__': <MultiCall 0 results, 0 meths, kwargs={...}>, 
'obj': <test_foo._E object at 0x758a50>, 'name': 'E'}>

    def _performcall(self, name, multicall):
>       return multicall.execute()

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/_com.py:105:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <MultiCall 0 results, 0 meths, kwargs={'collector': <Module 
'test_foo.py'>, '__multicall__': <MultiCall 0 results, 0 meths, kwargs={...}>, 
'obj': <test_foo._E object at 0x758a50>, 'name': 'E'}>

    def execute(self):
        while self.methods:
            method = self.methods.pop()
            kwargs = self.getkwargs(method)
>           res = method(**kwargs)

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/_com.py:25:
 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

collector = <Module 'test_foo.py'>, name = 'E', obj = <test_foo._E object at 
0x758a50>

    def pytest_pycollect_makeitem(collector, name, obj):
        if 'unittest' not in sys.modules:
            return # nobody could have possibly derived a subclass
>       if py.std.inspect.isclass(obj) and issubclass(obj, 
> py.std.unittest.TestCase):
E       TypeError: issubclass() arg 1 must be a class

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/py/test/plugin/pytest_unittest.py:22:
 TypeError
=============================================================== 1 error in 0.11 
seconds ================================================================
}}}


with py.test version 1.0.2


-- 
This is an issue notification from bitbucket.org.
You are receiving this either because you are the
owner of the issue, or you are following the issue.
_______________________________________________
py-dev mailing list
py-dev@codespeak.net
http://codespeak.net/mailman/listinfo/py-dev

Reply via email to