Kaydet (Commit) 51788964 authored tarafından Pedro Giffuni's avatar Pedro Giffuni

pyuno: obsolete PyString_* in favor of PyBytes_*

Python3 removed the PyString functions and replaced them with PyBytes.

To aid portability Python version 2.6 and upper support PyBytes and
we are adding some compatibility defines for older versions so no
problems are expected from this change.

Reference: http://docs.python.org/c-api/string.html
üst 093977b1
......@@ -37,11 +37,20 @@
#pragma warning(pop)
#endif
#endif // #ifdef Py_PYTHON_H
// Compatibility for older system Python (2.6 and previous)
#ifndef PyVarObject_HEAD_INIT
#define PyVarObject_HEAD_INIT(type, size) \
PyObject_HEAD_INIT(type) size,
#endif
// define PyBytes_* as the equivalent string type methods.
#ifndef PyBytes_Check
#define PyBytes_Check PyString_Check
#define PyBytes_AsString PyString_AsString
#define PyBytes_FromString PyString_FromString
#define PyBytes_Size PyString_Size
#define PyBytes_FromStringAndSize PyString_FromStringAndSize
#endif
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/script/CannotConvertException.hpp>
......
......@@ -441,7 +441,7 @@ PyObject *PyUNO_str( PyObject * self )
buf.append( OUStringToOString(s,RTL_TEXTENCODING_ASCII_US) );
}
return PyString_FromString( buf.getStr());
return PyBytes_FromString( buf.getStr());
}
PyObject* PyUNO_getattr (PyObject* self, char* name)
......@@ -647,7 +647,7 @@ static PyTypeObject PyUNOType =
(printfunc) 0,
(getattrfunc) PyUNO_getattr,
(setattrfunc) PyUNO_setattr,
(cmpfunc) PyUNO_cmp,
PyUNO_cmp,
(reprfunc) PyUNO_repr,
0,
0,
......
......@@ -246,7 +246,7 @@ Any Adapter::invoke( const OUString &aFunctionName,
buf.appendAscii( "pyuno::Adapater: Method " ).append( aFunctionName );
buf.appendAscii( " is not implemented at object " );
PyRef str( PyObject_Repr( mWrappedObject.get() ), SAL_NO_ACQUIRE );
buf.appendAscii( PyString_AsString( str.get() ));
buf.appendAscii( PyBytes_AsString( str.get() ));
throw IllegalArgumentException( buf.makeStringAndClear(), Reference< XInterface > (),0 );
}
......
......@@ -225,7 +225,7 @@ PyObject * extractOneStringArg( PyObject *args, char const *funcName )
return NULL;
}
PyObject *obj = PyTuple_GetItem( args, 0 );
if( !PyString_Check( obj ) && ! PyUnicode_Check(obj))
if( !PyBytes_Check( obj ) && ! PyUnicode_Check(obj))
{
OStringBuffer buf;
buf.append( funcName ).append( ": expecting one string argument" );
......@@ -248,11 +248,11 @@ static PyObject *createUnoStructHelper(PyObject *, PyObject* args )
PyObject *structName = PyTuple_GetItem( args,0 );
PyObject *initializer = PyTuple_GetItem( args ,1 );
if( PyString_Check( structName ) )
if( PyBytes_Check( structName ) )
{
if( PyTuple_Check( initializer ) )
{
OUString typeName( OUString::createFromAscii(PyString_AsString(structName)));
OUString typeName( OUString::createFromAscii(PyBytes_AsString(structName)));
RuntimeCargo *c = runtime.getImpl()->cargo;
Reference<XIdlClass> idl_class ( c->xCoreReflection->forName (typeName),UNO_QUERY);
if (idl_class.is ())
......@@ -287,7 +287,7 @@ static PyObject *createUnoStructHelper(PyObject *, PyObject* args )
{
OStringBuffer buf;
buf.append( "UNO struct " );
buf.append( PyString_AsString(structName) );
buf.append( PyBytes_AsString(structName) );
buf.append( " is unkown" );
PyErr_SetString (PyExc_RuntimeError, buf.getStr());
}
......@@ -463,7 +463,7 @@ static PyObject *getClass( PyObject *, PyObject *args )
{
Runtime runtime;
PyRef ret = getClass(
OUString( PyString_AsString( obj), strlen(PyString_AsString(obj)),RTL_TEXTENCODING_ASCII_US),
OUString( PyBytes_AsString( obj), strlen(PyBytes_AsString(obj)),RTL_TEXTENCODING_ASCII_US),
runtime );
Py_XINCREF( ret.get() );
return ret.get();
......@@ -603,9 +603,9 @@ static PyObject * invoke ( PyObject *, PyObject * args )
{
PyObject *object = PyTuple_GetItem( args, 0 );
if( PyString_Check( PyTuple_GetItem( args, 1 ) ) )
if( PyBytes_Check( PyTuple_GetItem( args, 1 ) ) )
{
const char *name = PyString_AsString( PyTuple_GetItem( args, 1 ) );
const char *name = PyBytes_AsString( PyTuple_GetItem( args, 1 ) );
if( PyTuple_Check( PyTuple_GetItem( args , 2 )))
{
ret = PyUNO_invoke( object, name , PyTuple_GetItem( args, 2 ) );
......@@ -614,7 +614,7 @@ static PyObject * invoke ( PyObject *, PyObject * args )
{
OStringBuffer buf;
buf.append( "uno.invoke expects a tuple as 3rd argument, got " );
buf.append( PyString_AsString( PyObject_Str( PyTuple_GetItem( args, 2) ) ) );
buf.append( PyBytes_AsString( PyObject_Str( PyTuple_GetItem( args, 2) ) ) );
PyErr_SetString( PyExc_RuntimeError, buf.makeStringAndClear() );
}
}
......@@ -622,7 +622,7 @@ static PyObject * invoke ( PyObject *, PyObject * args )
{
OStringBuffer buf;
buf.append( "uno.invoke expected a string as 2nd argument, got " );
buf.append( PyString_AsString( PyObject_Str( PyTuple_GetItem( args, 1) ) ) );
buf.append( PyBytes_AsString( PyObject_Str( PyTuple_GetItem( args, 1) ) ) );
PyErr_SetString( PyExc_RuntimeError, buf.makeStringAndClear() );
}
}
......@@ -672,7 +672,7 @@ static PyObject *setCurrentContext( PyObject *, PyObject * args )
{
OStringBuffer buf;
buf.append( "uno.setCurrentContext expects an XComponentContext implementation, got " );
buf.append( PyString_AsString( PyObject_Str( PyTuple_GetItem( args, 0) ) ) );
buf.append( PyBytes_AsString( PyObject_Str( PyTuple_GetItem( args, 0) ) ) );
PyErr_SetString( PyExc_RuntimeError, buf.makeStringAndClear() );
}
}
......@@ -717,6 +717,7 @@ struct PyMethodDef PyUNOModule_methods [] =
extern "C" PY_DLLEXPORT void initpyuno()
{
// noop when called already, otherwise needed to allow multiple threads
// This has to be reworked for Python 3.
PyEval_InitThreads();
Py_InitModule (const_cast< char * >("pyuno"), PyUNOModule_methods);
}
......@@ -154,8 +154,8 @@ static PyRef importUnoModule( ) throw ( RuntimeException )
OUStringBuffer buf;
buf.appendAscii( "python object raised an unknown exception (" );
PyRef valueRep( PyObject_Repr( excValue.get() ), SAL_NO_ACQUIRE );
buf.appendAscii( PyString_AsString( valueRep.get())).appendAscii( ", traceback follows\n" );
buf.appendAscii( PyString_AsString( str.get() ) );
buf.appendAscii( PyBytes_AsString( valueRep.get())).appendAscii( ", traceback follows\n" );
buf.appendAscii( PyBytes_AsString( str.get() ) );
throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface > () );
}
PyRef dict( PyModule_GetDict( module.get() ) );
......@@ -722,7 +722,7 @@ Any Runtime::pyObject2Any ( const PyRef & source, enum ConversionMode mode ) con
double d = PyFloat_AsDouble (o);
a <<= d;
}
else if (PyString_Check (o))
else if (PyBytes_Check (o))
a <<= pyString2ustring(o);
else if( PyUnicode_Check( o ) )
a <<= pyString2ustring(o);
......@@ -743,10 +743,10 @@ Any Runtime::pyObject2Any ( const PyRef & source, enum ConversionMode mode ) con
{
PyRef str(PyObject_GetAttrString( o , const_cast< char * >("value") ),SAL_NO_ACQUIRE);
Sequence< sal_Int8 > seq;
if( PyString_Check( str.get() ) )
if( PyBytes_Check( str.get() ) )
{
seq = Sequence<sal_Int8 > (
(sal_Int8*) PyString_AsString(str.get()), PyString_Size(str.get()));
(sal_Int8*) PyBytes_AsString(str.get()), PyBytes_Size(str.get()));
}
a <<= seq;
}
......@@ -879,7 +879,7 @@ Any Runtime::pyObject2Any ( const PyRef & source, enum ConversionMode mode ) con
OUStringBuffer buf;
buf.appendAscii( "Couldn't convert " );
PyRef reprString( PyObject_Str( o ) , SAL_NO_ACQUIRE );
buf.appendAscii( PyString_AsString( reprString.get() ) );
buf.appendAscii( PyBytes_AsString( reprString.get() ) );
buf.appendAscii( " to a UNO type" );
throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface > () );
}
......@@ -909,14 +909,14 @@ Any Runtime::extractUnoException( const PyRef & excType, const PyRef &excValue,
else
{
str = PyRef(
PyString_FromString( "Couldn't find uno._uno_extract_printable_stacktrace" ),
PyBytes_FromString( "Couldn't find uno._uno_extract_printable_stacktrace" ),
SAL_NO_ACQUIRE );
}
}
else
{
str = PyRef(
PyString_FromString( "Couldn't find uno.py, no stacktrace available" ),
PyBytes_FromString( "Couldn't find uno.py, no stacktrace available" ),
SAL_NO_ACQUIRE );
}
......@@ -924,7 +924,7 @@ Any Runtime::extractUnoException( const PyRef & excType, const PyRef &excValue,
else
{
// it may occur, that no traceback is given (e.g. only native code below)
str = PyRef( PyString_FromString( "no traceback available" ), SAL_NO_ACQUIRE);
str = PyRef( PyBytes_FromString( "no traceback available" ), SAL_NO_ACQUIRE);
}
if( isInstanceOfStructOrException( excValue.get() ) )
......@@ -937,7 +937,7 @@ Any Runtime::extractUnoException( const PyRef & excType, const PyRef &excValue,
PyRef typeName( PyObject_Str( excType.get() ), SAL_NO_ACQUIRE );
if( typeName.is() )
{
buf.appendAscii( PyString_AsString( typeName.get() ) );
buf.appendAscii( PyBytes_AsString( typeName.get() ) );
}
else
{
......@@ -947,7 +947,7 @@ Any Runtime::extractUnoException( const PyRef & excType, const PyRef &excValue,
PyRef valueRep( PyObject_Str( excValue.get() ), SAL_NO_ACQUIRE );
if( valueRep.is() )
{
buf.appendAscii( PyString_AsString( valueRep.get()));
buf.appendAscii( PyBytes_AsString( valueRep.get()));
}
else
{
......@@ -956,7 +956,7 @@ Any Runtime::extractUnoException( const PyRef & excType, const PyRef &excValue,
buf.appendAscii( ", traceback follows\n" );
if( str.is() )
{
buf.appendAscii( PyString_AsString( str.get() ) );
buf.appendAscii( PyBytes_AsString( str.get() ) );
}
else
{
......
......@@ -166,15 +166,15 @@ Any PyEnum2Enum( PyObject *obj ) throw ( RuntimeException )
Any ret;
PyRef typeName( PyObject_GetAttrString( obj,const_cast< char * >("typeName") ), SAL_NO_ACQUIRE);
PyRef value( PyObject_GetAttrString( obj, const_cast< char * >("value") ), SAL_NO_ACQUIRE);
if( !PyString_Check( typeName.get() ) || ! PyString_Check( value.get() ) )
if( !PyBytes_Check( typeName.get() ) || ! PyBytes_Check( value.get() ) )
{
throw RuntimeException(
USTR_ASCII( "attributes typeName and/or value of uno.Enum are not strings" ),
Reference< XInterface > () );
}
OUString strTypeName( OUString::createFromAscii( PyString_AsString( typeName.get() ) ) );
char *stringValue = PyString_AsString( value.get() );
OUString strTypeName( OUString::createFromAscii( PyBytes_AsString( typeName.get() ) ) );
char *stringValue = PyBytes_AsString( value.get() );
TypeDescription desc( strTypeName );
if( desc.is() )
......@@ -204,7 +204,7 @@ Any PyEnum2Enum( PyObject *obj ) throw ( RuntimeException )
{
OUStringBuffer buf;
buf.appendAscii( "value " ).appendAscii( stringValue ).appendAscii( "is unknown in enum " );
buf.appendAscii( PyString_AsString( typeName.get() ) );
buf.appendAscii( PyBytes_AsString( typeName.get() ) );
throw RuntimeException( buf.makeStringAndClear(), Reference<XInterface> () );
}
ret = Any( &pEnumDesc->pEnumValues[i], desc.get()->pWeakRef );
......@@ -212,7 +212,7 @@ Any PyEnum2Enum( PyObject *obj ) throw ( RuntimeException )
else
{
OUStringBuffer buf;
buf.appendAscii( "enum " ).appendAscii( PyString_AsString(typeName.get()) ).appendAscii( " is unknown" );
buf.appendAscii( "enum " ).appendAscii( PyBytes_AsString(typeName.get()) ).appendAscii( " is unknown" );
throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface> () );
}
return ret;
......@@ -222,7 +222,7 @@ Any PyEnum2Enum( PyObject *obj ) throw ( RuntimeException )
Type PyType2Type( PyObject * o ) throw(RuntimeException )
{
PyRef pyName( PyObject_GetAttrString( o, const_cast< char * >("typeName") ), SAL_NO_ACQUIRE);
if( !PyString_Check( pyName.get() ) )
if( !PyBytes_Check( pyName.get() ) )
{
throw RuntimeException(
USTR_ASCII( "type object does not have typeName property" ),
......@@ -232,7 +232,7 @@ Type PyType2Type( PyObject * o ) throw(RuntimeException )
PyRef pyTC( PyObject_GetAttrString( o, const_cast< char * >("typeClass") ), SAL_NO_ACQUIRE );
Any enumValue = PyEnum2Enum( pyTC.get() );
OUString name( OUString::createFromAscii( PyString_AsString( pyName.get() ) ) );
OUString name( OUString::createFromAscii( PyBytes_AsString( pyName.get() ) ) );
TypeDescription desc( name );
if( ! desc.is() )
{
......@@ -278,8 +278,8 @@ PyObject *importToGlobal(PyObject *str, PyObject *dict, PyObject *target)
}
PyModule_AddObject(
typesModule.get(),
PyString_AsString( target ),
PyUNO_Type_new( PyString_AsString(str),tc,runtime ) );
PyBytes_AsString( target ),
PyUNO_Type_new( PyBytes_AsString(str),tc,runtime ) );
if( com::sun::star::uno::TypeClass_EXCEPTION == tc ||
com::sun::star::uno::TypeClass_STRUCT == tc )
......@@ -298,7 +298,7 @@ PyObject *importToGlobal(PyObject *str, PyObject *dict, PyObject *target)
OUStringToOString( pDesc->ppEnumNames[i], RTL_TEXTENCODING_ASCII_US) );
PyDict_SetItemString(
dict, (char*)enumElementName.getStr(),
PyUNO_Enum_new(PyString_AsString(str) , enumElementName.getStr(), runtime ) );
PyUNO_Enum_new(PyBytes_AsString(str) , enumElementName.getStr(), runtime ) );
}
}
Py_INCREF( Py_None );
......@@ -319,7 +319,7 @@ PyObject *importToGlobal(PyObject *str, PyObject *dict, PyObject *target)
else
{
OStringBuffer buf;
buf.append( "constant " ).append(PyString_AsString(str)).append( " unknown" );
buf.append( "constant " ).append(PyBytes_AsString(str)).append( " unknown" );
PyErr_SetString( PyExc_RuntimeError, buf.getStr() );
}
}
......@@ -379,8 +379,8 @@ static PyObject* callCtor( const Runtime &r , const char * clazz, const PyRef &
PyObject *PyUNO_Enum_new( const char *enumBase, const char *enumValue, const Runtime &r )
{
PyRef args( PyTuple_New( 2 ), SAL_NO_ACQUIRE );
PyTuple_SetItem( args.get() , 0 , PyString_FromString( enumBase ) );
PyTuple_SetItem( args.get() , 1 , PyString_FromString( enumValue ) );
PyTuple_SetItem( args.get() , 0 , PyBytes_FromString( enumBase ) );
PyTuple_SetItem( args.get() , 1 , PyBytes_FromString( enumValue ) );
return callCtor( r, "Enum" , args );
}
......@@ -391,7 +391,7 @@ PyObject* PyUNO_Type_new (const char *typeName , TypeClass t , const Runtime &r
// retrieve type object
PyRef args( PyTuple_New( 2 ), SAL_NO_ACQUIRE );
PyTuple_SetItem( args.get() , 0 , PyString_FromString( typeName ) );
PyTuple_SetItem( args.get() , 0 , PyBytes_FromString( typeName ) );
PyObject *typeClass = PyUNO_Enum_new( "com.sun.star.uno.TypeClass" , typeClassToString(t), r );
if( ! typeClass )
return NULL;
......@@ -417,7 +417,7 @@ PyObject *PyUNO_ByteSequence_new(
const com::sun::star::uno::Sequence< sal_Int8 > &byteSequence, const Runtime &r )
{
PyRef str(
PyString_FromStringAndSize( (char*)byteSequence.getConstArray(), byteSequence.getLength()),
PyBytes_FromStringAndSize( (char*)byteSequence.getConstArray(), byteSequence.getLength()),
SAL_NO_ACQUIRE );
PyRef args( PyTuple_New( 1 ), SAL_NO_ACQUIRE );
PyTuple_SetItem( args.get() , 0 , str.getAcquired() );
......
......@@ -74,7 +74,7 @@ PyRef ustring2PyUnicode( const OUString & str )
PyRef ustring2PyString( const OUString &str )
{
OString o = OUStringToOString( str, osl_getThreadTextEncoding() );
return PyRef( PyString_FromString( o.getStr() ), SAL_NO_ACQUIRE );
return PyRef( PyBytes_FromString( o.getStr() ), SAL_NO_ACQUIRE );
}
OUString pyString2ustring( PyObject *pystr )
......@@ -86,13 +86,13 @@ OUString pyString2ustring( PyObject *pystr )
ret = OUString( (sal_Unicode * ) PyUnicode_AS_UNICODE( pystr ) );
#else
PyObject* pUtf8 = PyUnicode_AsUTF8String(pystr);
ret = OUString(PyString_AsString(pUtf8), PyString_Size(pUtf8), RTL_TEXTENCODING_UTF8);
ret = OUString(PyBytes_AsString(pUtf8), PyBytes_Size(pUtf8), RTL_TEXTENCODING_UTF8);
Py_DECREF(pUtf8);
#endif
}
else
{
char *name = PyString_AsString(pystr );
char *name = PyBytes_AsString(pystr );
ret = OUString( name, strlen(name), osl_getThreadTextEncoding() );
}
return ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment