[py-dev] py.test bug: large stack trace produced with full source dump on import failure

Baptiste Lepilleur blep at users.sourceforge.net
Fri Jun 27 10:45:37 CEST 2008


I have run into an issue with py.test which make it pretty much unsable with 
the following scenario:
- a test module import another module
- the import fails due to an exception thrown by the other module

This scenario raise two bugs (hopefully this is the scenario to reproduce 
this bug):
- Py.test produces a stack trace with a full source dump of the imported 
module source
- Information about the exception that caused the failure is missing.

The source does not end line 2269, so my guess is that py.test dump the 
source until the source line where the exception was raised.

I believe py.test should truncate the source to show only the relevant part, 
that is ignore the 2000 lines until the global variable declaration 
SCHEMA_SCHEMA in this case.

To illustrate the issue, I've put excerpt from both the standard python 
stacktrace and the py.test failure below:

*** Standard python traces:
**********************
---
Python 2.5.2 (r252:60911, Feb 21 2008, 13:11:45) [MSC v.1310 32 bit (Intel)] 
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import test_sbuildformat
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File 
"E:\prg\vc\Lib\jsoncpp.roadmap\trunk\jsoncpp\sbuilder\src\sbuilder\testing\test_sbuildformat.py", 
line 4, in <module>
    import sbuilder.sbuildfileformat as sbuildfileformat
  File 
"E:\prg\vc\Lib\jsoncpp.roadmap\trunk\jsoncpp\sbuilder\src\sbuilder\sbuildfileformat.py", 
line 2507, in <module>
    SCHEMA_SCHEMA = getSchemaSchema()
  File 
"E:\prg\vc\Lib\jsoncpp.roadmap\trunk\jsoncpp\sbuilder\src\sbuilder\sbuildfileformat.py", 
line 2269, in getSchemaSchema
    error_log.makeErrorReport( tokenizer.getNormalizedInput(), 13 )
sbuilder.sbuildfileformat.SchemaTypeParameterError
>>>
---

**** Py.test traces (abrievated, full source dump is 120KO)
**********************************************
============================= test process starts 
=============================
executable:   c:\Python25\python.exe  (2.5.2-final-0)
using py lib: c:\Python25\lib\site-packages\py <rev unknown>

test_sbuilder.py[1] .
test_sbuildformat.py - FAILED TO LOAD MODULE

_______________________________________________________________________________
________________________________ entrypoint: 
_________________________________

    from __future__ import generators
    import types
    import re
>   import sbuilder.sbuildfileformat as sbuildfileformat

[E:\prg\vc\Lib\jsoncpp.roadmap\trunk\jsoncpp\sbuilder\src\sbuilder\testing\test_sbuildformat.py:4]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _

    import types
    import sets
    import weakref

[....] 120KO later:

>   SCHEMA_SCHEMA = getSchemaSchema()

[E:\prg\vc\Lib\jsoncpp.roadmap\trunk\jsoncpp\sbuilder\src\sbuilder\sbuildfileformat.py:2507]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
_ _

    def getSchemaSchema():
        """Returns a document representing a schema of a schema.
        This can be used to validate a schema.
        Exceptions:
        - DocumentParsingError if failed to parse the schema text document
          (should never occurs, it is a bug introduced when updating the 
schema).
        -
        """
        error_log = ErrorLog( synchronous_display = False )
        error_memo = error_log.errorMemo()
        tokenizer = Tokenizer( getSchemaTextDocument(), 'schema.schema', 
error_log )
        parser = Parser( tokenizer, error_log )
        schema_value = parser.parse()
        if schema_value is None:
            raise DocumentParsingError, \
                  error_log.makeErrorReport( tokenizer.getNormalizedInput(), 
13 )

        try:
            schema_schema = SchemaBuilder(error_log).getSchema( 
schema_value )
            if schema_schema and not schema_schema.check( error_log ):
                schema_schema = None
        except SchemaTypeParameterError, error:
            error.log( error_log )
            schema_schema = None
        if schema_schema is None or error_log.hasNewErrorsSinceMemo( 
error_memo ):
            raise SchemaTypeParameterError, \
E                 error_log.makeErrorReport( tokenizer.getNormalizedInput(), 
13 )
>                 SchemaTypeParameterError

[E:\prg\vc\Lib\jsoncpp.roadmap\trunk\jsoncpp\sbuilder\src\sbuilder\sbuildfileformat.py:2269]
_______________________________________________________________________________
============= tests finished: 1 passed, 1 failed in 0.09 seconds 
==============

Regards,
Baptiste.




More information about the Pytest-dev mailing list