QGIS/python/server/server.sip.in
Nyall Dawson c2d213d339
Fix crash in server VirtualErrorHandler on newer sip environments
Fixes crash in tests, and adapts these VirtualErrorHandlers to the same
code used elsewhere in QGIS
2024-12-13 08:21:11 +10:00

74 lines
1.8 KiB
Plaintext

%Module(name=qgis._server,
keyword_arguments="All")
${DEFAULTDOCSTRINGSIGNATURE}
%Import QtCore/QtCoremod.sip
%Import QtGui/QtGuimod.sip
%Import QtXml/QtXmlmod.sip
%Import core/core.sip
%Include qgsserverexception.sip
%Feature HAVE_SERVER_PYTHON_PLUGINS
%Include server_auto.sip
%VirtualErrorHandler serverapi_badrequest_exception_handler
PyObject *type, *exception, *traceback;
PyErr_Fetch(&type, &exception, &traceback);
// check whether the object is already a unicode string
QString pyStrException;
if ( PyUnicode_Check( exception) )
{
pyStrException = QString::fromUtf8( PyUnicode_AsUTF8( exception ) );
}
else
{
PyObject* str = PyObject_Str( exception );
pyStrException = QString::fromUtf8( PyUnicode_AsUTF8( str ) );
Py_XDECREF( str );
}
SIP_RELEASE_GIL( sipGILState );
QString strException = "API bad request error";
if ( !pyStrException.isEmpty() )
{
strException = pyStrException;
}
throw QgsServerApiBadRequestException( strException );
%End
%VirtualErrorHandler server_exception_handler
PyObject *type, *exception, *traceback;
PyErr_Fetch(&type, &exception, &traceback);
// check whether the object is already a unicode string
QString pyStrException;
if ( PyUnicode_Check( exception) )
{
pyStrException = QString::fromUtf8( PyUnicode_AsUTF8( exception ) );
}
else
{
PyObject* str = PyObject_Str( exception );
pyStrException = QString::fromUtf8( PyUnicode_AsUTF8( str ) );
Py_XDECREF( str );
}
SIP_RELEASE_GIL( sipGILState );
QString strException = "Server internal error";
if ( !pyStrException.isEmpty() )
{
strException = pyStrException;
}
throw QgsServerException( strException );
%End