Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r2699:f6d4b0a1e70b Date: 2016-05-25 18:02 +0200 http://bitbucket.org/cffi/cffi/changeset/f6d4b0a1e70b/
Log: Haaaack! Have 'lib.__class__' return &PyModule_Type. It makes help(lib) behave and display a nice module-like view of your compiled lib. Note that this is seriously unexpected, but I hope nobody should get hit by it by looking at 'lib.__class__' directly... Might be reverted if I hear about someone :-) diff --git a/c/lib_obj.c b/c/lib_obj.c --- a/c/lib_obj.c +++ b/c/lib_obj.c @@ -516,14 +516,18 @@ } if (strcmp(p, "__class__") == 0) { PyErr_Clear(); - x = (PyObject *)Py_TYPE(lib); + x = (PyObject *)&PyModule_Type; + /* ^^^ used to be Py_TYPE(lib). But HAAAAAACK! That makes + help() behave correctly. I couldn't find a more reasonable + way. Urgh. */ Py_INCREF(x); return x; } - /* this hack is for Python 3.5 */ + /* this hack is for Python 3.5, and also to give a more + module-like behavior */ if (strcmp(p, "__name__") == 0) { PyErr_Clear(); - return lib_repr(lib); + return PyText_FromFormat("%s.lib", PyText_AS_UTF8(lib->l_libname)); } return NULL; } diff --git a/testing/cffi1/test_recompiler.py b/testing/cffi1/test_recompiler.py --- a/testing/cffi1/test_recompiler.py +++ b/testing/cffi1/test_recompiler.py @@ -1167,8 +1167,8 @@ assert MYFOO == 42 assert hasattr(lib, '__dict__') assert lib.__all__ == ['MYFOO', 'mybar'] # but not 'myvar' - assert lib.__name__ == repr(lib) - assert lib.__class__ is type(lib) + assert lib.__name__ == '_CFFI_test_import_from_lib.lib' + assert lib.__class__ is type(sys) # !! hack for help() def test_macro_var_callback(): ffi = FFI() _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit