Author: Brian Kearns <[email protected]>
Branch: refactor-buffer-api
Changeset: r70862:f46d701f1b28
Date: 2014-03-20 16:43 -0400
http://bitbucket.org/pypy/pypy/changeset/f46d701f1b28/
Log: allow w_obj buffer methods to fail with rpython exception
diff --git a/pypy/interpreter/baseobjspace.py b/pypy/interpreter/baseobjspace.py
--- a/pypy/interpreter/baseobjspace.py
+++ b/pypy/interpreter/baseobjspace.py
@@ -200,7 +200,7 @@
w_result = space.get_and_call_function(w_impl, self)
if space.isinstance_w(w_result, space.w_buffer):
return w_result.buffer_w(space, flags)
- raise oefmt(space.w_TypeError, "'%T' does not have the buffer
interface", self)
+ raise TypeError
def readbuf_w(self, space):
w_impl = space.lookup(self, '__buffer__')
@@ -208,7 +208,7 @@
w_result = space.get_and_call_function(w_impl, self)
if space.isinstance_w(w_result, space.w_buffer):
return w_result.readbuf_w(space)
- self._typed_unwrap_error(space, "readable buffer")
+ raise TypeError
def writebuf_w(self, space):
w_impl = space.lookup(self, '__buffer__')
@@ -216,7 +216,7 @@
w_result = space.get_and_call_function(w_impl, self)
if space.isinstance_w(w_result, space.w_buffer):
return w_result.writebuf_w(space)
- self._typed_unwrap_error(space, "writeable buffer")
+ raise TypeError
def charbuf_w(self, space):
w_impl = space.lookup(self, '__buffer__')
@@ -224,7 +224,7 @@
w_result = space.get_and_call_function(w_impl, self)
if space.isinstance_w(w_result, space.w_buffer):
return w_result.charbuf_w(space)
- self._typed_unwrap_error(space, "character buffer")
+ raise TypeError
def str_w(self, space):
self._typed_unwrap_error(space, "string")
@@ -1352,19 +1352,35 @@
def buffer_w(self, w_obj, flags):
# New buffer interface, returns a buffer based on flags
- return w_obj.buffer_w(self, flags)
+ try:
+ return w_obj.buffer_w(self, flags)
+ except TypeError:
+ raise oefmt(self.w_TypeError,
+ "'%T' does not have the buffer interface", w_obj)
def readbuf_w(self, w_obj):
# Old buffer interface, returns a readonly buffer
- return w_obj.readbuf_w(self)
+ try:
+ return w_obj.readbuf_w(self)
+ except TypeError:
+ raise oefmt(self.w_TypeError,
+ "expected a readable buffer object")
def writebuf_w(self, w_obj):
# Old buffer interface, returns a writeable buffer
- return w_obj.writebuf_w(self)
+ try:
+ return w_obj.writebuf_w(self)
+ except TypeError:
+ raise oefmt(self.w_TypeError,
+ "expected a writeable buffer object")
def charbuf_w(self, w_obj):
# Old buffer interface, returns a character buffer
- return w_obj.charbuf_w(self)
+ try:
+ return w_obj.charbuf_w(self)
+ except TypeError:
+ raise oefmt(self.w_TypeError,
+ "expected a character buffer object")
def bufferstr_w(self, w_obj):
# Directly returns an interp-level str. Note that if w_obj is a
diff --git a/pypy/objspace/std/test/test_bytesobject.py
b/pypy/objspace/std/test/test_bytesobject.py
--- a/pypy/objspace/std/test/test_bytesobject.py
+++ b/pypy/objspace/std/test/test_bytesobject.py
@@ -635,7 +635,7 @@
table = maketrans('abc', 'xyz')
assert 'xyzxyz' == 'xyzabcdef'.translate(table, 'def')
exc = raises(TypeError, "'xyzabcdef'.translate(memoryview(table),
'def')")
- assert 'character buffer' in str(exc.value)
+ assert str(exc.value) == 'expected a character buffer object'
table = maketrans('a', 'A')
assert 'Abc' == 'abc'.translate(table)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit