pypy / lib-python / TODO

Full commit
TODO list for 2.7.0

You can find the results of the most recent buildbot run at:

Probably easy tasks

- (unicode|bytearray).(index|find) should accept None as indices (see

- missing posix.confstr and posix.confstr_names

- remove code duplication: bit_length() and _count_bits() in rlib/,
  objspace/std/ and objspace/std/

- missing module pyexpat.errors

- support for PYTHONIOENCODING, this needs a way to update file.encoding

- implement format__Complex_ANY() in pypy/objspace/std/

- Code like this does not work, for two reasons::

  from __future__ import (with_statement,
  assert type("") is unicode

- Code like::

  assert(x is not None, "error message")

  should emit a SyntaxWarning when compiled (the tuple is always true)

Medium tasks

- Ast objects should be picklable, see in pypy/module/_ast/test/

- socket module has a couple of changes (including AF_TIPC packet range)

- (test_lib2to3) When a "for" loop runs a generator function, if the loop is
  exited before the end, the "finally" clause of the generator is not called
  until the next gc collection.  In our case, in lib2to3/,
  WildcardPattern.match_seq() does not exhaust the generate_matches() generator,
  and stderr is not restored.

Longer tasks

- Fix usage of __cmp__ in subclasses::

    class badint(int):
        def __cmp__(self, other):
            raise RuntimeError
    raises(RuntimeError, cmp, 0, badint(1))

- Fix comparison of objects layout: if two classes have the same __slots__, it
  should be possible to change the instances __class__::

      class A(object): __slots__ = ('a', 'b')
      class B(object): __slots__ = ('b', 'a')
      a = A()
      a.__class__ = B

- Show a ResourceWarning when a file/socket is not explicitely closed, like
  CPython did for 3.2:
  in PyPy this should be enabled by default

Won't do for this release

Note: when you give up with a missing feature, please mention it here, as well
as the various skips added to the test suite.

- py3k warnings

  * the -3 flag is accepted on the command line, but displays a warning (see

- CJK codecs.

  * In `./`, skipped all `test_codecencodings_*.py` and

  * In test_codecs, commented out various items in `all_unicode_encodings`.

- Error messages about ill-formed calls (like "argument after ** must be a
  mapping") don't always show the function name.  That's hard to fix for
  the case of errors raised when the Argument object is created (as opposed
  to when parsing for a given target function, which occurs later).

  * Some "..." were added to doctests in

- CPython's builtin methods are both functions and unbound methods (for
  example, `str.upper is dict(str.__dict__)['upper']`). This is not the case
  in pypy, and assertions like `object.__str__ is object.__str__` are False
  with pypy.  Use the `==` operator instead.


- When importing a nested module fails, the ImportError message mentions the
  name of the package up to the component that could not be imported (CPython
  prefers to display the names starting with the failing part).