You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by aj...@apache.org on 2007/02/23 16:10:19 UTC
svn commit: r510974 - in
/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python:
PythonServiceWrapper.cpp sca_module.cpp
Author: ajborley
Date: Fri Feb 23 07:10:18 2007
New Revision: 510974
URL: http://svn.apache.org/viewvc?view=rev&rev=510974
Log:
Add more checking and support for ElementTree in pre-Python2.5
Modified:
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp
incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_module.cpp
Modified: incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp?view=diff&rev=510974&r1=510973&r2=510974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonServiceWrapper.cpp Fri Feb 23 07:10:18 2007
@@ -293,7 +293,19 @@
// Load up the xml.etree.ElementTree module for dealing with SDO params and return values
PyObject* elementTreeModuleName = PyString_FromString("xml.etree.ElementTree");
- PyObject* elementTreeModule = PyImport_Import(elementTreeModuleName);
+ PyObject* elementTreeModule = PyImport_Import(elementTreeModuleName);
+
+ if(elementTreeModule == NULL)
+ {
+ // pre-Python2.5? - try to get an installed elementtree package
+ elementTreeModuleName = PyString_FromString("elementtree.ElementTree");
+ elementTreeModule = PyImport_Import(elementTreeModuleName);
+ }
+ if(elementTreeModule == NULL)
+ {
+ // Still null - throw a warning but carry on - user may not need XML
+ logwarning("Could not load Python ElementTree module - is it installed? SDO and XML will not be supported");
+ }
for(unsigned int i = 0; i < operation.getNParms(); i++)
{
@@ -370,25 +382,32 @@
}
case Operation::DATAOBJECT:
{
- DataObjectPtr dob = *(DataObjectPtr*)parm.getValue();
+ if(elementTreeModule != NULL)
+ {
+ DataObjectPtr dob = *(DataObjectPtr*)parm.getValue();
- // Convert a DataObject to a xml.etree.ElementTree Element object
- Composite* composite = component->getComposite();
- XMLHelper* xmlHelper = composite->getXMLHelper();
- char* str = xmlHelper->save(
- dob,
- dob->getType().getURI(),
- dob->getType().getName());
+ // Convert a DataObject to a xml.etree.ElementTree Element object
+ Composite* composite = component->getComposite();
+ XMLHelper* xmlHelper = composite->getXMLHelper();
+ char* str = xmlHelper->save(
+ dob,
+ dob->getType().getURI(),
+ dob->getType().getName());
- loginfo("Converting SDO DataObject to Python ElementTree: %s", str);
+ loginfo("Converting SDO DataObject to Python ElementTree: %s", str);
- // Get the xml.etree.ElementTree.XML function
- PyObject* elementTreeXMLFunc = PyObject_GetAttrString(elementTreeModule, "XML");
+ // Get the xml.etree.ElementTree.XML function
+ PyObject* elementTreeXMLFunc = PyObject_GetAttrString(elementTreeModule, "XML");
- // Call the XML() function with the XML string
- pValue = PyObject_CallFunction(elementTreeXMLFunc, "s", str);
+ // Call the XML() function with the XML string
+ pValue = PyObject_CallFunction(elementTreeXMLFunc, "s", str);
- Py_DECREF(elementTreeXMLFunc);
+ Py_DECREF(elementTreeXMLFunc);
+ }
+ else
+ {
+ throwException(ServiceDataException, "Could not convert SDO DataObject to Python ElementTree as ElementTree module could not be loaded");
+ }
break;
}
default:
@@ -778,11 +797,17 @@
}
else
{
- // Get the xml.etree.ElementTree.iselement function
- PyObject* elementTreeIsElementFunc = PyObject_GetAttrString(elementTreeModule, "iselement");
+ PyObject* pIsElement = Py_False;
- // Call the iselement() function with pValue to check it
- PyObject* pIsElement = PyObject_CallFunction(elementTreeIsElementFunc, "O", pValue);
+ if(elementTreeModule != NULL)
+ {
+ // Get the xml.etree.ElementTree.iselement function
+ PyObject* elementTreeIsElementFunc = PyObject_GetAttrString(elementTreeModule, "iselement");
+
+ // Call the iselement() function with pValue to check it
+ PyObject* pIsElement = PyObject_CallFunction(elementTreeIsElementFunc, "O", pValue);
+ Py_DECREF(elementTreeIsElementFunc);
+ }
if(PyObject_IsTrue(pIsElement) == 1)
{
@@ -829,8 +854,7 @@
Py_DECREF(valueRepr);
}
- Py_DECREF(pIsElement);
- Py_DECREF(elementTreeIsElementFunc);
+ Py_DECREF(pIsElement);
}
Py_DECREF(elementTreeModule);
Modified: incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_module.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_module.cpp?view=diff&rev=510974&r1=510973&r2=510974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_module.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_module.cpp Fri Feb 23 07:10:18 2007
@@ -234,6 +234,18 @@
PyObject* elementTreeModuleName = PyString_FromString("xml.etree.ElementTree");
PyObject* elementTreeModule = PyImport_Import(elementTreeModuleName);
+ if(elementTreeModule == NULL)
+ {
+ // pre-Python2.5? - try to get an installed elementtree package
+ elementTreeModuleName = PyString_FromString("elementtree.ElementTree");
+ elementTreeModule = PyImport_Import(elementTreeModuleName);
+ }
+ if(elementTreeModule == NULL)
+ {
+ // Still null - throw a warning but carry on - user may not need XML
+ logwarning("Could not load Python ElementTree module - is it installed? SDO and XML will not be supported");
+ }
+
// Parameters are the fourth argument
PyObject* paramTuple = PyTuple_GetItem(args, 3);
unsigned int numberOfArgs = (unsigned int) PyTuple_Size(paramTuple);
@@ -300,11 +312,15 @@
}
else
{
- // Get the xml.etree.ElementTree.iselement function
- PyObject* elementTreeIsElementFunc = PyObject_GetAttrString(elementTreeModule, "iselement");
+ PyObject* pIsElement = Py_False;
+ if(elementTreeModule != NULL)
+ {
+ // Get the xml.etree.ElementTree.iselement function
+ PyObject* elementTreeIsElementFunc = PyObject_GetAttrString(elementTreeModule, "iselement");
- // Call the iselement() function with pValue to check it
- PyObject* pIsElement = PyObject_CallFunction(elementTreeIsElementFunc, "O", param);
+ // Call the iselement() function with pValue to check it
+ PyObject* pIsElement = PyObject_CallFunction(elementTreeIsElementFunc, "O", param);
+ }
if(PyObject_IsTrue(pIsElement) == 1)
{
@@ -342,7 +358,7 @@
logerror(msg.c_str());
PyErr_SetString(scaError, msg.c_str());
return NULL;
- }
+ }
}
else
{
@@ -462,25 +478,34 @@
}
case Operation::DATAOBJECT:
{
- DataObjectPtr dob = *(DataObjectPtr*)operation.getReturnValue();
+ if(elementTreeModule != NULL)
+ {
+ DataObjectPtr dob = *(DataObjectPtr*)operation.getReturnValue();
- // Convert a DataObject to a xml.etree.ElementTree Element object
- Composite* composite = component->getComposite();
- XMLHelper* xmlHelper = composite->getXMLHelper();
- char* str = xmlHelper->save(
- dob,
- dob->getType().getURI(),
- dob->getType().getName());
+ // Convert a DataObject to a xml.etree.ElementTree Element object
+ Composite* composite = component->getComposite();
+ XMLHelper* xmlHelper = composite->getXMLHelper();
+ char* str = xmlHelper->save(
+ dob,
+ dob->getType().getURI(),
+ dob->getType().getName());
- loginfo("Converting SDO DataObject to Python ElementTree: %s", str);
+ loginfo("Converting SDO DataObject to Python ElementTree: %s", str);
- // Get the xml.etree.ElementTree.XML function
- PyObject* elementTreeXMLFunc = PyObject_GetAttrString(elementTreeModule, "XML");
+ // Get the xml.etree.ElementTree.XML function
+ PyObject* elementTreeXMLFunc = PyObject_GetAttrString(elementTreeModule, "XML");
- // Call the XML() function with the XML string
- returnValue = PyObject_CallFunction(elementTreeXMLFunc, "s", str);
+ // Call the XML() function with the XML string
+ returnValue = PyObject_CallFunction(elementTreeXMLFunc, "s", str);
- Py_DECREF(elementTreeXMLFunc);
+ Py_DECREF(elementTreeXMLFunc);
+ }
+ else
+ {
+ logwarning("Could not convert SDO DataObject to Python ElementTree as ElementTree module could not be loaded. Returning NONE");
+ Py_INCREF(Py_None);
+ returnValue = Py_None;
+ }
break;
}
default:
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org