Get Action Plugins working with Python 3, fix some unicode string errors

This commit is contained in:
Thomas Pointhuber 2018-08-05 09:38:53 +02:00 committed by Maciej Suminski
parent 8805706ccb
commit 88d04f3bcb
5 changed files with 50 additions and 7 deletions

View File

@ -136,7 +136,7 @@ wxString* newWxStringFromPy( PyObject* src )
return NULL; return NULL;
} }
#if PY_MAJOR_VERSION >= 3 #if PY_MAJOR_VERSION >= 3
else if( !PyBytes_Check( src ) ) else if( !PyUnicode_Check( src ) )
#else #else
else if( !PyString_Check( src ) ) // if it's not a string, str(obj) else if( !PyString_Check( src ) ) // if it's not a string, str(obj)
#endif #endif

View File

@ -108,7 +108,15 @@ wxString PYTHON_ACTION_PLUGIN::CallRetStrMethod( const char* aMethod, PyObject*
if( result ) if( result )
{ {
#if PY_MAJOR_VERSION >= 3 #if PY_MAJOR_VERSION >= 3
const char* str_res = PyBytes_AS_STRING( result ); const char* str_res = NULL;
PyObject* temp_bytes = PyUnicode_AsEncodedString( result, "UTF-8", "strict" );
if ( temp_bytes != NULL ) {
str_res = PyBytes_AS_STRING( temp_bytes );
str_res = strdup( str_res );
Py_DECREF( temp_bytes );
} else {
wxLogMessage( "cannot encode unicode python string" );
}
#else #else
const char* str_res = PyString_AsString( result ); const char* str_res = PyString_AsString( result );
#endif #endif

View File

@ -102,7 +102,15 @@ wxString PYTHON_FOOTPRINT_WIZARD::CallRetStrMethod( const char* aMethod, PyObjec
if( result ) if( result )
{ {
#if PY_MAJOR_VERSION >= 3 #if PY_MAJOR_VERSION >= 3
const char* str_res = PyBytes_AS_STRING( result ); const char* str_res = NULL;
PyObject* temp_bytes = PyUnicode_AsEncodedString( result, "UTF-8", "strict" );
if ( temp_bytes != NULL ) {
str_res = PyBytes_AS_STRING( temp_bytes );
str_res = strdup( str_res );
Py_DECREF( temp_bytes );
} else {
wxLogMessage( "cannot encode unicode python string" );
}
#else #else
const char* str_res = PyString_AsString( result ); const char* str_res = PyString_AsString( result );
#endif #endif
@ -209,7 +217,15 @@ wxString PYTHON_FOOTPRINT_WIZARD::GetParameterPageName( int aPage )
if( result ) if( result )
{ {
#if PY_MAJOR_VERSION >= 3 #if PY_MAJOR_VERSION >= 3
const char* str_res = PyBytes_AS_STRING( result ); const char* str_res = NULL;
PyObject* temp_bytes = PyUnicode_AsEncodedString( result, "UTF-8", "strict" );
if ( temp_bytes != NULL ) {
str_res = PyBytes_AS_STRING( temp_bytes );
str_res = strdup( str_res );
Py_DECREF( temp_bytes );
} else {
wxLogMessage( "cannot encode unicode python string" );
}
#else #else
const char* str_res = PyString_AsString( result ); const char* str_res = PyString_AsString( result );
#endif #endif

View File

@ -249,7 +249,17 @@ static void pcbnewRunPythonMethodWithReturnedString( const char* aMethodName, wx
{ {
PyObject* str = PyDict_GetItemString(localDict, "result" ); PyObject* str = PyDict_GetItemString(localDict, "result" );
#if PY_MAJOR_VERSION >= 3 #if PY_MAJOR_VERSION >= 3
const char* str_res = str ? PyBytes_AS_STRING( str ) : 0; const char* str_res = NULL;
if(str) {
PyObject* temp_bytes = PyUnicode_AsEncodedString( str, "UTF-8", "strict" );
if ( temp_bytes != NULL ) {
str_res = PyBytes_AS_STRING( temp_bytes );
str_res = strdup( str_res );
Py_DECREF( temp_bytes );
} else {
wxLogMessage( "cannot encode unicode python string" );
}
}
#else #else
const char* str_res = str ? PyString_AsString( str ) : 0; const char* str_res = str ? PyString_AsString( str ) : 0;
#endif #endif
@ -404,7 +414,16 @@ wxArrayString PyArrayStringToWx( PyObject* aArrayString )
if( element ) if( element )
{ {
#if PY_MAJOR_VERSION >= 3 #if PY_MAJOR_VERSION >= 3
ret.Add( FROM_UTF8( PyBytes_AS_STRING( element ) ), 1 ); const char* str_res = NULL;
PyObject* temp_bytes = PyUnicode_AsEncodedString( element, "UTF-8", "strict" );
if ( temp_bytes != NULL ) {
str_res = PyBytes_AS_STRING( temp_bytes );
str_res = strdup( str_res );
Py_DECREF( temp_bytes );
ret.Add( FROM_UTF8( str_res ), 1 );
} else {
wxLogMessage( "cannot encode unicode python string" );
}
#else #else
ret.Add( FROM_UTF8( PyString_AsString( element ) ), 1 ); ret.Add( FROM_UTF8( PyString_AsString( element ) ), 1 );
#endif #endif

View File

@ -102,7 +102,7 @@ def LoadOnePlugin(Dirname, ModuleName):
try: # If there is an error loading the script, skip it try: # If there is an error loading the script, skip it
mtime = os.path.getmtime(module_filename) mtime = os.path.getmtime(module_filename)
if KICAD_PLUGINS.has_key(ModuleName): if ModuleName in KICAD_PLUGINS:
plugin = KICAD_PLUGINS[ModuleName] plugin = KICAD_PLUGINS[ModuleName]
if not plugin["modification_time"] == mtime: if not plugin["modification_time"] == mtime: