Ignore:
Timestamp:
Dec 19, 2016, 6:01:06 PM (7 years ago)
Author:
djay
Message:

Add support for nested inputs and outputs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/zoo-project/zoo-kernel/service_internal_python.c

    r784 r790  
    356356      if(pbt!=NULL)
    357357        free(pbt);
    358       pbt=(char*)malloc((90+strlen(tpbt)+strlen(PyString_AsString(trace))+1)*sizeof(char));
    359       sprintf(pbt,_("%s\nUnable to run your python process properly. Please check the following messages : %s"),tpbt,PyString_AsString(trace));
     358      char* format=_("%s\nUnable to run your python process properly. Please check the following messages : %s");
     359      pbt=(char*)malloc((strlen(format)+strlen(tpbt)+strlen(PyString_AsString(trace))+1)*sizeof(char));
     360      sprintf(pbt,format,tpbt,PyString_AsString(trace));
    360361    }
    361362    else{
    362363      if(pbt!=NULL)
    363364        free(pbt);
    364       pbt=(char*)malloc((90+strlen(tpbt)+strlen(PyString_AsString(trace))+1)*sizeof(char));     
    365       sprintf(pbt,_("%s \n Unable to run your python process properly. Unable to provide any further information."),tpbt);
     365      char* format=_("%s \n Unable to run your python process properly. Unable to provide any further information.");
     366      pbt=(char*)malloc((strlen(format)+strlen(tpbt)+strlen(PyString_AsString(trace))+1)*sizeof(char));
     367      sprintf(pbt,format,tpbt);
    366368    }
    367369    free(tpbt);
     
    390392  while(tmp!=NULL){
    391393    PyObject* value=(PyObject*)PyDict_FromMap(tmp->content);
     394    if(tmp->child!=NULL){
     395      PyObject* cname=PyString_FromString("child");
     396      PyObject* childs=(PyObject*)PyDict_FromMaps(tmp->child);
     397      if(PyDict_SetItem(value,cname,childs)<0){
     398        fprintf(stderr,"Unable to set map value ...");
     399        return NULL;
     400      }
     401      Py_DECREF(cname);
     402    }
    392403    PyObject* name=PyString_FromString(tmp->name);
    393404    if(PyDict_SetItem(res,name,value)<0){
     
    543554            PyString_AsString(key),PyString_AsString(value));
    544555#endif
    545     cursor=(maps*)malloc(MAPS_SIZE);
    546     cursor->name=zStrdup(PyString_AsString(key));
     556    cursor=createMaps(PyString_AsString(key));
    547557    cursor->content=mapFromPyDict((PyDictObject*)value);
     558    PyObject* cname=PyString_FromString("child");
     559    PyObject* childs=PyDict_GetItem((PyObject*)value,cname);
     560    if(childs!=NULL)
     561      cursor->child=mapsFromPyDict((PyDictObject*)childs);
     562    Py_DECREF(cname);
    548563#ifdef DEBUG
    549564    dumpMap(cursor->content);
     
    626641            PyString_AsString(key),PyString_AsString(value));
    627642#endif
    628    
    629     if(strncmp(PyString_AsString(key),"value",5)==0){
    630       char *buffer=NULL;
    631       Py_ssize_t size;
     643    if(strncmp(PyString_AsString(key),"child",5)!=0){
     644      if(strncmp(PyString_AsString(key),"value",5)==0){
     645        char *buffer=NULL;
     646        Py_ssize_t size;
    632647#if PY_MAJOR_VERSION >= 3
    633       if(PyBytes_Check(value)){
    634         size=PyBytes_Size(value);
    635         buffer=PyBytes_AsString(value);
    636       }
    637       else
    638         if(PyUnicode_Check(value) && PyUnicode_READY(value) == 0){
    639           buffer=PyUnicode_AsUTF8AndSize(value,&size);
     648        if(PyBytes_Check(value)){
     649          size=PyBytes_Size(value);
     650          buffer=PyBytes_AsString(value);
     651        }
     652        else
     653          if(PyUnicode_Check(value) && PyUnicode_READY(value) == 0){
     654            buffer=PyUnicode_AsUTF8AndSize(value,&size);
     655          }
     656          else{
     657#ifdef DEBUG
     658            fprintf(stderr,"Unsupported return value.");
     659#endif
     660            return NULL;
     661          }
     662#else
     663        PyString_AsStringAndSize(value,&buffer,&size);
     664#endif     
     665        res = addToMapWithSize(res,PyString_AsString(key),buffer,size);
     666      }else{
     667        char* lkey=PyString_AsString(key);
     668        char* lvalue=PyString_AsString(value);
     669        if(res!=NULL){
     670          if(PyString_Size(value)>0)
     671            addToMap(res,lkey,lvalue);
    640672        }
    641673        else{
    642 #ifdef DEBUG
    643           fprintf(stderr,"Unsupported return value.");
    644 #endif
    645           return NULL;
    646         }
    647 #else
    648       PyString_AsStringAndSize(value,&buffer,&size);
    649 #endif     
    650           res = addToMapWithSize(res,PyString_AsString(key),buffer,size);
    651     }else{
    652       char* lkey=PyString_AsString(key);
    653       char* lvalue=PyString_AsString(value);
    654       if(res!=NULL){
    655         if(PyString_Size(value)>0)
    656           addToMap(res,lkey,lvalue);
    657       }
    658       else{
    659         if(PyString_Size(value)>0)
    660           res=createMap(lkey,lvalue);
     674          if(PyString_Size(value)>0)
     675            res=createMap(lkey,lvalue);
     676        }
    661677      }
    662678    }
Note: See TracChangeset for help on using the changeset viewer.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png