Hi Baptiste, On Fri, Jun 27, 2008 at 10:45 +0200, Baptiste Lepilleur wrote: > 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.
exactly. > 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. Hum, in other cases it might be interesting to see the context, though. E.g. if you have a couple of global statements where the failing one depends on values produced by earlier ones. I am not sure what the exact rule should be for such contexts but your example showcases that we should try to improve, indeed. thanks & best, holger > 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. > > _______________________________________________ > py-dev mailing list > py-dev@codespeak.net > http://codespeak.net/mailman/listinfo/py-dev > -- Holger Krekel - freelance manager and programmer pylib py.test/greenlets/svn APIs: http://pylib.org PyPy Python/Compiler tool chain: http://codespeak.net/pypy merlinux collaborative contracting: http://merlinux.eu _______________________________________________ py-dev mailing list py-dev@codespeak.net http://codespeak.net/mailman/listinfo/py-dev