[pypy-commit] pypy default: Support custom errors.
arigo
noreply at buildbot.pypy.org
Mon Aug 1 16:18:38 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r46147:e1a78e27a180
Date: 2011-07-31 18:44 +0200
http://bitbucket.org/pypy/pypy/changeset/e1a78e27a180/
Log: Support custom errors.
diff --git a/pypy/module/_multibytecodec/interp_incremental.py b/pypy/module/_multibytecodec/interp_incremental.py
--- a/pypy/module/_multibytecodec/interp_incremental.py
+++ b/pypy/module/_multibytecodec/interp_incremental.py
@@ -4,7 +4,7 @@
MultibyteCodec, wrap_unicodedecodeerror, wrap_runtimeerror)
from pypy.interpreter.baseobjspace import Wrappable
from pypy.interpreter.gateway import interp2app, unwrap_spec
-from pypy.interpreter.typedef import TypeDef
+from pypy.interpreter.typedef import TypeDef, GetSetProperty
from pypy.module._codecs.interp_codecs import CodecState
@@ -57,6 +57,12 @@
self.pending = object[pos:]
return space.wrap(output)
+ def fget_errors(self, space):
+ return space.wrap(self.errors)
+
+ def fset_errors(self, space, w_errors):
+ self.errors = space.str_w(w_errors)
+
@unwrap_spec(errors="str_or_None")
def mbidecoder_new(space, w_subtype, errors=None):
@@ -70,6 +76,8 @@
__new__ = interp2app(mbidecoder_new),
decode = interp2app(MultibyteIncrementalDecoder.decode_w),
reset = interp2app(MultibyteIncrementalDecoder.reset_w),
+ errors = GetSetProperty(MultibyteIncrementalDecoder.fget_errors,
+ MultibyteIncrementalDecoder.fset_errors),
)
diff --git a/pypy/module/_multibytecodec/test/test_app_incremental.py b/pypy/module/_multibytecodec/test/test_app_incremental.py
--- a/pypy/module/_multibytecodec/test/test_app_incremental.py
+++ b/pypy/module/_multibytecodec/test/test_app_incremental.py
@@ -63,3 +63,14 @@
d.reset()
r = d.decode("ab")
assert r == u'ab'
+
+ def test_decode_hz_error(self):
+ d = self.IncrementalHzDecoder()
+ raises(UnicodeDecodeError, d.decode, "~{abc", True)
+ d = self.IncrementalHzDecoder("ignore")
+ r = d.decode("~{abc", True)
+ assert r == u'\u5f95'
+ d = self.IncrementalHzDecoder()
+ d.errors = "replace"
+ r = d.decode("~{abc", True)
+ assert r == u'\u5f95\ufffd'
More information about the pypy-commit
mailing list