summaryrefslogtreecommitdiff
path: root/py/modules/IcePy/Util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'py/modules/IcePy/Util.cpp')
-rw-r--r--py/modules/IcePy/Util.cpp85
1 files changed, 49 insertions, 36 deletions
diff --git a/py/modules/IcePy/Util.cpp b/py/modules/IcePy/Util.cpp
index ed611029b5c..24d0ab25354 100644
--- a/py/modules/IcePy/Util.cpp
+++ b/py/modules/IcePy/Util.cpp
@@ -24,12 +24,23 @@ using namespace Slice::Python;
string
IcePy::getString(PyObject* p)
{
- assert(p == Py_None || PyString_Check(p));
+ assert(p == Py_None || checkString(p));
string str;
if(p != Py_None)
{
+#if PY_VERSION_HEX >= 0x03000000
+ PyObjectHandle bytes = PyUnicode_AsUTF8String(p);
+ if(bytes.get())
+ {
+ char* s;
+ Py_ssize_t sz;
+ PyBytes_AsStringAndSize(bytes.get(), &s, &sz);
+ str.assign(s, sz);
+ }
+#else
str.assign(PyString_AS_STRING(p), PyString_GET_SIZE(p));
+#endif
}
return str;
}
@@ -37,7 +48,7 @@ IcePy::getString(PyObject* p)
bool
IcePy::getStringArg(PyObject* p, const string& arg, string& val)
{
- if(PyString_Check(p))
+ if(checkString(p))
{
val = getString(p);
}
@@ -185,9 +196,13 @@ IcePy::PyException::raise()
ostr << getTypeName();
IcePy::PyObjectHandle msg = PyObject_Str(ex.get());
- if(msg.get() && strlen(PyString_AsString(msg.get())) > 0)
+ if(msg.get())
{
- ostr << ": " << PyString_AsString(msg.get());
+ string s = getString(msg.get());
+ if(!s.empty())
+ {
+ ostr << ": " << s;
+ }
}
e.unknown = ostr.str();
@@ -238,13 +253,12 @@ IcePy::PyException::raiseLocalException()
IcePy::getIdentity(member.get(), e.id);
}
member = PyObject_GetAttrString(ex.get(), STRCAST("facet"));
- if(member.get() && PyString_Check(member.get()))
+ if(member.get() && checkString(member.get()))
{
- // TODO: Support unicode for the facet name.
e.facet = getString(member.get());
}
member = PyObject_GetAttrString(ex.get(), STRCAST("operation"));
- if(member.get() && PyString_Check(member.get()))
+ if(member.get() && checkString(member.get()))
{
e.operation = getString(member.get());
}
@@ -270,7 +284,7 @@ IcePy::PyException::raiseLocalException()
{
IcePy::PyObjectHandle member;
member = PyObject_GetAttrString(ex.get(), STRCAST("unknown"));
- if(member.get() && PyString_Check(member.get()))
+ if(member.get() && checkString(member.get()))
{
e.unknown = getString(member.get());
}
@@ -304,7 +318,7 @@ IcePy::PyException::getTraceback()
// import traceback
// list = traceback.format_exception(type, ex, tb)
//
- PyObjectHandle str = PyString_FromString("traceback");
+ PyObjectHandle str = createString("traceback");
PyObjectHandle mod = PyImport_Import(str.get());
assert(mod.get()); // Unable to import traceback module - Python installation error?
PyObject* d = PyModule_GetDict(mod.get());
@@ -316,7 +330,8 @@ IcePy::PyException::getTraceback()
string result;
for(Py_ssize_t i = 0; i < PyList_GET_SIZE(list.get()); ++i)
{
- result += PyString_AsString(PyList_GetItem(list.get(), i));
+ string s = getString(PyList_GetItem(list.get(), i));
+ result += s;
}
return result;
@@ -334,9 +349,9 @@ IcePy::PyException::getTypeName()
assert(name.get());
PyObjectHandle mod = PyObject_GetAttrString(cls, "__module__");
assert(mod.get());
- string result = PyString_AsString(mod.get());
+ string result = getString(mod.get());
result += ".";
- result += PyString_AsString(name.get());
+ result += getString(name.get());
return result;
}
@@ -374,7 +389,7 @@ IcePy::listToStringSeq(PyObject* l, Ice::StringSeq& seq)
return false;
}
string str;
- if(PyString_Check(item))
+ if(checkString(item))
{
str = getString(item);
}
@@ -428,7 +443,7 @@ IcePy::tupleToStringSeq(PyObject* t, Ice::StringSeq& seq)
return false;
}
string str;
- if(PyString_Check(item))
+ if(checkString(item))
{
str = getString(item);
}
@@ -454,7 +469,7 @@ IcePy::dictionaryToContext(PyObject* dict, Ice::Context& context)
while(PyDict_Next(dict, &pos, &key, &value))
{
string keystr;
- if(PyString_Check(key))
+ if(checkString(key))
{
keystr = getString(key);
}
@@ -465,7 +480,7 @@ IcePy::dictionaryToContext(PyObject* dict, Ice::Context& context)
}
string valuestr;
- if(PyString_Check(value))
+ if(checkString(value))
{
valuestr = getString(value);
}
@@ -650,20 +665,20 @@ convertLocalException(const Ice::LocalException& ex, PyObject* p)
}
catch(const Ice::FileException& e)
{
- IcePy::PyObjectHandle m = PyInt_FromLong(e.error);
+ IcePy::PyObjectHandle m = PyLong_FromLong(e.error);
PyObject_SetAttrString(p, STRCAST("error"), m.get());
m = IcePy::createString(e.path);
PyObject_SetAttrString(p, STRCAST("path"), m.get());
}
catch(const Ice::SyscallException& e) // This must appear after all subclasses of SyscallException.
{
- IcePy::PyObjectHandle m = PyInt_FromLong(e.error);
+ IcePy::PyObjectHandle m = PyLong_FromLong(e.error);
PyObject_SetAttrString(p, STRCAST("error"), m.get());
}
catch(const Ice::DNSException& e)
{
IcePy::PyObjectHandle m;
- m = PyInt_FromLong(e.error);
+ m = PyLong_FromLong(e.error);
PyObject_SetAttrString(p, STRCAST("error"), m.get());
m = IcePy::createString(e.host);
PyObject_SetAttrString(p, STRCAST("host"), m.get());
@@ -671,25 +686,25 @@ convertLocalException(const Ice::LocalException& ex, PyObject* p)
catch(const Ice::UnsupportedProtocolException& e)
{
IcePy::PyObjectHandle m;
- m = PyInt_FromLong(e.badMajor);
+ m = PyLong_FromLong(e.badMajor);
PyObject_SetAttrString(p, STRCAST("badMajor"), m.get());
- m = PyInt_FromLong(e.badMinor);
+ m = PyLong_FromLong(e.badMinor);
PyObject_SetAttrString(p, STRCAST("badMinor"), m.get());
- m = PyInt_FromLong(e.major);
+ m = PyLong_FromLong(e.major);
PyObject_SetAttrString(p, STRCAST("major"), m.get());
- m = PyInt_FromLong(e.minor);
+ m = PyLong_FromLong(e.minor);
PyObject_SetAttrString(p, STRCAST("minor"), m.get());
}
catch(const Ice::UnsupportedEncodingException& e)
{
IcePy::PyObjectHandle m;
- m = PyInt_FromLong(e.badMajor);
+ m = PyLong_FromLong(e.badMajor);
PyObject_SetAttrString(p, STRCAST("badMajor"), m.get());
- m = PyInt_FromLong(e.badMinor);
+ m = PyLong_FromLong(e.badMinor);
PyObject_SetAttrString(p, STRCAST("badMinor"), m.get());
- m = PyInt_FromLong(e.major);
+ m = PyLong_FromLong(e.major);
PyObject_SetAttrString(p, STRCAST("major"), m.get());
- m = PyInt_FromLong(e.minor);
+ m = PyLong_FromLong(e.minor);
PyObject_SetAttrString(p, STRCAST("minor"), m.get());
}
catch(const Ice::NoObjectFactoryException& e)
@@ -852,9 +867,9 @@ IcePy::handleSystemExit(PyObject* ex)
}
int status;
- if(PyInt_Check(code.get()))
+ if(PyLong_Check(code.get()))
{
- status = static_cast<int>(PyInt_AsLong(code.get()));
+ status = static_cast<int>(PyLong_AsLong(code.get()));
}
else
{
@@ -919,23 +934,21 @@ IcePy::getIdentity(PyObject* p, Ice::Identity& ident)
PyObjectHandle category = PyObject_GetAttrString(p, STRCAST("category"));
if(name.get())
{
- char* s = PyString_AsString(name.get());
- if(!s)
+ if(!checkString(name.get()))
{
PyErr_Format(PyExc_ValueError, STRCAST("identity name must be a string"));
return false;
}
- ident.name = s;
+ ident.name = getString(name.get());
}
if(category.get())
{
- char* s = PyString_AsString(category.get());
- if(!s)
+ if(!checkString(category.get()))
{
PyErr_Format(PyExc_ValueError, STRCAST("identity category must be a string"));
return false;
}
- ident.category = s;
+ ident.category = getString(category.get());
}
return true;
}
@@ -952,7 +965,7 @@ extern "C"
PyObject*
IcePy_intVersion(PyObject* /*self*/)
{
- return PyInt_FromLong(ICE_INT_VERSION);
+ return PyLong_FromLong(ICE_INT_VERSION);
}
extern "C"