Ignore:
Timestamp:
Feb 12, 2014, 3:25:15 PM (10 years ago)
Author:
djay
Message:

Add the optional Ruby Language Support to the ZOO-Kernel with an API similar to the Python ZOO-API. Small rewrite of Python support. Fix issue #86 and #87. Add usid in [lenv] section, this value is used to generate an unique identifier based on time and the process identifier. This usid is now used to name the stored result or the mapfile generated. Remove *some* warning messages displayed at compilation time.

File:
1 edited

Legend:

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

    r451 r453  
    22 * Author : Gérald FENOY
    33 *
    4  * Copyright (c) 2009-2013 GeoLabs SARL
     4 * Copyright (c) 2009-2014 GeoLabs SARL
    55 *
    66 * Permission is hereby granted, free of charge, to any person obtaining a copy
     
    3131#if PY_MAJOR_VERSION >= 3
    3232#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
     33#define PyInt_FromLong PyLong_FromLong
     34#define PyInt_AsLong PyLong_AsLong
     35#define PyString_FromString PyUnicode_FromString
     36#define PyString_FromStringAndSize PyUnicode_FromStringAndSize
     37#define PyString_Check PyUnicode_Check
     38#define PyString_AsString _PyUnicode_AsString
     39#define PyString_Size PyUnicode_GetSize
    3340#else
    3441#define GETSTATE(m) (&_state)
     
    8895
    8996  d = PyModule_GetDict(module);
    90 #if PY_MAJOR_VERSION >= 3
    91   tmp = PyLong_FromLong(3);
    92 #else
    9397  tmp = PyInt_FromLong(3);
    94 #endif
    9598  PyDict_SetItemString(d, "SERVICE_SUCCEEDED", tmp);
    9699  Py_DECREF(tmp);
    97100
    98 #if PY_MAJOR_VERSION >= 3
    99   tmp = PyLong_FromLong(4);
    100 #else
    101101  tmp = PyInt_FromLong(4);
    102 #endif
    103102  PyDict_SetItemString(d, "SERVICE_FAILED", tmp);
    104103  Py_DECREF(tmp);
     
    191190  tmp=getMap(s->content,"serviceProvider");
    192191  if(tmp!=NULL)
    193     pName =
    194 #if PY_MAJOR_VERSION >= 3
    195       PyUnicode_FromString(tmp->value);
    196 #else
    197       PyString_FromString(tmp->value);
    198 #endif
     192    pName = PyString_FromString(tmp->value);
    199193  else{
    200194    map* err=createMap("text","Unable to parse serviceProvider please check your zcfg file.");
     
    218212      PyTuple_SetItem(pArgs, 1, (PyObject *)arg2);
    219213      PyTuple_SetItem(pArgs, 2, (PyObject *)arg3);
    220       tmp=getMap(request,"storeExecuteResponse");
    221 #ifdef DEBUG
    222       fprintf(stderr,"RUN IN NORMAL MODE \n");
    223       fflush(stderr);
    224 #endif
    225214      pValue = PyObject_CallObject(pFunc, pArgs);
    226215      if (pValue != NULL) {
    227 #if PY_MAJOR_VERSION >= 3
    228         res=PyLong_AsLong(pValue);
    229 #else
    230216        res=PyInt_AsLong(pValue);
    231 #endif
    232217        freeMaps(real_outputs);
    233218        free(*real_outputs);
     
    237222        *real_outputs=mapsFromPyDict(arg3);
    238223#ifdef DEBUG
    239 #if PY_MAJOR_VERSION >= 3
    240         fprintf(stderr,"Result of call: %i\n", PyLong_AsLong(pValue));
    241 #else
    242224        fprintf(stderr,"Result of call: %i\n", PyInt_AsLong(pValue));
    243 #endif
    244225        dumpMaps(inputs);
    245226        dumpMaps(*real_outputs);
     
    250231        PyObject *trace=PyObject_Str(pvalue);
    251232        char pbt[10240];
    252 #if PY_MAJOR_VERSION >= 3
    253         if(PyUnicode_Check(trace))
    254           sprintf(pbt,"TRACE : %s",_PyUnicode_AsString(trace));
    255 #else
    256233        if(PyString_Check(trace))
    257234          sprintf(pbt,"TRACE : %s",PyString_AsString(trace));
    258 #endif
    259235        else
    260236          fprintf(stderr,"EMPTY TRACE ?");
    261237        trace=NULL;
    262238        trace=PyObject_Str(ptype);
    263 #if PY_MAJOR_VERSION >= 3
    264         if(PyUnicode_Check(trace)){
    265 #else
    266239        if(PyString_Check(trace)){
    267 #endif
    268           char *tpbt=strdup(pbt);
    269 #if PY_MAJOR_VERSION >= 3
    270           sprintf(pbt,"%s\n%s\0",tpbt,_PyUnicode_AsString(trace));
    271 #else
     240          char *tpbt=zStrdup(pbt);
    272241          sprintf(pbt,"%s\n%s\0",tpbt,PyString_AsString(trace));
    273 #endif
    274242          free(tpbt);
    275243        }
     
    277245          fprintf(stderr,"EMPTY TRACE ?");
    278246       
    279         char *tpbt=strdup(pbt);
    280 #if PY_MAJOR_VERSION >= 3
    281         pName = PyUnicode_FromString("traceback");
    282 #else
     247        char *tpbt=zStrdup(pbt);
    283248        pName = PyString_FromString("traceback");
    284 #endif
    285249        pModule = PyImport_Import(pName);
    286250        pArgs = PyTuple_New(1);
     
    290254        trace=NULL;
    291255        trace=PyObject_Str(pValue);
    292 #if PY_MAJOR_VERSION >= 3
    293         if(PyUnicode_Check(trace))
    294           sprintf(pbt,"%s\nUnable to run your python process properly. Please check the following messages : %s",tpbt,_PyUnicode_AsString(trace));
    295 #else
    296256        if(PyString_Check(trace))
    297257          sprintf(pbt,"%s\nUnable to run your python process properly. Please check the following messages : %s",tpbt,PyString_AsString(trace));
    298 #endif
    299258        else
    300259          sprintf(pbt,"%s \n Unable to run your python process properly. Unable to provide any futher informations. %s",tpbt);
     
    338297  while(tmp!=NULL){
    339298    PyObject* value=(PyObject*)PyDict_FromMap(tmp->content);
    340     PyObject* name=
    341 #if PY_MAJOR_VERSION >= 3
    342       PyUnicode_FromString(tmp->name);
    343 #else
    344       PyString_FromString(tmp->name);
    345 #endif
     299    PyObject* name=PyString_FromString(tmp->name);
    346300    if(PyDict_SetItem(res,name,value)<0){
    347301      fprintf(stderr,"Unable to set map value ...");
     
    362316  map* tmap=getMapType(tmp);
    363317  while(tmp!=NULL){
    364     PyObject* name=
    365 #if PY_MAJOR_VERSION >= 3
    366       PyUnicode_FromString(tmp->name);
    367 #else
    368       PyString_FromString(tmp->name);
    369 #endif
     318    PyObject* name=PyString_FromString(tmp->name);
    370319    if(strcasecmp(tmp->name,"value")==0) {
    371320      if(isArray!=NULL){
     
    386335            PyObject* lsvalue;
    387336            if(sMap==NULL){
    388 #if PY_MAJOR_VERSION >= 3
    389               lvalue=PyUnicode_FromString(vMap->value);
    390 #else
    391337              lvalue=PyString_FromString(vMap->value);
    392 #endif
    393338              lsvalue=Py_None;
    394339            }
    395             else{
    396 #if PY_MAJOR_VERSION >= 3
    397               lvalue=PyUnicode_FromStringAndSize(vMap->value,atoi(sMap->value));
    398               lsvalue=PyUnicode_FromString(sMap->value);
    399 #else
     340            else{   
    400341              lvalue=PyString_FromStringAndSize(vMap->value,atoi(sMap->value));
    401342              lsvalue=PyString_FromString(sMap->value);
    402 #endif
    403343              hasSize=1;
    404344            }
     
    417357          PyObject* lmvalue;
    418358          if(mMap!=NULL){
    419 #if PY_MAJOR_VERSION >= 3
    420             lmvalue=PyUnicode_FromString(mMap->value);
    421 #else
    422359            lmvalue=PyString_FromString(mMap->value);
    423 #endif
    424360          }else
    425361            lmvalue=Py_None;
     
    436372          return NULL;
    437373        }
    438 #if PY_MAJOR_VERSION >= 3
    439         if(PyDict_SetItem(res,PyUnicode_FromString(tmap->name),mvalue)<0){
    440 #else
    441374        if(PyDict_SetItem(res,PyString_FromString(tmap->name),mvalue)<0){
    442 #endif
    443375          fprintf(stderr,"Unable to set key value pair...");
    444376          return NULL;
    445377        }
    446378        if(hasSize>0)
    447 #if PY_MAJOR_VERSION >= 3
    448           if(PyDict_SetItem(res,PyUnicode_FromString("size"),svalue)<0){
    449 #else
    450379          if(PyDict_SetItem(res,PyString_FromString("size"),svalue)<0){
    451 #endif
    452380            fprintf(stderr,"Unable to set key value pair...");
    453381            return NULL;
     
    455383      }
    456384      else if(size!=NULL){
    457         PyObject* value=
    458 #if PY_MAJOR_VERSION >= 3
    459           PyUnicode_FromStringAndSize(tmp->value,atoi(size->value));
    460 #else
    461           PyString_FromStringAndSize(tmp->value,atoi(size->value));
    462 #endif
     385        PyObject* value=PyString_FromStringAndSize(tmp->value,atoi(size->value));
    463386        if(PyDict_SetItem(res,name,value)<0){
    464387          fprintf(stderr,"Unable to set key value pair...");
     
    467390      }
    468391      else{
    469         PyObject* value=
    470 #if PY_MAJOR_VERSION >= 3
    471           PyUnicode_FromString(tmp->value);
    472 #else
    473           PyString_FromString(tmp->value);
    474 #endif
     392        PyObject* value=PyString_FromString(tmp->value);
    475393        if(PyDict_SetItem(res,name,value)<0){
    476394          fprintf(stderr,"Unable to set key value pair...");
     
    481399    else{
    482400      if(PyDict_GetItem(res,name)==NULL){
    483         PyObject* value=
    484 #if PY_MAJOR_VERSION >= 3
    485           PyUnicode_FromString(tmp->value);
    486 #else
    487           PyString_FromString(tmp->value);
    488 #endif
     401        PyObject* value=PyString_FromString(tmp->value);
    489402        if(PyDict_SetItem(res,name,value)<0){
    490403          fprintf(stderr,"Unable to set key value pair...");
     
    516429#endif
    517430    cursor=(maps*)malloc(MAPS_SIZE);
    518 #if PY_MAJOR_VERSION >= 3
    519     cursor->name=_PyUnicode_AsString(key);
    520 #else
    521431    cursor->name=PyString_AsString(key);
    522 #endif
    523432    cursor->content=mapFromPyDict((PyDictObject*)value);
    524433#ifdef DEBUG
     
    553462            PyString_AsString(key),PyString_AsString(value));
    554463#endif
    555 #if PY_MAJOR_VERSION >= 3
    556     if(strcmp(_PyUnicode_AsString(key),"value")==0){
    557 #else
     464   
    558465    if(strcmp(PyString_AsString(key),"value")==0){
    559 #endif
    560466      char *buffer=NULL;
    561467      Py_ssize_t size;
     
    566472#endif
    567473      if(res!=NULL){
    568 #if PY_MAJOR_VERSION >= 3
    569         addToMap(res,_PyUnicode_AsString(key),"");
    570 #else
    571474        addToMap(res,PyString_AsString(key),"");
    572 #endif
    573475      }else{
    574 #if PY_MAJOR_VERSION >= 3
    575         res=createMap(_PyUnicode_AsString(key),"");
    576 #else
    577476        res=createMap(PyString_AsString(key),"");
    578 #endif
    579477      }
    580478      map* tmpR=getMap(res,"value");
     
    589487      if(res!=NULL){
    590488        if(PyString_Size(value)>0)
    591 #if PY_MAJOR_VERSION >= 3
    592           addToMap(res,_PyUnicode_AsString(key),_PyUnicode_AsString(value));
    593 #else
    594489          addToMap(res,PyString_AsString(key),PyString_AsString(value));
    595 #endif
    596490      }
    597491      else{
    598492        if(PyString_Size(value)>0)
    599           res=
    600 #if PY_MAJOR_VERSION >= 3
    601             createMap(_PyUnicode_AsString(key),_PyUnicode_AsString(value));
    602 #else
    603             createMap(PyString_AsString(key),PyString_AsString(value));
    604 #endif
     493          res=createMap(PyString_AsString(key),PyString_AsString(value));
    605494      }
    606495    }
     
    619508    return NULL;
    620509  }
    621 #if PY_MAJOR_VERSION >= 3
    622   return PyUnicode_FromString(_ss(str));
    623 #else
    624510  return PyString_FromString(_ss(str));
    625 #endif
    626511}
    627512
     
    645530     char tmpStatus[4];
    646531     snprintf(tmpStatus, 4, "%i", istatus);
    647      status = strdup(tmpStatus);
     532     status = zStrdup(tmpStatus);
    648533  }
    649534  /* now update the map */
     
    651536    PyObject* lenv = PyMapping_GetItemString(confdict, "lenv");
    652537    if (lenv && PyMapping_Check(lenv)){
    653       PyObject* valobj =
    654 #if PY_MAJOR_VERSION >= 3
    655         PyUnicode_FromString(status);
    656 #else
    657         PyString_FromString(status);
    658 #endif
     538      PyObject* valobj = PyString_FromString(status);
    659539      PyMapping_SetItemString(lenv, "status", valobj);
    660540      Py_DECREF(valobj);
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