Return-Path: Delivered-To: apmail-ws-tuscany-commits-archive@locus.apache.org Received: (qmail 17797 invoked from network); 3 Jan 2007 19:48:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 3 Jan 2007 19:48:28 -0000 Received: (qmail 61593 invoked by uid 500); 3 Jan 2007 19:48:34 -0000 Delivered-To: apmail-ws-tuscany-commits-archive@ws.apache.org Received: (qmail 61561 invoked by uid 500); 3 Jan 2007 19:48:34 -0000 Mailing-List: contact tuscany-commits-help@ws.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: tuscany-dev@ws.apache.org Delivered-To: mailing list tuscany-commits@ws.apache.org Received: (qmail 61552 invoked by uid 99); 3 Jan 2007 19:48:34 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Jan 2007 11:48:34 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Jan 2007 11:48:26 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id C81001A981A; Wed, 3 Jan 2007 11:47:29 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r492270 - in /incubator/tuscany/cpp/sca/runtime: core/src/tuscany/sca/core/ core/src/tuscany/sca/model/ extensions/python/src/tuscany/sca/python/ extensions/rest/reference/curl/src/tuscany/sca/rest/ Date: Wed, 03 Jan 2007 19:47:24 -0000 To: tuscany-commits@ws.apache.org From: ajborley@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070103194729.C81001A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: ajborley Date: Wed Jan 3 11:47:23 2007 New Revision: 492270 URL: http://svn.apache.org/viewvc?view=rev&rev=492270 Log: Added initial support for named parameters (aka keyword arguments) to Python & REST references Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ReferenceBinding.cpp 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 incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_proxy.py incubator/tuscany/cpp/sca/runtime/extensions/rest/reference/curl/src/tuscany/sca/rest/RESTServiceWrapper.cpp Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp?view=diff&rev=492270&r1=492269&r2=492270 ============================================================================== --- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp (original) +++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.cpp Wed Jan 3 11:47:23 2007 @@ -145,9 +145,25 @@ return 0; } - // ============================================== - // getParameter: return of parameter - // ============================================== + // ================================================== + // getParameter: return parameter value based on name + // ================================================== + void* Operation::getParameterValue(const string& name) const + { + logentry(); + try + { + return getParameter(name).getValue(); + } + catch(ServiceInvocationException) + {} + + return 0; + } + + // ====================================================== + // getParameter: return parameter based on index position + // ====================================================== const Operation::Parameter& Operation::getParameter(unsigned int pos) const { logentry(); @@ -159,10 +175,27 @@ throwException(ServiceInvocationException, "Index out of range"); } + // =============================================== + // getParameter: return of parameter based on name + // =============================================== + const Operation::Parameter& Operation::getParameter(const string& name) const + { + logentry(); + for(unsigned int pos=0; pos < parameters.size(); pos++) + { + if(parameters[pos].getName() == name) + { + return parameters[pos]; + } + } + + throwException(ServiceInvocationException, "Parameter name not found"); + } - // ============================================== - // getParameterType: return type of parameter - // ============================================== + + // ============================================================ + // getParameterType: return type of parameter based on position + // ============================================================ Operation::ParameterType Operation::getParameterType(unsigned int pos) const { logentry(); @@ -174,6 +207,38 @@ return VOID_TYPE; } + // ======================================================== + // getParameterType: return type of parameter based on name + // ======================================================== + Operation::ParameterType Operation::getParameterType(const string& name) const + { + logentry(); + try + { + return getParameter(name).getType(); + } + catch(ServiceInvocationException) + {} + + return VOID_TYPE; + } + + const string emptyString = string(); + + // ============================================== + // getParameterName: return name of parameter + // ============================================== + const string& Operation::getParameterName(unsigned int pos) const + { + logentry(); + if (pos < parameters.size()) + { + return parameters[pos].getName(); + } + + return emptyString; + } + // =========================================== // addParameter: set parameter at position pos // =========================================== @@ -284,8 +349,118 @@ parameters.insert(parameters.end(), Parameter((void*)new DataObjectPtr(*parm), DATAOBJECT)); } - Operation::Parameter::Parameter(void* val, Operation::ParameterType typ) - : value(val), type(typ) + // ======================================================= + // addParameter: set parameter at position pos with a name + // ======================================================= + void Operation::addParameter(const string& name, const void *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: void, value: %p", name.c_str(), parm); + parameters.insert(parameters.end(), Parameter((void*)parm, VOID_TYPE, (string&) name)); + } + + void Operation::addParameter(const string& name, const bool *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: bool, value: %d", name.c_str(), (int)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, BOOL, (string&) name)); + } + + void Operation::addParameter(const string& name, const short *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: short, value: %hd", name.c_str(), (short)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, SHORT, (string&) name)); + } + + void Operation::addParameter(const string& name, const int *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: int, value: %d", name.c_str(), (int)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, INT, (string&) name)); + } + + void Operation::addParameter(const string& name, const long *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: long, value: %ld", name.c_str(), (long)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, LONG, (string&) name)); + } + + void Operation::addParameter(const string& name, const unsigned short *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: unsigned short, value: %hu", (unsigned short)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, USHORT, (string&) name)); + } + + void Operation::addParameter(const string& name, const unsigned int *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: unsigned int, value: %u", name.c_str(), (unsigned int)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, UINT, (string&) name)); + } + + void Operation::addParameter(const string& name, const unsigned long *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: unsigned long, value: %lu", name.c_str(), (unsigned long)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, ULONG, (string&) name)); + } + + void Operation::addParameter(const string& name, const float *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: float, value: %f", name.c_str(), (float)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, FLOAT, (string&) name)); + } + + void Operation::addParameter(const string& name, const double *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: double, value: %lf", name.c_str(), (double)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, DOUBLE, (string&) name)); + } + + void Operation::addParameter(const string& name, const long double *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: long double, value: %Lf", name.c_str(), (long double)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, LONGDOUBLE, (string&) name)); + } + + void Operation::addParameter(const string& name, const char* *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: char*, value: %s", name.c_str(), (const char*)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, CHARS, (string&) name)); + } + + void Operation::addParameter(const string& name, const char *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: char, value: %d", name.c_str(), (int)*parm); + parameters.insert(parameters.end(), Parameter((void*)parm, CHAR, (string&) name)); + } + + void Operation::addParameter(const string& name, const string *parm) + { + logentry(); + loginfo("Adding operation parameter, name: %s, type: string, value: %s", (const char*)(*parm).c_str()); + parameters.insert(parameters.end(), Parameter((void*)parm, STRING, (string&) name)); + } + + void Operation::addParameter(const string& name, const DataObjectPtr *parm) + { + logentry(); + ostringstream os; + os << *parm; + loginfo("Adding operation parameter, name: %s, type: DataObject, value: %s", name.c_str(), os.str().c_str()); + parameters.insert(parameters.end(), Parameter((void*)new DataObjectPtr(*parm), DATAOBJECT, (string&) name)); + } + + Operation::Parameter::Parameter(void* val, Operation::ParameterType typ, string& nam) + : value(val), type(typ), name(nam) { } Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h?view=diff&rev=492270&r1=492269&r2=492270 ============================================================================== --- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h (original) +++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/core/Operation.h Wed Jan 3 11:47:23 2007 @@ -95,11 +95,14 @@ class Parameter { public: - SCA_API Parameter(void* value = NULL, ParameterType type = VOID_TYPE); + SCA_API Parameter(void* value = NULL, ParameterType type = VOID_TYPE, std::string& name = std::string("")); SCA_API void* getValue() const {return value;} SCA_API ParameterType getType() const {return type;} + SCA_API const std::string& getName() const {return name;} + SCA_API bool hasName() const {return (name.length() > 0);} private: + std::string name; void* value; ParameterType type; }; @@ -126,7 +129,6 @@ /** * Set a parameter on the operation. - * @param pos The position of the parameter in the parameter list. * @param parm Pointer to the parameter to be passed. */ SCA_API void addParameter(const void *parm); @@ -144,6 +146,27 @@ SCA_API void addParameter(const char* *parm); SCA_API void addParameter(const std::string *parm); SCA_API void addParameter(const commonj::sdo::DataObjectPtr *parm); + + /** + * Set a parameter on the operation. + * @param name The name of the parameter in the parameter list. + * @param parm Pointer to the parameter to be passed. + */ + SCA_API void addParameter(const std::string& name, const void *parm); + SCA_API void addParameter(const std::string& name, const bool *parm); + SCA_API void addParameter(const std::string& name, const short *parm); + SCA_API void addParameter(const std::string& name, const int *parm); + SCA_API void addParameter(const std::string& name, const long *parm); + SCA_API void addParameter(const std::string& name, const unsigned short *parm); + SCA_API void addParameter(const std::string& name, const unsigned int *parm); + SCA_API void addParameter(const std::string& name, const unsigned long *parm); + SCA_API void addParameter(const std::string& name, const float *parm); + SCA_API void addParameter(const std::string& name, const double *parm); + SCA_API void addParameter(const std::string& name, const long double *parm); + SCA_API void addParameter(const std::string& name, const char *parm); + SCA_API void addParameter(const std::string& name, const char* *parm); + SCA_API void addParameter(const std::string& name, const std::string *parm); + SCA_API void addParameter(const std::string& name, const commonj::sdo::DataObjectPtr *parm); SCA_API unsigned int getNParms() const {return parameters.size();} @@ -156,20 +179,49 @@ SCA_API const Parameter& getParameter(unsigned int pos) const; /** + * Get a parameter from the operation. + * @param name The name of the parameter in the parameter list. + * @return Pointer to the paramter with the given name. Should be + * cast to the appropriate type. + */ + SCA_API const Parameter& getParameter(const std::string& name) const; + + /** * Get a parameter type from the operation. * @param pos The position of the parameter in the parameter list. - * @return Pointer to the paramter at the given postion. Should be - * cast to the appropriate type. + * @return Type of the parameter at the given position. */ SCA_API ParameterType getParameterType(unsigned int pos) const; /** - * Get a parameter from the operation. + * Get a parameter type from the operation. + * @param name The name of the parameter in the parameter list. + * @return Type of the parameter with the given name. + */ + SCA_API ParameterType getParameterType(const std::string& name) const; + + /** + * Get a parameter name from the operation. * @param pos The position of the parameter in the parameter list. - * @return Pointer to the paramter at the given postion. Should be + * @return Name of the parameter at the given position. + */ + SCA_API const std::string& getParameterName(unsigned int pos) const; + + /** + * Get the parameter value from the operation. + * @param pos The position of the parameter in the parameter list. + * @return Pointer to the value of the parameter at the given postion. Should be * cast to the appropriate type. */ SCA_API void* getParameterValue(unsigned int pos) const; + + /** + * Get the parameter value from the operation. + * @param name The name of the parameter in the parameter list. + * @return Pointer to the value of the parameter with the given name. Should be + * cast to the appropriate type. + */ + SCA_API void* getParameterValue(const std::string& name) const; SCA_API ParameterType getReturnType() const {return returnValue.getType();} SCA_API void* getReturnValue() const {return returnValue.getValue();} Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ReferenceBinding.cpp URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ReferenceBinding.cpp?view=diff&rev=492270&r1=492269&r2=492270 ============================================================================== --- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ReferenceBinding.cpp (original) +++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ReferenceBinding.cpp Wed Jan 3 11:47:23 2007 @@ -52,6 +52,8 @@ void ReferenceBinding::configure(const string& uri) { + logentry(); + // Find the target service Component* component = reference->getComponent(); Composite* composite = component->getComposite(); 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=492270&r1=492269&r2=492270 ============================================================================== --- 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 Wed Jan 3 11:47:23 2007 @@ -288,6 +288,7 @@ if (pFunc && PyCallable_Check(pFunc)) { PyObject* pArgs = PyTuple_New(operation.getNParms()); + PyObject* pKeywordsDict = PyDict_New(); PyObject* pValue = NULL; // Load up the xml.etree.ElementTree module for dealing with SDO params and return values @@ -407,13 +408,27 @@ throwException(ServiceDataException, msg.c_str()); } - //printPyObject("Param value", pValue); + //printPyObject("Param value", pValue); - /* pValue reference stolen here: */ - PyTuple_SetItem(pArgs, i, pValue); + // If we have a param name, put it in the keyword args + if(parm.hasName()) + { + PyDict_SetItemString(pKeywordsDict, parm.getName().c_str(), pValue); + Py_DECREF(pValue); + } + else + { + /* pValue reference stolen here: */ + PyTuple_SetItem(pArgs, i, pValue); + } } - pValue = PyObject_CallObject(pFunc, pArgs); + // Resize the args to the correct length + _PyTuple_Resize(&pArgs, operation.getNParms() - PyDict_Size(pKeywordsDict)); + + loginfo("Calling python func with %d args and %d keyword args", PyTuple_Size(pArgs), PyDict_Size(pKeywordsDict)); + + pValue = PyObject_Call(pFunc, pArgs, pKeywordsDict); //printPyObject("Return value", pValue); Py_DECREF(pArgs); @@ -871,7 +886,7 @@ DataObjectPtr properties = component->getProperties(); PropertyList pl = properties->getInstanceProperties(); - for (int i = 0; i < pl.size(); i++) + for (unsigned int i = 0; i < pl.size(); i++) { if (properties->isSet(pl[i])) { 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=492270&r1=492269&r2=492270 ============================================================================== --- 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 Wed Jan 3 11:47:23 2007 @@ -58,8 +58,9 @@ */ static void printPyObject(char* prefix, char* name, PyObject* pObj) { - PyObject* pObjRepr = PyObject_Repr(pObj); - loginfo("%s printPyObject %s: %s", prefix, name, PyString_AsString(pObjRepr)); + PyObject* pObjRepr = PyObject_Repr(pObj); + PyTypeObject* type = pObj->ob_type; + loginfo("%s printPyObject (%s) %s = %s", prefix, type->tp_name, name, PyString_AsString(pObjRepr)); Py_XDECREF(pObjRepr); if(pObj != NULL) @@ -216,7 +217,7 @@ if(operationName.size() > 0) { - loginfo("Operation: %s", operationName.c_str()); + loginfo("sca_invoke Operation name: %s", operationName.c_str()); } else { @@ -235,46 +236,67 @@ // Parameters are the fourth argument PyObject* paramTuple = PyTuple_GetItem(args, 3); + unsigned int numberOfArgs = (unsigned int) PyTuple_Size(paramTuple); + loginfo("sca_invoke %d arg parameters supplied", numberOfArgs); + + // Keyword parameters (AKA named arguments) are the fifth argument + PyObject* keywordParamDict = PyTuple_GetItem(args, 4); + loginfo("sca_invoke %d keyword parameters supplied", PyDict_Size(keywordParamDict)); + + PyObject* paramKeys = PyDict_Keys(keywordParamDict); - // Go through the supplied parameters - for(int i=0; i < PyTuple_Size(paramTuple); i++) + // Go through all the supplied parameters (args and keyword args) + for(unsigned int i=0; i < (numberOfArgs + PyList_Size(paramKeys)); i++) { - PyObject* param = PyTuple_GetItem(paramTuple, i); + string* paramName; + PyObject* param; + + if(i < PyTuple_Size(paramTuple)) + { + param = PyTuple_GetItem(paramTuple, i); + paramName = new string(); + } + else + { + PyObject* key = PyList_GetItem(paramKeys, i-numberOfArgs); + param = PyDict_GetItem(keywordParamDict, key); + paramName = new string(PyString_AsString(key)); + } if(PyInt_Check(param)) { - loginfo("Int param %d: %d", i, PyInt_AsLong(param)); + loginfo("Int param %d %s: %d", i, (*paramName).c_str(), PyInt_AsLong(param)); long* intData = new long; *intData = PyInt_AsLong(param); - operation.addParameter(intData); + operation.addParameter(*paramName, intData); } else if(PyBool_Check(param)) { - loginfo("Bool param %d: %d", i, (param == Py_True)); + loginfo("Bool param %d %s: %d", i, (*paramName).c_str(), (param == Py_True)); bool* boolData = new bool; *boolData = (param == Py_True); - operation.addParameter(boolData); + operation.addParameter(*paramName, boolData); } else if(PyLong_Check(param)) { - loginfo("Long param %d: %l", i, PyLong_AsLong(param)); + loginfo("Long param %d %s: %l", i, (*paramName).c_str(), PyLong_AsLong(param)); long* longData = new long; *longData = PyLong_AsLong(param); - operation.addParameter(longData); + operation.addParameter(*paramName, longData); } else if(PyFloat_Check(param)) { - loginfo("Float param %d: %f", i, PyFloat_AsDouble(param)); + loginfo("Float param %d %s: %f", i, (*paramName).c_str(), PyFloat_AsDouble(param)); double* doubleData = new double; *doubleData = PyFloat_AsDouble(param); - operation.addParameter(doubleData); + operation.addParameter(*paramName, doubleData); } else if(PyString_Check(param)) { - loginfo("String param %d: %s", i, PyString_AsString(param)); + loginfo("String param %d %s: %s", i, (*paramName).c_str(), PyString_AsString(param)); const char** stringData = new const char*; *stringData = PyString_AsString(param); - operation.addParameter(stringData); + operation.addParameter(*paramName, stringData); } else { @@ -290,7 +312,8 @@ PyObject* elementTreeToStringFunc = PyObject_GetAttrString(elementTreeModule, "tostring"); PyObject* pElemString = PyObject_CallFunction(elementTreeToStringFunc, "O", param); char* data = PyString_AsString(pElemString); - + loginfo("SDO param %d %s: %s", i, (*paramName).c_str(), data); + Py_DECREF(elementTreeToStringFunc); Py_DECREF(pElemString); @@ -311,7 +334,7 @@ } if (*dataObjectData != NULL) { - operation.addParameter(dataObjectData); + operation.addParameter(*paramName, dataObjectData); } else { @@ -475,8 +498,8 @@ } static PyMethodDef ModuleMethods[] = { - {"locateservice", sca_locateservice, METH_VARARGS, "Locates an SCA service & returns an sca_proxy_class instance"}, - {"invoke", sca_invoke, METH_VARARGS, "Invoke an operation on an SCA service or reference"}, + {"locateservice", (PyCFunction) sca_locateservice, METH_VARARGS, "Locates an SCA service & returns an sca_proxy_class instance"}, + {"invoke", (PyCFunction) sca_invoke, METH_VARARGS, "Invoke an operation on an SCA service or reference"}, {NULL, NULL, 0, NULL} /* Sentinel */ }; Modified: incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_proxy.py URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_proxy.py?view=diff&rev=492270&r1=492269&r2=492270 ============================================================================== --- incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_proxy.py (original) +++ incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/sca_proxy.py Wed Jan 3 11:47:23 2007 @@ -40,8 +40,9 @@ def invoke(self, operationName): - def invokeFunction(*args,**kwargs): - return sca.invoke(self.sca_proxy_name, self.sca_proxy_is_reference, operationName, args) + def invokeFunction(*args, **kwargs): + # Pass the args and keywords in to the invoke method as arguments + return sca.invoke(self.sca_proxy_name, self.sca_proxy_is_reference, operationName, args, kwargs) return invokeFunction Modified: incubator/tuscany/cpp/sca/runtime/extensions/rest/reference/curl/src/tuscany/sca/rest/RESTServiceWrapper.cpp URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/rest/reference/curl/src/tuscany/sca/rest/RESTServiceWrapper.cpp?view=diff&rev=492270&r1=492269&r2=492270 ============================================================================== --- incubator/tuscany/cpp/sca/runtime/extensions/rest/reference/curl/src/tuscany/sca/rest/RESTServiceWrapper.cpp (original) +++ incubator/tuscany/cpp/sca/runtime/extensions/rest/reference/curl/src/tuscany/sca/rest/RESTServiceWrapper.cpp Wed Jan 3 11:47:23 2007 @@ -269,10 +269,20 @@ // If the URI ends with a "?" then we use the query // form param=value& os << uri; - for (int i = firstParm; i < operation.getNParms(); i++) + for (unsigned int i = firstParm; i < operation.getNParms(); i++) { - os << "param" << (i + 1) << "="; - writeParameter(xmlHelper, os, operation.getParameter(i)); + Operation::Parameter param = operation.getParameter(i); + + if(param.hasName()) + { + os << param.getName() << "="; + } + else + { + // No name - use "param1", etc + os << "param" << (i + 1) << "="; + } + writeParameter(xmlHelper, os, param); if (i < operation.getNParms()-1) os << "&"; } @@ -282,14 +292,15 @@ // Add the parameters in the form // value1 / value2 / value3 os << uri; - for (int i = firstParm; i < operation.getNParms(); i++) + for (unsigned int i = firstParm; i < operation.getNParms(); i++) { os << "/"; writeParameter(xmlHelper, os, operation.getParameter(i)); } } - string url = os.str(); + string url = os.str(); + //loginfo("RESTServiceWrapper: HTTP GET %s", url.c_str()); curl_easy_setopt(curl_handle, CURLOPT_URL, url.c_str()); // Send all data to this function @@ -468,10 +479,19 @@ // If the URI ends with a "?" then we use the query // form param=value& os << uri; - for (int i = firstParm; i < operation.getNParms()-1; i++) + for (unsigned int i = firstParm; i < operation.getNParms()-1; i++) { - os << "param" << (i + 1) << "="; - writeParameter(xmlHelper, os, operation.getParameter(i)); + Operation::Parameter param = operation.getParameter(i); + if(param.hasName()) + { + os << param.getName() << "="; + } + else + { + // No name - use "param1", etc + os << "param" << (i + 1) << "="; + } + writeParameter(xmlHelper, os, param); if (i < operation.getNParms()-1) os << "&"; } @@ -481,7 +501,7 @@ // Add the parameters in the form // value1 / value2 / value3 os << uri; - for (int i = firstParm; i < operation.getNParms()-1; i++) + for (unsigned int i = firstParm; i < operation.getNParms()-1; i++) { os << "/"; writeParameter(xmlHelper, os, operation.getParameter(i)); @@ -593,10 +613,20 @@ // If the URI ends with a "?" then we use the query // form param=value& os << uri; - for (int i = firstParm; i < operation.getNParms(); i++) + for (unsigned int i = firstParm; i < operation.getNParms(); i++) { - os << "param" << (i + 1) << "="; - writeParameter(xmlHelper, os, operation.getParameter(i)); + Operation::Parameter param = operation.getParameter(i); + + if(param.hasName()) + { + os << param.getName() << "="; + } + else + { + // No name - use "param1", etc + os << "param" << (i + 1) << "="; + } + writeParameter(xmlHelper, os, param); if (i < operation.getNParms()-1) os << "&"; } @@ -606,7 +636,7 @@ // Add the parameters in the form // value1 / value2 / value3 os << uri; - for (int i = firstParm; i < operation.getNParms(); i++) + for (unsigned int i = firstParm; i < operation.getNParms(); i++) { os << "/"; writeParameter(xmlHelper, os, operation.getParameter(i)); @@ -674,7 +704,7 @@ // If the request contains complex content then we'll use // a POST, otherwise we use a GET with a query string bool complexContent = false; - for (int i=0; igetList(pl[i]); - for(int j=0; j