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;
}
#if PY_MAJOR_VERSION >= 3
else if( !PyBytes_Check( src ) )
else if( !PyUnicode_Check( src ) )
#else
else if( !PyString_Check( src ) ) // if it's not a string, str(obj)
#endif

View File

@ -108,7 +108,15 @@ wxString PYTHON_ACTION_PLUGIN::CallRetStrMethod( const char* aMethod, PyObject*
if( result )
{
#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
const char* str_res = PyString_AsString( result );
#endif

View File

@ -102,7 +102,15 @@ wxString PYTHON_FOOTPRINT_WIZARD::CallRetStrMethod( const char* aMethod, PyObjec
if( result )
{
#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
const char* str_res = PyString_AsString( result );
#endif
@ -209,7 +217,15 @@ wxString PYTHON_FOOTPRINT_WIZARD::GetParameterPageName( int aPage )
if( result )
{
#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
const char* str_res = PyString_AsString( result );
#endif

View File

@ -249,7 +249,17 @@ static void pcbnewRunPythonMethodWithReturnedString( const char* aMethodName, wx
{
PyObject* str = PyDict_GetItemString(localDict, "result" );
#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
const char* str_res = str ? PyString_AsString( str ) : 0;
#endif
@ -404,7 +414,16 @@ wxArrayString PyArrayStringToWx( PyObject* aArrayString )
if( element )
{
#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
ret.Add( FROM_UTF8( PyString_AsString( element ) ), 1 );
#endif

View File

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