[pypy-svn] r73722 - in pypy/trunk/pypy/module/_file: . test
fijal at codespeak.net
fijal at codespeak.net
Tue Apr 13 22:45:06 CEST 2010
Author: fijal
Date: Tue Apr 13 22:45:04 2010
New Revision: 73722
Modified:
pypy/trunk/pypy/module/_file/interp_file.py
pypy/trunk/pypy/module/_file/interp_stream.py
pypy/trunk/pypy/module/_file/test/test_file.py
Log:
Propagate name to exceptions
Modified: pypy/trunk/pypy/module/_file/interp_file.py
==============================================================================
--- pypy/trunk/pypy/module/_file/interp_file.py (original)
+++ pypy/trunk/pypy/module/_file/interp_file.py Tue Apr 13 22:45:04 2010
@@ -82,6 +82,7 @@
def direct___init__(self, w_name, mode='r', buffering=-1):
name = self.space.str_w(w_name)
+ self.name = name
self.direct_close()
self.check_mode_ok(mode)
stream = streamio.open_file_as_stream(name, mode, buffering)
@@ -239,7 +240,7 @@
try:
self.direct_fdopen(fd, mode, buffering)
except StreamErrors, e:
- raise wrap_streamerror(self.space, e)
+ raise wrap_streamerror(self.space, e, self.name)
_exposed_method_names = []
@@ -275,7 +276,7 @@
try:
result = self.direct_%(name)s(%(callsig)s)
except StreamErrors, e:
- raise wrap_streamerror(space, e)
+ raise wrap_streamerror(space, e, self.name)
finally:
self.unlock()
return %(wrapresult)s
Modified: pypy/trunk/pypy/module/_file/interp_stream.py
==============================================================================
--- pypy/trunk/pypy/module/_file/interp_stream.py (original)
+++ pypy/trunk/pypy/module/_file/interp_stream.py Tue Apr 13 22:45:04 2010
@@ -10,16 +10,16 @@
import os
-def wrap_streamerror(space, e):
+def wrap_streamerror(space, e, filename):
if isinstance(e, streamio.StreamError):
return OperationError(space.w_ValueError,
space.wrap(e.message))
elif isinstance(e, OSError):
- return wrap_oserror_as_ioerror(space, e)
+ return wrap_oserror_as_ioerror(space, e, filename)
else:
return OperationError(space.w_IOError, space.w_None)
-def wrap_oserror_as_ioerror(space, e):
+def wrap_oserror_as_ioerror(space, e, filename):
assert isinstance(e, OSError)
errno = e.errno
try:
@@ -28,7 +28,8 @@
msg = 'error %d' % errno
w_error = space.call_function(space.w_IOError,
space.wrap(errno),
- space.wrap(msg))
+ space.wrap(msg),
+ space.wrap(filename))
return OperationError(space.w_IOError, w_error)
Modified: pypy/trunk/pypy/module/_file/test/test_file.py
==============================================================================
--- pypy/trunk/pypy/module/_file/test/test_file.py (original)
+++ pypy/trunk/pypy/module/_file/test/test_file.py Tue Apr 13 22:45:04 2010
@@ -125,6 +125,13 @@
assert type(res) is str
f.close()
+ def test_oserror_has_filename(self):
+ try:
+ f = self.file("file that is clearly not there")
+ except IOError, e:
+ assert e.filename == 'file that is clearly not there'
+ else:
+ raise Exception("did not raise")
def test_readline_mixed_with_read(self):
s = '''From MAILER-DAEMON Wed Jan 14 14:42:30 2009
More information about the Pypy-commit
mailing list