Author: Philip Jenvey <[email protected]>
Branch: py3k
Changeset: r63619:17860a9c42a1
Date: 2013-04-25 18:27 -0700
http://bitbucket.org/pypy/pypy/changeset/17860a9c42a1/
Log: merge default
diff --git a/pypy/module/_io/interp_textio.py b/pypy/module/_io/interp_textio.py
--- a/pypy/module/_io/interp_textio.py
+++ b/pypy/module/_io/interp_textio.py
@@ -1,16 +1,16 @@
-from pypy.module._io.interp_iobase import W_IOBase
-from pypy.interpreter.typedef import (
- TypeDef, GetSetProperty, interp_attrproperty_w, interp_attrproperty,
- generic_new_descr)
-from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault
+import sys
+
from pypy.interpreter.baseobjspace import W_Root
from pypy.interpreter.error import OperationError
-from rpython.rlib.rarithmetic import intmask, r_ulonglong, r_uint
+from pypy.interpreter.gateway import WrappedDefault, interp2app, unwrap_spec
+from pypy.interpreter.typedef import (
+ GetSetProperty, TypeDef, generic_new_descr, interp_attrproperty,
+ interp_attrproperty_w)
+from pypy.module._codecs import interp_codecs
+from pypy.module._io.interp_iobase import W_IOBase, convert_size
+from rpython.rlib.rarithmetic import intmask, r_uint, r_ulonglong
from rpython.rlib.rbigint import rbigint
from rpython.rlib.rstring import UnicodeBuilder
-from pypy.module._codecs import interp_codecs
-from pypy.module._io.interp_iobase import convert_size
-import sys
STATE_ZERO, STATE_OK, STATE_DETACHED = range(3)
@@ -267,6 +267,27 @@
errors = GetSetProperty(W_TextIOBase.errors_get_w),
)
+
+def _determine_encoding(space, encoding):
+ if encoding is not None:
+ return space.wrap(encoding)
+
+ try:
+ w_locale = space.call_method(space.builtin, '__import__',
+ space.wrap('locale'))
+ w_encoding = space.call_method(w_locale, 'getpreferredencoding')
+ except OperationError as e:
+ # getpreferredencoding() may also raise ImportError
+ if not e.match(space, space.w_ImportError):
+ raise
+ return space.wrap('ascii')
+ else:
+ if space.isinstance_w(w_encoding, space.w_unicode):
+ return w_encoding
+
+ raise OperationError(space.w_IOError, space.wrap(
+ "could not determine default encoding"))
+
class PositionCookie(object):
def __init__(self, bigint):
self.start_pos = bigint.ulonglongmask()
@@ -335,32 +356,8 @@
w_errors=None, w_newline=None, line_buffering=0,
write_through=0):
self.state = STATE_ZERO
-
self.w_buffer = w_buffer
-
- # Set encoding
- self.w_encoding = None
- if encoding is None:
- try:
- w_locale = space.call_method(space.builtin, '__import__',
- space.wrap("locale"))
- self.w_encoding = space.call_method(w_locale,
- "getpreferredencoding")
- except OperationError, e:
- # getpreferredencoding() may also raise ImportError
- if not e.match(space, space.w_ImportError):
- raise
- self.w_encoding = space.wrap("ascii")
- else:
- if not space.isinstance_w(self.w_encoding, space.w_unicode):
- self.w_encoding = None
- if self.w_encoding:
- pass
- elif encoding is not None:
- self.w_encoding = space.wrap(encoding)
- else:
- raise OperationError(space.w_IOError, space.wrap(
- "could not determine default encoding"))
+ self.w_encoding = _determine_encoding(space, encoding)
if space.is_none(w_errors):
w_errors = space.wrap("strict")
diff --git a/rpython/rlib/test/test_runicode.py
b/rpython/rlib/test/test_runicode.py
--- a/rpython/rlib/test/test_runicode.py
+++ b/rpython/rlib/test/test_runicode.py
@@ -738,9 +738,9 @@
py.test.skip("requires cp932 locale")
s = '\xff\xf4\x8f\xbf\xbf'
- encoder = self.getdecoder('mbcs')
- assert encoder(s, len(s), 'strict') == (u'\U0010ffff', 5)
- py.test.raises(UnicodeEncodeError, encoder, s, len(s), 'strict',
+ decoder = self.getdecoder('mbcs')
+ assert decoder(s, len(s), 'strict') == (u'\U0010ffff', 5)
+ py.test.raises(UnicodeEncodeError, decoder, s, len(s), 'strict',
force_ignore=False)
def test_mbcs_encode_force_replace(self):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit