[pypy-svn] r78137 - in pypy/branch/fast-forward/pypy/module/_io: . test
afa at codespeak.net
afa at codespeak.net
Wed Oct 20 16:53:02 CEST 2010
Author: afa
Date: Wed Oct 20 16:53:00 2010
New Revision: 78137
Modified:
pypy/branch/fast-forward/pypy/module/_io/interp_fileio.py
pypy/branch/fast-forward/pypy/module/_io/test/test_fileio.py
Log:
FileIO.__repr__, and make FileIO.name a readwrite attribute
Modified: pypy/branch/fast-forward/pypy/module/_io/interp_fileio.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/_io/interp_fileio.py (original)
+++ pypy/branch/fast-forward/pypy/module/_io/interp_fileio.py Wed Oct 20 16:53:00 2010
@@ -1,6 +1,7 @@
from pypy.module._io.interp_iobase import W_RawIOBase
from pypy.interpreter.typedef import (
- TypeDef, interp_attrproperty, interp_attrproperty_w, GetSetProperty)
+ TypeDef, interp_attrproperty, interp_attrproperty_w, GetSetProperty,
+ make_weakref_descr)
from pypy.interpreter.gateway import interp2app, unwrap_spec, Arguments
from pypy.interpreter.baseobjspace import ObjSpace, W_Root
from pypy.interpreter.error import OperationError, wrap_oserror, wrap_oserror2
@@ -9,6 +10,27 @@
from os import O_RDONLY, O_WRONLY, O_RDWR, O_CREAT, O_TRUNC
import sys, os, stat, errno
+def interp_member_w(name, cls, doc=None):
+ "NOT_RPYTHON: initialization-time only"
+ def fget(space, obj):
+ w_value = getattr(obj, name)
+ if w_value is None:
+ raise OperationError(space.w_AttributeError,
+ space.wrap(name))
+ else:
+ return w_value
+ def fset(space, obj, w_value):
+ setattr(obj, name, w_value)
+ def fdel(space, obj):
+ w_value = getattr(obj, name)
+ if w_value is None:
+ raise OperationError(space.w_AttributeError,
+ space.wrap(name))
+ setattr(obj, name, None)
+
+ return GetSetProperty(fget, fset, fdel, cls=cls, doc=doc)
+
+
O_BINARY = getattr(os, "O_BINARY", 0)
O_APPEND = getattr(os, "O_APPEND", 0)
@@ -288,6 +310,21 @@
raise wrap_oserror(space, e)
return space.wrap(res)
+ @unwrap_spec('self', ObjSpace)
+ def repr_w(self, space):
+ if self.fd < 0:
+ return space.wrap("<_io.FileIO [closed]>")
+
+ if self.w_name is None:
+ return space.wrap(
+ "<_io.FileIO fd=%d mode='%s'>" % (
+ self.fd, self._mode()))
+ else:
+ w_repr = space.repr(self.w_name)
+ return space.wrap(
+ "<_io.FileIO name=%s mode='%s'>" % (
+ space.str_w(w_repr), self._mode()))
+
# ______________________________________________
@unwrap_spec('self', ObjSpace, W_Root)
@@ -386,6 +423,8 @@
'FileIO', W_RawIOBase.typedef,
__new__ = interp2app(W_FileIO.descr_new.im_func),
__init__ = interp2app(W_FileIO.descr_init),
+ __repr__ = interp2app(W_FileIO.repr_w),
+ __weakref__ = make_weakref_descr(W_FileIO),
seek = interp2app(W_FileIO.seek_w),
tell = interp2app(W_FileIO.tell_w),
@@ -401,7 +440,7 @@
seekable = interp2app(W_FileIO.seekable_w),
fileno = interp2app(W_FileIO.fileno_w),
isatty = interp2app(W_FileIO.isatty_w),
- name = interp_attrproperty_w('w_name', cls=W_FileIO),
+ name = interp_member_w('w_name', cls=W_FileIO),
closefd = interp_attrproperty('closefd', cls=W_FileIO),
mode = GetSetProperty(W_FileIO.descr_get_mode),
)
Modified: pypy/branch/fast-forward/pypy/module/_io/test/test_fileio.py
==============================================================================
--- pypy/branch/fast-forward/pypy/module/_io/test/test_fileio.py (original)
+++ pypy/branch/fast-forward/pypy/module/_io/test/test_fileio.py Wed Oct 20 16:53:00 2010
@@ -21,6 +21,14 @@
assert f.closefd is True
f.close()
+ def test_weakrefable(self):
+ import _io
+ from weakref import proxy
+ f = _io.FileIO(self.tmpfile)
+ p = proxy(f)
+ assert p.mode == 'rb'
+ f.close()
+
def test_open_fd(self):
import _io
os = self.posix
@@ -114,3 +122,15 @@
assert f.readinto(a) == 3
f.close()
assert a == 'a\nbxxxxxxx'
+
+ def test_repr(self):
+ import _io
+ f = _io.FileIO(self.tmpfile, 'r')
+ assert repr(f) == ("<_io.FileIO name=%r mode='%s'>"
+ % (f.name, f.mode))
+ del f.name
+ assert repr(f) == ("<_io.FileIO fd=%r mode='%s'>"
+ % (f.fileno(), f.mode))
+ f.close()
+ assert repr(f) == "<_io.FileIO [closed]>"
+
More information about the Pypy-commit
mailing list