[pypy-commit] pypy stdlib-2.7.8: fixing _csv lineterminator exception message

numerodix noreply at buildbot.pypy.org
Sat Aug 23 02:29:41 CEST 2014


Author: Martin Matusiak <numerodix at gmail.com>
Branch: stdlib-2.7.8
Changeset: r72985:9446ebe200b3
Date: 2014-07-26 12:12 +0200
http://bitbucket.org/pypy/pypy/changeset/9446ebe200b3/

Log:	fixing _csv lineterminator exception message (grafted from
	cbfe89ead8c2e8ad4d9b6f0cc5884e66bdf6f4ab)

diff --git a/pypy/module/_csv/interp_csv.py b/pypy/module/_csv/interp_csv.py
--- a/pypy/module/_csv/interp_csv.py
+++ b/pypy/module/_csv/interp_csv.py
@@ -34,10 +34,15 @@
         return default
     return space.int_w(w_src)
 
-def _get_str(space, w_src, default):
+def _get_str(space, w_src, default, attrname):
     if w_src is None:
         return default
-    return space.str_w(w_src)
+    try:
+        return space.str_w(w_src)
+    except OperationError as e:
+        if e.match(space, space.w_TypeError):
+            raise oefmt(space.w_TypeError, '"%s" must be a string', attrname)
+        raise
 
 def _get_char(space, w_src, default, name):
     if w_src is None:
@@ -91,7 +96,7 @@
     dialect.delimiter = _get_char(space, w_delimiter, ',', 'delimiter')
     dialect.doublequote = _get_bool(space, w_doublequote, True)
     dialect.escapechar = _get_char(space, w_escapechar, '\0', 'escapechar')
-    dialect.lineterminator = _get_str(space, w_lineterminator, '\r\n')
+    dialect.lineterminator = _get_str(space, w_lineterminator, '\r\n', 'lineterminator')
     dialect.quotechar = _get_char(space, w_quotechar, '"', 'quotechar')
     tmp_quoting = _get_int(space, w_quoting, QUOTE_MINIMAL)
     dialect.skipinitialspace = _get_bool(space, w_skipinitialspace, False)
diff --git a/pypy/module/_csv/test/test_dialect.py b/pypy/module/_csv/test/test_dialect.py
--- a/pypy/module/_csv/test/test_dialect.py
+++ b/pypy/module/_csv/test/test_dialect.py
@@ -67,6 +67,9 @@
                 kwargs = {name: value}
                 raises(TypeError, _csv.register_dialect, 'foo1', **kwargs)
 
+        exc_info = raises(TypeError, _csv.register_dialect, 'foo1', lineterminator=4)
+        assert exc_info.value.args[0] == '"lineterminator" must be a string'
+
     def test_bool_arg(self):
         # boolean arguments take *any* object and use its truth-value
         import _csv


More information about the pypy-commit mailing list