Noticed some new failures. <br><br>Full log for build step with Python trunk binary:<br><br><a href="http://www.python.org/dev/buildbot/community/all/x86%20Ubuntu%20Breezy%20trunk/builds/63/step-py.lib/0">http://www.python.org/dev/buildbot/community/all/x86%20Ubuntu%20Breezy%20trunk/builds/63/step-py.lib/0
</a><br><br>Full log for build step with Python 2.5 binary:<br><br><a href="http://www.python.org/dev/buildbot/community/all/x86%20Ubuntu%20Breezy%202.5/builds/33/step-py.lib/0">http://www.python.org/dev/buildbot/community/all/x86%20Ubuntu%20Breezy%202.5/builds/33/step-py.lib/0
</a><br><br>Here are the errors from the 2.5 build step:<br><pre><span class="stdout">_________________ entrypoint: TestRest().test_class_typedefs __________________<br><br> def test_class_typedefs(self):<br> class A(object):
<br> def __init__(self, x):<br> pass<br> <br> class B(object):<br> def __init__(self, y):<br> pass<br> <br> def xxx(x):<br> return x
<br> <br> descs = {'A':A, 'B':B, 'xxx':xxx}<br> ds = DocStorage().from_dict(descs)<br> t = Tracer(ds)<br> t.start_tracing()<br> xxx(A(3))<br> xxx(B("f"))<br>
t.end_tracing()<br> lg = DirectPaste()<br> tempdir = temppath.ensure("classargs", dir=True)<br> r = RestGen(ds, lg, DirWriter(tempdir))<br>> r.write()<br><br>[/tmp/pylib/py/apigen/rest/testing/test_rest.py:285]
<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br><br> def write(self):<br> """write the data to the writer"""<br> # note that this builds up a list of Rest elements for the index as
<br> # 'side effect', the list is passed along and filled, while the actual<br> # sections (also ReST elements) are returned by the write_* methods<br> # XXX this is quite icky! would be nice to have refactored
<br> indexlst = [Title("Module: %s" % self.dsa.get_module_name(),<br> belowchar="="),<br> Paragraph(self.dsa.get_module_info()),<br> Title("Exported functions:", belowchar="-")]
<br> funclst = self.write_function_list(indexlst)<br> indexlst.append(Title("Exported classes:", belowchar="-"))<br>> classlst = self.write_class_list(indexlst)<br><br>[/tmp/pylib/py/apigen/rest/genrest.py:128]
<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br><br> def write_class_list(self, indexlst):<br> retlst = []<br> for name in self.dsa.get_class_names():<br> sectionname = 'class_%s' % (name,)
<br> linktarget = self.writer.getlink('class', name, sectionname)<br> indexlst.append(ListItem(Text("Class: "), Link(name, linktarget)))<br>> retlst.append((sectionname, self.write_class
(sectionname, name)))<br><br>[/tmp/pylib/py/apigen/rest/genrest.py:157]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br><br> def write_class(self, section_name, class_name):<br> classlst = [Title("Class: %s" % class_name, belowchar='-'),
<br> LiteralBlock(self.dsa.get_function_doc(class_name))]<br> <br> # write down exported methods<br> classlst.append(Title("Exported methods:", belowchar="^"))
<br> funclist = []<br> for method in self.dsa.get_class_methods(class_name):<br> sectionname = 'method_%s_%s' % (class_name, method)<br> linktext = '%s.%s' % (class_name, method)<br> linktarget =
self.writer.getlink('function', linktext,<br> sectionname)<br> classlst.append(ListItem(Link(linktext, linktarget)))<br> # XXX assuming a function is always part of a class section
<br> funclist.append((sectionname,<br> self.write_function(sectionname,<br> class_name + "." + method,<br>> '^')))
<br><br>[/tmp/pylib/py/apigen/rest/genrest.py:177]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br><br> def write_function(self, section_name, fun_name, belowchar='-'):<br> # XXX I think the docstring should either be split on \n\n and cleaned
<br> # from indentation, or treated as ReST too (although this is obviously<br> # dangerous for non-ReST docstrings)...<br> lst = [Title("Function: %s" % fun_name, belowchar=belowchar),<br> LiteralBlock(
self.dsa.get_function_doc(fun_name)),<br> LiteralBlock(self.dsa.get_function_definition(fun_name))]<br> <br> <br> args, retval = self.dsa.get_function_signature(fun_name)<br> arg_str = "\n".join(["%s :: %s" % (str(name), str(type)) for name, type in args])
<br> arg_str += "\n" + "Return value :: %s" % str(retval)<br> lst.append(Paragraph("where:"))<br> lst.append(LiteralBlock(arg_str))<br> <br> # XXX missing implementation of
dsa.get_function_location()<br> #filename, lineno = self.dsa.get_function_location(fun_name)<br> #linkname, linktarget = self.linkgen.getlink(filename, lineno)<br> #if linktarget:<br> # lst.append
(Paragraph("Function source: ",<br> # Link(linkname, linktarget)))<br> #else:<br> lst.append(Paragraph('Function source:'))<br>> lst.append(LiteralBlock(self.dsa.get_function_source
(fun_name)))<br><br>[/tmp/pylib/py/apigen/rest/genrest.py:203]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br><br> def get_function_source(self, name):<br> desc = self.ds.descs
[name]<br> try:<br>> return str(py.code.Source(desc.pyobj))<br><br>[/tmp/pylib/py/apigen/tracer/docstorage.py:196]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br>
<br> def __init__(self, *parts, **kwargs):<br> self.lines = lines = []<br> de = kwargs.get('deindent', True)<br> rstrip = kwargs.get('rstrip', True) <br> for part in parts:<br> if not part:
<br> partlines = []<br> if isinstance(part, Source):<br> partlines = part.lines<br> elif isinstance(part, (unicode, str)):<br> partlines = part.split('\n')
<br> if rstrip:<br> while partlines: <br> if partlines[-1].strip(): <br> break<br> partlines.pop()<br> else:
<br>> partlines = getsource(part, deindent=de).lines<br><br>[/tmp/pylib/py/code/source.py:30]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br><br> def getsource(obj, **kwargs):
<br> if hasattr(obj, 'func_code'):<br> obj = obj.func_code<br> elif hasattr(obj, 'f_code'):<br> obj = obj.f_code<br> try:<br> fullsource = obj.co_filename.__source__<br>
except AttributeError:<br>> strsrc = inspect.getsource(obj)<br><br>[/tmp/pylib/py/code/source.py:231]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br><br> def getsource(object):
<br> """Return the text of the source code for an object.<br> <br> The argument may be a module, class, method, function, traceback, frame,<br> or code object. The source code is returned as a single string. An
<br> IOError is raised if the source code cannot be retrieved."""<br>> lines, lnum = getsourcelines(object)<br><br>[/usr/lib/python2.4/inspect.py:563]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<br><br> def getsourcelines(object):<br> """Return a list of source lines and starting line number for an object.<br> <br> The argument may be a module, class, method, function, traceback, frame,
<br> or code object. The source code is returned as a list of the lines<br> corresponding to the object and the line number indicates where in the<br> original source file the first line of code was found. An IOError is
<br> raised if the source code cannot be retrieved."""<br> lines, lnum = findsource(object)<br> <br> if ismodule(object): return lines, 0<br>> else: return getblock(lines[lnum:]), lnum + 1
<br><br>[/usr/lib/python2.4/inspect.py:555]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _<br><br> def getblock(lines):<br> """Extract the block of code at the top of the given list of lines."""
<br> try:<br>> tokenize.tokenize(ListReader(lines).readline, BlockFinder().tokeneater)<br><br>[/usr/lib/python2.4/inspect.py:538]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<br><br> def tokenize(readline, tokeneater=printtoken):<br> """<br> The tokenize() function accepts two parameters: one representing the<br> input stream, and one providing an output mechanism for tokenize().
<br> <br> The first parameter, readline, must be a callable object which provides<br> the same interface as the readline() method of built-in file objects.<br> Each call to the function should return one line of input as a string.
<br> <br> The second parameter, tokeneater, must also be a callable object. It is<br> called once for each token, with five arguments, corresponding to the<br> tuples generated by generate_tokens().
<br> """<br> try:<br>> tokenize_loop(readline, tokeneater)<br><br>[/usr/lib/python2.4/tokenize.py:153]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<br><br> def tokenize_loop(readline, tokeneater):<br>> for token_info in generate_tokens(readline):<br><br>[/usr/lib/python2.4/tokenize.py:159]<br>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
<br><br> def generate_tokens(readline):<br> """<br> The generate_tokens() generator requires one argment, readline, which<br> must be a callable object which provides the same interface as the
<br> readline() method of built-in file objects. Each call to the function<br> should return one line of input as a string.<br> <br> The generator produces 5-tuples with these members: the token type; the
<br> token string; a 2-tuple (srow, scol) of ints specifying the row and<br> column where the token begins in the source; a 2-tuple (erow, ecol) of<br> ints specifying the row and column where the token ends in the source;
<br> and the line on which the token was found. The line passed is the<br> logical line; continuation lines are included.<br> """<br> lnum = parenlev = continued = 0<br> namechars, numchars =
string.ascii_letters + '_', '0123456789'<br> contstr, needcont = '', 0<br> contline = None<br> indents = [0]<br> <br> while 1: # loop over lines in stream<br>
line = readline()<br> lnum = lnum + 1<br> pos, max = 0, len(line)<br> <br> if contstr: # continued string<br> if not line:<br> raise TokenError, ("EOF in multi-line string", strstart)
<br> endmatch = endprog.match(line)<br> if endmatch:<br> pos = end = endmatch.end(0)<br> yield (STRING, contstr + line[:end],<br> strstart, (lnum, end), contline + line)
<br> contstr, needcont = '', 0<br> contline = None<br> elif needcont and line[-2:] != '\\\n' and line[-3:] != '\\\r\n':<br> yield (ERRORTOKEN, contstr + line,
<br> strstart, (lnum, len(line)), contline)<br> </span><span class="stdout"> contstr = ''<br> contline = None<br> continue<br> else:
<br> contstr = contstr + line<br> contline = contline + line<br> continue<br> <br> elif parenlev == 0 and not continued: # new statement<br> if not line: break
<br> column = 0<br> while pos < max: # measure leading whitespace<br> if line[pos] == ' ': column = column + 1<br> elif line[pos] == '\t': column = (column/tabsize + 1)*tabsize
<br> elif line[pos] == '\f': column = 0<br> else: break<br> pos = pos + 1<br> if pos == max: break<br> <br> if line[pos] in '#\r\n': # skip comments or blank lines
<br> yield ((NL, COMMENT)[line[pos] == '#'], line[pos:],<br> (lnum, pos), (lnum, len(line)), line)<br> continue<br> <br> if column > indents[-1]: # count indents or dedents
<br> indents.append(column)<br> yield (INDENT, line[:pos], (lnum, 0), (lnum, pos), line)<br> while column < indents[-1]:<br> if column not in indents:
<br>E raise IndentationError(<br> "unindent does not match any outer indentation level")<br>> IndentationError: unindent does not match any outer indentation level
<br><br>[/usr/lib/python2.4/tokenize.py:229]<br>_______________________________________________________________________________<br>______ entrypoint: TestPopenGateway().test_channel_passing_over_channel _______<br><br> def test_channel_passing_over_channel(self):
<br> channel = self.gw.remote_exec('''<br> c = channel.gateway.newchannel()<br> channel.send(c)<br> c.send(42)<br> ''')<br> c =
channel.receive()<br> x = c.receive()<br> assert x == 42<br> <br> # check that the both sides previous channels are really gone<br> channel.waitclose(0.3)<br>E assert <a href="http://channel.id">
channel.id</a> not in self.gw.channelfactory._channels<br>> AssertionError: (inconsistently failed then succeeded)<br><br>[/tmp/pylib/py/execnet/testing/test_gateway.py:160]<br>_______________________________________________________________________________
<br>_______________________ entrypoint: test_importall[226] _______________________<br><br> def check_import(modpath): <br> print "checking import", modpath<br>E assert __import__(modpath) <br>> ImportError: No module named
package.submodule.__init__<br><br>[/tmp/pylib/py/misc/testing/test_initpkg.py:67]<br>- - - - - - - - - - - - - [226]: recorded stdout - - - - - - - - - - - - - -<br>checking import py.__.apigen.tracer.testing.package.submodule.__init__
<br><br>_______________________________________________________________________________<br>_______________________ entrypoint: test_importall[227] _______________________<br><br> def check_import(modpath): <br> print "checking import", modpath
<br>E assert __import__(modpath) <br>> ImportError: No module named package.submodule.pak.__init__<br><br>[/tmp/pylib/py/misc/testing/test_initpkg.py:67]<br>- - - - - - - - - - - - - [227]: recorded stdout - - - - - - - - - - - - - -
<br>checking import py.__.apigen.tracer.testing.package.submodule.pak.__init__<br><br>_______________________________________________________________________________<br>_______________________ entrypoint: test_importall[228] _______________________
<br><br> def check_import(modpath): <br> print "checking import", modpath<br>E assert __import__(modpath) <br>> ImportError: No module named package.submodule.pak.mod<br><br>[/tmp/pylib/py/misc/testing/test_initpkg.py:67]
<br>- - - - - - - - - - - - - [228]: recorded stdout - - - - - - - - - - - - - -<br>checking import py.__.apigen.tracer.testing.package.submodule.pak.mod<br><br>_______________________________________________________________________________
<br>===== tests finished: 1256 passed, 5 failed, 55 skipped in 154.12 seconds =====<br>inserting into sys.path: /tmp/pylib</span></pre><br>