Author: &#321;ukasz Langa <luk...@langa.pl>
Branch: py3.6
Changeset: r95844:ac6ace011b43
Date: 2019-02-05 16:50 +0100
http://bitbucket.org/pypy/pypy/changeset/ac6ace011b43/

Log:    (cfbolz,ambv) Make _csv.Dialect unpicklable like on CPython

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
@@ -21,6 +21,10 @@
         "strict",
     ]
 
+    def reduce_ex_w(self, space, w_protocol):
+        raise OperationError(space.w_TypeError,
+                             space.newtext("can't pickle _csv.Dialect 
objects"))
+
 def _fetch(space, w_dialect, name):
     return space.findattr(w_dialect, space.newtext(name))
 
@@ -167,6 +171,7 @@
 W_Dialect.typedef = TypeDef(
         '_csv.Dialect',
         __new__ = interp2app(W_Dialect___new__),
+        __reduce_ex__ = interp2app(W_Dialect.reduce_ex_w),
 
         delimiter        = interp_attrproperty('delimiter', W_Dialect,
             wrapfn='newunicode'),
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
@@ -126,3 +126,9 @@
         _csv.unregister_dialect('neverseen')
         lst = _csv.list_dialects()
         assert 'neverseen' not in lst
+
+    def test_pickle_dialect(self):
+        import _csv
+        import copy
+        _csv.register_dialect('foo')
+        raises(TypeError, copy.copy, _csv.get_dialect('foo'))
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to