[pypy-commit] cffi cffi-1.0: Python 3 compat

arigo noreply at buildbot.pypy.org
Sat May 16 14:41:31 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: cffi-1.0
Changeset: r2015:2f3f03bd8519
Date: 2015-05-16 14:41 +0200
http://bitbucket.org/cffi/cffi/changeset/2f3f03bd8519/

Log:	Python 3 compat

diff --git a/cffi/recompiler.py b/cffi/recompiler.py
--- a/cffi/recompiler.py
+++ b/cffi/recompiler.py
@@ -407,15 +407,13 @@
 
     def _to_py(self, x):
         if isinstance(x, str):
-            x = x.encode('ascii')
-        if isinstance(x, bytes):
             return "b'%s'" % (x,)
         if isinstance(x, (list, tuple)):
             rep = [self._to_py(item) for item in x]
             if len(rep) == 1:
                 rep.append('')
             return "(%s)" % (','.join(rep),)
-        return x.as_python_expr()
+        return x.as_python_expr()  # Py2: unicode unexpected; Py3: bytes unexp.
 
     def write_py_source_to_f(self, f):
         self._f = f
@@ -443,7 +441,7 @@
                     "ffi inside a Python-based ffi")
             prnt('from %s import ffi as _ffi%d' % (included_module_name, i))
         prnt()
-        prnt("ffi = _cffi_backend.FFI(%s," % (self._to_py(self.module_name),))
+        prnt("ffi = _cffi_backend.FFI('%s'," % (self.module_name,))
         #
         # the '_types' keyword argument
         self.cffi_types = tuple(self.cffi_types)    # don't change any more
diff --git a/testing/cffi1/test_dlopen.py b/testing/cffi1/test_dlopen.py
--- a/testing/cffi1/test_dlopen.py
+++ b/testing/cffi1/test_dlopen.py
@@ -8,11 +8,11 @@
     ffi = FFI()
     ffi.cdef("int close(int); static const int BB = 42; int somevar;")
     target = udir.join('test_simple.py')
-    assert make_py_source(ffi, 'test_simple', str(target))
+    make_py_source(ffi, 'test_simple', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 
-ffi = _cffi_backend.FFI(b'test_simple',
+ffi = _cffi_backend.FFI('test_simple',
     _types = b'\x00\x00\x01\x0D\x00\x00\x07\x01\x00\x00\x00\x0F',
     _globals = (b'\xFF\xFF\xFF\x1FBB',42,b'\x00\x00\x00\x23close',0,b'\x00\x00\x01\x21somevar',0),
 )
@@ -61,11 +61,11 @@
     ffi = FFI()
     ffi.cdef("typedef int foobar_t;")
     target = udir.join('test_typename.py')
-    assert make_py_source(ffi, 'test_typename', str(target))
+    make_py_source(ffi, 'test_typename', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 
-ffi = _cffi_backend.FFI(b'test_typename',
+ffi = _cffi_backend.FFI('test_typename',
     _types = b'\x00\x00\x07\x01',
     _typenames = (b'\x00\x00\x00\x00foobar_t',),
 )
@@ -75,11 +75,11 @@
     ffi = FFI()
     ffi.cdef("enum myenum_e { AA, BB, CC=-42 };")
     target = udir.join('test_enum.py')
-    assert make_py_source(ffi, 'test_enum', str(target))
+    make_py_source(ffi, 'test_enum', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 
-ffi = _cffi_backend.FFI(b'test_enum',
+ffi = _cffi_backend.FFI('test_enum',
     _types = b'\x00\x00\x00\x0B',
     _globals = (b'\xFF\xFF\xFF\x0BAA',0,b'\xFF\xFF\xFF\x0BBB',1,b'\xFF\xFF\xFF\x0BCC',-42),
     _enums = (b'\x00\x00\x00\x00\x00\x00\x00\x15myenum_e\x00AA,BB,CC',),
@@ -90,11 +90,11 @@
     ffi = FFI()
     ffi.cdef("struct foo_s { int a; signed char b[]; }; struct bar_s;")
     target = udir.join('test_struct.py')
-    assert make_py_source(ffi, 'test_struct', str(target))
+    make_py_source(ffi, 'test_struct', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 
-ffi = _cffi_backend.FFI(b'test_struct',
+ffi = _cffi_backend.FFI('test_struct',
     _types = b'\x00\x00\x07\x01\x00\x00\x03\x01\x00\x00\x01\x07\x00\x00\x00\x09\x00\x00\x01\x09',
     _struct_unions = ((b'\x00\x00\x00\x03\x00\x00\x00\x10bar_s',),(b'\x00\x00\x00\x04\x00\x00\x00\x02foo_s',b'\x00\x00\x00\x11a',b'\x00\x00\x02\x11b')),
 )
@@ -105,11 +105,11 @@
     ffi.cdef("#define ABC 123")
     ffi.set_source('test_include', None)
     target = udir.join('test_include.py')
-    assert make_py_source(ffi, 'test_include', str(target))
+    make_py_source(ffi, 'test_include', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 
-ffi = _cffi_backend.FFI(b'test_include',
+ffi = _cffi_backend.FFI('test_include',
     _types = b'',
     _globals = (b'\xFF\xFF\xFF\x1FABC',123,),
 )
@@ -118,12 +118,12 @@
     ffi2 = FFI()
     ffi2.include(ffi)
     target2 = udir.join('test2_include.py')
-    assert make_py_source(ffi2, 'test2_include', str(target2))
+    make_py_source(ffi2, 'test2_include', str(target2))
     assert target2.read() == r"""# auto-generated file
 import _cffi_backend
 from test_include import ffi as _ffi0
 
-ffi = _cffi_backend.FFI(b'test2_include',
+ffi = _cffi_backend.FFI('test2_include',
     _types = b'',
     _includes = (_ffi0,),
 )
@@ -133,11 +133,11 @@
     ffi = FFI()
     ffi.cdef("static const int BB = -42;")
     target = udir.join('test_negative_constant.py')
-    assert make_py_source(ffi, 'test_negative_constant', str(target))
+    make_py_source(ffi, 'test_negative_constant', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 
-ffi = _cffi_backend.FFI(b'test_negative_constant',
+ffi = _cffi_backend.FFI('test_negative_constant',
     _types = b'',
     _globals = (b'\xFF\xFF\xFF\x1FBB',-42,),
 )
@@ -151,12 +151,12 @@
     ffi = FFI()
     ffi.include(baseffi)
     target = udir.join('test_struct_included.py')
-    assert make_py_source(ffi, 'test_struct_included', str(target))
+    make_py_source(ffi, 'test_struct_included', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 from test_struct_included_base import ffi as _ffi0
 
-ffi = _cffi_backend.FFI(b'test_struct_included',
+ffi = _cffi_backend.FFI('test_struct_included',
     _types = b'\x00\x00\x00\x09',
     _struct_unions = ((b'\x00\x00\x00\x00\x00\x00\x00\x08foo_s',),),
     _includes = (_ffi0,),
@@ -177,11 +177,11 @@
     ffi = FFI()
     ffi.cdef("typedef int32_t my_array_t[42];")
     target = udir.join('test_array.py')
-    assert make_py_source(ffi, 'test_array', str(target))
+    make_py_source(ffi, 'test_array', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 
-ffi = _cffi_backend.FFI(b'test_array',
+ffi = _cffi_backend.FFI('test_array',
     _types = b'\x00\x00\x15\x01\x00\x00\x00\x05\x00\x00\x00\x2A',
     _typenames = (b'\x00\x00\x00\x01my_array_t',),
 )
@@ -198,11 +198,11 @@
     ffi = FFI()
     ffi.cdef("int myglob;")
     target = udir.join('test_global_var.py')
-    assert make_py_source(ffi, 'test_global_var', str(target))
+    make_py_source(ffi, 'test_global_var', str(target))
     assert target.read() == r"""# auto-generated file
 import _cffi_backend
 
-ffi = _cffi_backend.FFI(b'test_global_var',
+ffi = _cffi_backend.FFI('test_global_var',
     _types = b'\x00\x00\x07\x01',
     _globals = (b'\x00\x00\x00\x21myglob',0,),
 )
diff --git a/testing/cffi1/test_dlopen_unicode_literals.py b/testing/cffi1/test_dlopen_unicode_literals.py
new file mode 100644
--- /dev/null
+++ b/testing/cffi1/test_dlopen_unicode_literals.py
@@ -0,0 +1,9 @@
+import py, os
+
+s = """from __future__ import unicode_literals
+"""
+
+with open(os.path.join(os.path.dirname(__file__), 'test_dlopen.py')) as f:
+    s += f.read()
+
+exec(py.code.compile(s))
diff --git a/testing/cffi1/test_re_python.py b/testing/cffi1/test_re_python.py
--- a/testing/cffi1/test_re_python.py
+++ b/testing/cffi1/test_re_python.py
@@ -85,8 +85,8 @@
 
 def test_nonopaque_struct():
     from re_python_pysrc import ffi
-    for p in [ffi.new("struct bar_s *", [5, "foobar"]),
-              ffi.new("bar_t *", [5, "foobar"])]:
+    for p in [ffi.new("struct bar_s *", [5, b"foobar"]),
+              ffi.new("bar_t *", [5, b"foobar"])]:
         assert p.x == 5
         assert p.a[0] == ord('f')
         assert p.a[5] == ord('r')
@@ -115,7 +115,7 @@
     assert lib.FOOBAZ == -43
     assert lib.k2 == 121212
     #
-    p = ffi.new("bar_t *", [5, "foobar"])
+    p = ffi.new("bar_t *", [5, b"foobar"])
     assert p.a[4] == ord('a')
 
 def test_global_var():


More information about the pypy-commit mailing list