Author: Armin Rigo <ar...@tunes.org>
Branch: 
Changeset: r93865:0b2256471902
Date: 2018-02-22 08:02 +0100
http://bitbucket.org/pypy/pypy/changeset/0b2256471902/

Log:    Issue #2755

        Accept unicode filenames in dbm.open()

diff --git a/lib_pypy/dbm.py b/lib_pypy/dbm.py
--- a/lib_pypy/dbm.py
+++ b/lib_pypy/dbm.py
@@ -157,7 +157,14 @@
 def open(filename, flag='r', mode=0666):
     "open a DBM database"
     if not isinstance(filename, str):
-        raise TypeError("expected string")
+        if sys.version_info < (3,) and isinstance(filename, unicode):
+            # unlike CPython we'll encode 'filename' with filesystemencoding
+            # instead of defaultencoding, because that seems like a far
+            # better idea.  But I'm also open for saying that we should
+            # rather go for bug-to-bug compatibility instead.
+            filename = filename.encode(sys.getfilesystemencoding())
+        else:
+            raise TypeError("expected string")
 
     openflag = 0
 
diff --git a/pypy/module/test_lib_pypy/test_dbm_extra.py 
b/pypy/module/test_lib_pypy/test_dbm_extra.py
--- a/pypy/module/test_lib_pypy/test_dbm_extra.py
+++ b/pypy/module/test_lib_pypy/test_dbm_extra.py
@@ -1,5 +1,5 @@
 from __future__ import absolute_import
-import py
+import py, os
 from rpython.tool.udir import udir
 try:
     from lib_pypy import dbm
@@ -74,3 +74,8 @@
     assert 'key_with_empty_value' in d
     assert d['key_with_empty_value'] == ''
     d.close()
+
+def test_unicode_filename():
+    path = str(udir) + os.sep + u'test_dbm_extra.test_unicode_filename'
+    d = dbm.open(path, 'c')
+    d.close()
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to