Exemple #1
1
static PyObject *parse_qs(PyObject *self, PyObject *args, PyObject *kw)
{

    PyObject *pairs, *dict;
    int i, n, len, lsize;
    char *qs;
    int keep_blank_values = 0;
    int strict_parsing = 0; /* XXX not implemented */
    char *keywords[] = { "qs", "keep_blank_values", "strict_parsing", 0 };
    
    if (! PyArg_ParseTupleAndKeywords(args, kw, "s|ii", keywords, &qs, &keep_blank_values, 
                           &strict_parsing)) 
        return NULL; /* error */

    /* split query string by '&' and ';' into a list of pairs */
    /* PYTHON 2.5: 'PyList_New' uses Py_ssize_t for input parameters */ 
    pairs = PyList_New(0);
    if (pairs == NULL)
        return NULL;

    i = 0;
    len = strlen(qs);

    while (i < len) {

        PyObject *pair;
        char *cpair;
        int j = 0;

        /* PYTHON 2.5: 'PyString_FromStringAndSize' uses Py_ssize_t for input parameters */ 
        pair = PyString_FromStringAndSize(NULL, len);
        if (pair == NULL)
            return NULL;

        /* split by '&' or ';' */
        cpair = PyString_AS_STRING(pair);
        while ((qs[i] != '&') && (qs[i] != ';') && (i < len)) {
            /* replace '+' with ' ' */
            cpair[j] = (qs[i] == '+') ? ' ' : qs[i];
            i++;
            j++;
        }

        if (j) {
            /* PYTHON 2.5: '_PyString_Resize' uses Py_ssize_t for input parameters */ 
            _PyString_Resize(&pair, j);
            if (pair)
                PyList_Append(pairs, pair);
        }

        Py_XDECREF(pair);
        i++;
    }

    /*
     * now we have a list of "abc=def" string (pairs), let's split 
     * them all by '=' and put them in a dictionary.
     */
    
    dict = PyDict_New();
    if (dict == NULL)
        return NULL;

    /* PYTHON 2.5: 'PyList_Size' uses Py_ssize_t for input parameters */ 
    lsize = PyList_Size(pairs);
    n = 0;

    while (n < lsize) {

        PyObject *pair, *key, *val;
        char *cpair, *ckey, *cval;
        int k, v;

        pair = PyList_GET_ITEM(pairs, n);
        cpair = PyString_AS_STRING(pair);

        len = strlen(cpair);
        /* PYTHON 2.5: 'PyString_FromStringAndSize' uses Py_ssize_t for input parameters */ 
        key = PyString_FromStringAndSize(NULL, len);
        if (key == NULL) 
            return NULL;
        /* PYTHON 2.5: 'PyString_FromStringAndSize' uses Py_ssize_t for input parameters */ 
        val = PyString_FromStringAndSize(NULL, len);
        if (val == NULL) 
            return NULL;

        ckey = PyString_AS_STRING(key);
        cval = PyString_AS_STRING(val);

        i = 0;
        k = 0;
        v = 0;
        while (i < len) {
            if (cpair[i] != '=') {
                ckey[k] = cpair[i];
                k++;
                i++;
            }
            else {
                i++;      /* skip '=' */
                while (i < len) {
                    cval[v] = cpair[i];
                    v++;
                    i++;
                }
            }
        }

        ckey[k] = '\0';
        cval[v] = '\0';

        if (keep_blank_values || (v > 0)) {

            ap_unescape_url(ckey);
            ap_unescape_url(cval);

            /* PYTHON 2.5: '_PyString_Resize' uses Py_ssize_t for input parameters */ 
            _PyString_Resize(&key, strlen(ckey));
            /* PYTHON 2.5: '_PyString_Resize' uses Py_ssize_t for input parameters */ 
            _PyString_Resize(&val, strlen(cval));

            if (key && val) {

                ckey = PyString_AS_STRING(key);
                cval = PyString_AS_STRING(val);
        
                if (PyMapping_HasKeyString(dict, ckey)) {
                    PyObject *list;
                    list = PyDict_GetItem(dict, key);
                    PyList_Append(list, val);
                    /* PyDict_GetItem is a borrowed ref, no decref */
                }
                else {
                    PyObject *list;
                    list = Py_BuildValue("[O]", val);
                    PyDict_SetItem(dict, key, list);
                    Py_DECREF(list);
                }
            }
        }

        Py_XDECREF(key);
        Py_XDECREF(val);

        n++;
    }

    Py_DECREF(pairs);
    return dict;
}
static PyObject *Scopeable__getattr__(PyObject *self, PyObject *args) {
  char *attrname;
  PyObject *val=NULL, *inDict, *masher;
  if (!PyArg_ParseTuple(args, "Os", &self, &attrname)) {
    return NULL;
  }

  inDict=((PyInstanceObject *)self)->in_dict;
  masher=PyMapping_GetItemString(inDict, MASH);

  if (PyObject_IsTrue(masher) 
      && PyMapping_HasKeyString(masher, attrname)) {
    val=PyMapping_GetItemString(masher, attrname);
  } 
  else {
    PyObject *dictList;
    int len, i;

    dictList=PyMapping_GetItemString(inDict, DICTLIST);    
    len=PyList_Size(dictList);

    for (i=0;i<len;i++) {
      PyObject *d=PyList_GetItem(dictList, i);
      if (PyMapping_HasKeyString(d, attrname)) {
	val=PyMapping_GetItemString(d, attrname);
	break;
      }
    }
    Py_DECREF(dictList);
  }  

  if (val==NULL) {
    /* check for special attribute "__all__" */
    char *allattr="__all__";
    if (!strncmp(attrname, allattr, strlen(allattr))) {
      PyObject *mashed, *keys, *newargs;
      newargs=PyTuple_New(1);

      PyTuple_SetItem(newargs, 0, self);

      REFCNT("self", self);
      mashed=Scopeable_mash(NULL, newargs);
      keys=PyMapping_Keys(mashed);
      REFCNT("keys", keys);
      Py_DECREF(mashed);
      val=keys;
    } else {
      PyErr_SetString(PyExc_AttributeError, attrname);
    }
  }

  Py_DECREF(masher);
  return val;
}
Exemple #3
0
static gboolean
py_dict_get_int (PyObject   *py_dict,
                 const char *key,
                 int        *val)
{
    PyObject *py_val;
    long x;

    g_return_val_if_fail (py_dict != NULL, FALSE);
    g_return_val_if_fail (key && *key, FALSE);
    g_return_val_if_fail (val != NULL, FALSE);

    if (! PyMapping_HasKeyString (py_dict, (char *) key))
        return FALSE;

    py_val = PyMapping_GetItemString (py_dict, (char *) key);
    if (py_val == NULL || py_val == Py_None)
        return FALSE;

    if (! PyInt_Check (py_val)) {
        Py_DECREF (py_val);
        g_warning ("'%s' exists but is not an integer!", key);
        return FALSE;
    }

    x = PyInt_AsLong (py_val);
    *val = x;

    Py_DECREF (py_val);
    
    return TRUE;
}
Exemple #4
0
    KValueRef KPythonDict::Get(const char *name)
    {
        PyLockGIL lock;

        if (PyMapping_HasKeyString(this->object, (char*) name) == 0)
            return Value::Undefined;

        PyObject* item = PyMapping_GetItemString(this->object, (char*) name);
        if (item == 0 && PyErr_Occurred())
        {
            THROW_PYTHON_EXCEPTION;
        }

        try
        {
            KValueRef value = PythonUtils::ToKrollValue(item);
            Py_DECREF(item);
            return value;
        }
        catch (...)
        {
            Py_DECREF(item);
            throw;
        }
    }
PyObject * AerospikeGeospatial_DoDumps(PyObject *geo_data, as_error *err)
{
    PyObject *initresult = NULL;

    PyObject* sysmodules = PyImport_GetModuleDict();
    PyObject* json_module = NULL;
	if (PyMapping_HasKeyString(sysmodules, "json")) {
        json_module = PyMapping_GetItemString(sysmodules, "json");
	} else {
	    json_module = PyImport_ImportModule("json");
    }

	if (!json_module) {
        /* insert error handling here! and exit this function */
		as_error_update(err, AEROSPIKE_ERR_CLIENT, "Unable to load json module");
	} else {
        PyObject *py_funcname = PyString_FromString("dumps");
        Py_INCREF(json_module);
        initresult = PyObject_CallMethodObjArgs(json_module, py_funcname, geo_data, NULL);
        Py_DECREF(json_module);
        Py_DECREF(py_funcname);
    }

    return initresult;
}
Exemple #6
0
static gboolean
py_dict_get_string (PyObject   *py_dict,
                    const char *key,
                    char      **val)
{
    PyObject *py_val;
    char *x;

    g_return_val_if_fail (py_dict != NULL, FALSE);
    g_return_val_if_fail (key && *key, FALSE);
    g_return_val_if_fail (val != NULL, FALSE);

    if (! PyMapping_HasKeyString (py_dict, (char *) key))
        return FALSE;

    py_val = PyMapping_GetItemString (py_dict, (char *) key);
    if (py_val == NULL || py_val == Py_None)
        return FALSE;

    if (! PyString_Check (py_val)) {
        Py_DECREF (py_val);
        g_warning ("'%s' exists but is not a string!", key);
        return FALSE;
    }

    x = PyString_AsString (py_val);
    *val = g_strdup (x);

    Py_DECREF (py_val);
    
    return TRUE;
}
Exemple #7
0
static gboolean
py_dict_get_double (PyObject   *py_dict,
                    const char *key,
                    double     *val)
{
    PyObject *py_val;
    double x;

    g_return_val_if_fail (py_dict != NULL, FALSE);
    g_return_val_if_fail (key && *key, FALSE);
    g_return_val_if_fail (val != NULL, FALSE);

    if (! PyMapping_HasKeyString (py_dict, (char *) key))
        return FALSE;

    py_val = PyMapping_GetItemString (py_dict, (char *) key);
    if (py_val == NULL || py_val == Py_None)
        return FALSE;

    if (! PyFloat_Check (py_val)) {
        Py_DECREF (py_val);
        g_warning ("'%s' exists but is not a float!", key);
        return FALSE;
    }

    x = PyFloat_AsDouble (py_val);
    *val = x;

    Py_DECREF (py_val);
    
    return TRUE;
}
Exemple #8
0
int
ColMap_get(ColMap* self, char *colname)
{
    PyObject* val = NULL;
    if(!PyMapping_HasKeyString(self->map, colname)){
        return -1;
    }
    val = PyMapping_GetItemString(self->map, colname);
    if(val==NULL)
        return -1;

    return (int)PyInt_AsLong(val);
}
Exemple #9
0
/* Return:
 *  0 - Item not in dictionary
 *  -1 - Invalid data type for key in dictionary
 *  1 - Success
 */
int
get_pydict_float_value(PyObject* pdict, char* key, double* pnum)
{
    int cc = 1;
    PyObject* dv;
    if (!PyMapping_HasKeyString(pdict, key))
        return 0;
    dv = PyMapping_GetItemString(pdict, key);
    if (!dv)
        return 0;   /* shouldn't happen */
    cc = get_python_float_value(dv, pnum);
    Py_DECREF(dv);
    return cc;
}
Exemple #10
0
/* Return:
 *  0 - Item not in dictionary
 *  -1 - Invalid data type for key in dictionary
 *  1 - Success
 */
int
get_pydict_int_value(PyObject* pdict, char* key, int* pint)
{
    PyObject* dv;
    int cc = 1;
    if (!PyMapping_HasKeyString(pdict, key))
        return 0;
    dv = PyMapping_GetItemString(pdict, key);
    if (!dv)
        return 0;   /* shouldn't happen */
    cc = get_python_int_value(dv, pint);
    Py_DECREF(dv);
    return cc;
}
Exemple #11
0
/* Get a string value from a python dictionary
 * Return:
 *  0 - Item not in dictionary
 *  -1 - Invalid data type for key in dictionary
 *  1 - Success
 */
int
get_pydict_string_value(PyObject* pdict, char* key, char* bfr, int len)
{
    PyObject* dv;
    int cc = 1;
    if (!PyMapping_HasKeyString(pdict, key))
        return 0;   /* Key not in dictionary */
    dv = PyMapping_GetItemString(pdict, key);
    if (!dv)
        return 0;   /* shouldn't happen */
    cc = get_python_string_value(dv, bfr, len);
    Py_DECREF(dv);
    return cc;
}
Exemple #12
0
/* Return:
 *  0 - Item not in dictionary
 *  -1 - Invalid data type for key in dictionary
 *  1 - Success
 */
int
get_pydict_callable_value(PyObject* pdict, char* key, PyObject** pobj)
{
    PyObject* dv;
    *pobj = NULL;
    if (!PyMapping_HasKeyString(pdict, key))
        return 0;
    dv = PyMapping_GetItemString(pdict, key);
    if (!dv)
        return 0;   /* shouldn't happen */
    if (!PyCallable_Check(dv))
    {
        Py_DECREF(dv);
        return -1;
    }
    *pobj = dv;
    return 1;
}
Exemple #13
0
static long _adbobj_have_possible_break(AdbObject *self, PyFrameObject *frame)
{
    PyObject *filename;
    PyObject *tuple;
    int haveFileBP;

#ifdef DEBUG_PRINT
    fprintf(stderr, "_adbobj_have_possible_break...\n");
#endif
    if (PyDict_Size(__adb_breakpointList) < 1) {
        // no breakpoints, no possible break
        return 0;
    }
    
    if (PyMapping_HasKey(__adb_canonicCache, frame->f_code->co_filename)==0) {
        // filename has not been mapped, so force a call to effective
        return 1;
    }

    filename = PyDict_GetItem(__adb_canonicCache, frame->f_code->co_filename);
    if (PyMapping_HasKey(__adb_breakpointFileList, filename)==1) {
        // we have breakpoints for this file, do we have one for this line
        // or a file global breakpoint?

        tuple = Py_BuildValue("(Oi)", filename, frame->f_lineno);
        haveFileBP = PyDict_GetItem(__adb_breakpointList, tuple) != NULL;
        Py_DECREF(tuple);
        if (haveFileBP) {
            return 1;
        }

        // check for file global breakpoints
        tuple = Py_BuildValue("(Oi)", filename, 0);
        haveFileBP = PyDict_GetItem(__adb_breakpointList, tuple) != NULL;
        Py_DECREF(tuple);
        if (haveFileBP) {
            return 1;
        }
    }
    // check for global breakpoints
    return PyMapping_HasKeyString(__adb_breakpointFileList, "");
}
Exemple #14
0
Fichier : x11.c Projet : clones/kaa
int
x11_get_visual_info(Xine_PyObject *xine, PyObject *kwargs, void **visual_return,
                    driver_info_common **driver_info_return)
{
    x11_visual_t vis;
    x11_vo_user_data *user_data;
    PyObject *window, *frame_output_callback, *dest_size_callback, *display_str;
    Display *display = NULL;

    if (PyMapping_HasKeyString(kwargs, "window")) {
        window = PyDict_GetItemString(kwargs, "window");
        if (!x11window_object_decompose(window, &vis.d, (Display **)&vis.display)) {
            PyErr_Format(xine_error, "Error in window parameter.");
            return 0;
        }
    } else if (PyMapping_HasKeyString(kwargs, "wid")) {
        window = PyDict_GetItemString(kwargs, "wid");
        vis.d = PyLong_AsUnsignedLong(window);
        display_str = PyDict_GetItemString(kwargs, "display");
        if (display_str)
            display = XOpenDisplay(PyString_AsString(display_str));
        else
            display = XOpenDisplay(NULL);

        vis.display = display;
    } else {
        PyErr_Format(PyExc_ValueError, "Missing window or wid parameter.");
        return 0;
    }


    frame_output_callback = PyDict_GetItemString(kwargs, "frame_output_cb");
    dest_size_callback = PyDict_GetItemString(kwargs, "dest_size_cb");
    if (!frame_output_callback && !dest_size_callback) {
        PyErr_Format(xine_error, "Must specify frame_output_cb or dest_size_cb");
        return 0;
    }


    user_data = malloc(sizeof(x11_vo_user_data));
    user_data->frame_output_callback = frame_output_callback;
    user_data->dest_size_callback = dest_size_callback;
    user_data->display = vis.display;
    user_data->window_pyobject = window;
    user_data->common.dealloc_cb = x11_driver_dealloc;
    user_data->close_display_needed = display != NULL;

    Py_INCREF(window);
    if (frame_output_callback)
        Py_INCREF(frame_output_callback);
    if (dest_size_callback)
        Py_INCREF(dest_size_callback);

    vis.screen = DefaultScreen(vis.display);
    vis.user_data = user_data;
    vis.frame_output_cb = x11_frame_output_cb;
    vis.dest_size_cb = x11_dest_size_cb;

    *visual_return = malloc(sizeof(vis));
    memcpy(*visual_return, &vis, sizeof(vis));
    *driver_info_return = (driver_info_common *)user_data;
    return 1;
}
/*
 * Converts an LDAP message into a Python structure.
 *
 * On success, returns a list of dictionaries.
 * On failure, returns NULL, and sets an error.
 *
 * The message m is always freed, regardless of return value.
 */
PyObject *
LDAPmessage_to_python(LDAP *ld, LDAPMessage *m)
{
    /* we convert an LDAP message into a python structure.
     * It is always a list of dictionaries.
     * We always free m.
     */

    PyObject* result;
    LDAPMessage* entry;

    result = PyList_New(0);
    if (result == NULL) {
        ldap_msgfree( m );
        return NULL;
    }

    for(entry = ldap_first_entry(ld,m);
            entry != NULL;
            entry = ldap_next_entry(ld,entry))
    {
        char *dn;
        char *attr;
        BerElement *ber = NULL;
        PyObject* entrytuple;
        PyObject* attrdict;

        dn = ldap_get_dn( ld, entry );
        if (dn == NULL)  {
            Py_DECREF(result);
            ldap_msgfree( m );
            return LDAPerror( ld, "ldap_get_dn" );
        }

        attrdict = PyDict_New();
        if (attrdict == NULL) {
            Py_DECREF(result);
            ldap_msgfree( m );
            ldap_memfree(dn);
            return NULL;
        }

        /* Fill attrdict with lists */
        for( attr = ldap_first_attribute( ld, entry, &ber );
                attr != NULL;
                attr = ldap_next_attribute( ld, entry, ber )
           ) {
            PyObject* valuelist;
            struct berval ** bvals =
                ldap_get_values_len( ld, entry, attr );

            /* Find which list to append to */
            if ( PyMapping_HasKeyString( attrdict, attr ) ) {
                valuelist = PyMapping_GetItemString( attrdict, attr );
            } else {
                valuelist = PyList_New(0);
                if (valuelist != NULL && PyMapping_SetItemString(attrdict,
                        attr, valuelist) == -1) {
                    Py_DECREF(valuelist);
                    valuelist = NULL;	/* catch error later */
                }
            }

            if (valuelist == NULL) {
                Py_DECREF(attrdict);
                Py_DECREF(result);
                if (ber != NULL)
                    ber_free(ber, 0);
                ldap_msgfree( m );
                ldap_memfree(attr);
                ldap_memfree(dn);
                return NULL;
            }

            if (bvals != NULL) {
                Py_ssize_t i;
                for (i=0; bvals[i]; i++) {
                    PyObject *valuestr;

                    valuestr = LDAPberval_to_object(bvals[i]);
                    if (PyList_Append( valuelist, valuestr ) == -1) {
                        Py_DECREF(attrdict);
                        Py_DECREF(result);
                        Py_DECREF(valuestr);
                        Py_DECREF(valuelist);
                        if (ber != NULL)
                            ber_free(ber, 0);
                        ldap_msgfree( m );
                        ldap_memfree(attr);
                        ldap_memfree(dn);
                        return NULL;
                    }
                    Py_DECREF(valuestr);
                }
                ldap_value_free_len(bvals);
            }
            Py_DECREF( valuelist );
            ldap_memfree(attr);
        }

        entrytuple = Py_BuildValue("(sO)", dn, attrdict);
        ldap_memfree(dn);
        Py_DECREF(attrdict);
        PyList_Append(result, entrytuple);
        Py_DECREF(entrytuple);
        if (ber != NULL)
            ber_free(ber, 0);
    }
    for(entry = ldap_first_reference(ld,m);
            entry != NULL;
            entry = ldap_next_reference(ld,entry))
    {
        char **refs = NULL;
        PyObject* entrytuple;
        PyObject* reflist = PyList_New(0);

        if (reflist == NULL)  {
            Py_DECREF(result);
            ldap_msgfree( m );
            return NULL;
        }
        if (ldap_parse_reference(ld, entry, &refs, NULL, 0) != LDAP_SUCCESS) {
            Py_DECREF(result);
            ldap_msgfree( m );
            return LDAPerror( ld, "ldap_parse_reference" );
        }
        if (refs) {
            Py_ssize_t i;
            for (i=0; refs[i] != NULL; i++) {
                PyObject *refstr = PyString_FromString(refs[i]);
                PyList_Append(reflist, refstr);
                Py_DECREF(refstr);
            }
            ber_memvfree( (void **) refs );
        }
        entrytuple = Py_BuildValue("(sO)", NULL, reflist);
        Py_DECREF(reflist);
        PyList_Append(result, entrytuple);
        Py_DECREF(entrytuple);
    }
    ldap_msgfree( m );
    return result;
}
Exemple #16
0
void
token_filter_init_from_py_dict (TokenFilter *filter,
                                PyObject    *py_dict)
{
    int x;

    g_return_if_fail (filter != NULL);
    
    token_filter_init (filter);

    if (py_dict == NULL)
        return;

    if (py_dict_get_int (py_dict, "break_preference", &x))
        filter->break_preference = (FilterResults) x;
    
    if (py_dict_get_int (py_dict, "punctuation_preference", &x))
        filter->punctuation_preference = (FilterResults) x;

    py_dict_get_int (py_dict, "min_syllables", &filter->min_syllables);

    py_dict_get_int (py_dict, "max_syllables", &filter->max_syllables);

    py_dict_get_string (py_dict, "meter_left", &filter->meter_left);

    py_dict_get_string (py_dict, "meter_right", &filter->meter_right);

    py_dict_get_double (py_dict, "metric_error_lower_threshold",
                        &filter->metric_error_lower_threshold);

    py_dict_get_double (py_dict, "metric_error_upper_threshold",
                        &filter->metric_error_upper_threshold);

    if (PyMapping_HasKeyString (py_dict, "rhymes_with")) {
        PyObject *py_val = PyMapping_GetItemString (py_dict, "rhymes_with");
        if (py_val != Py_None) {
            if (py_token_check (py_val)) {
                filter->rhymes_with = token_from_py (py_val);
            } else if (PyString_Check (py_val)) {
                filter->rhymes_with = token_lookup (PyString_AsString (py_val));
            } else {
                g_warning ("Unknown type for 'rhymes_with'");
            }
        }
        Py_DECREF (py_val);
    }

    if (py_dict_get_int (py_dict, "rhyme_type_lower_threshold", &x))
        filter->rhyme_type_lower_threshold = (RhymeType) x;

    if (py_dict_get_int (py_dict, "rhyme_type_upper_threshold", &x))
        filter->rhyme_type_upper_threshold = (RhymeType) x;

    if (py_dict_get_int (py_dict, "leading_preference", &x))
        filter->leading_preference = (FilterResults) x;

    if (py_dict_get_int (py_dict, "trailing_preference", &x))
        filter->trailing_preference = (FilterResults) x;

    if (py_dict_get_int (py_dict, "has_rhyme_threshold", &x))
        filter->has_rhyme_threshold = x;
    
    py_dict_get_double (py_dict, "rhyme_p_threshold", &filter->rhyme_p_threshold);

    token_filter_optimize (filter);
}
Exemple #17
0
static int python_stat_helper(PyObject *pRet, SMB_STRUCT_STAT *st)
{
	PyObject *pValue;

#define VFS_PY_STAT_VALUE(_name, _member, _default) \
	if ((pValue = PyMapping_GetItemString(pRet, _name))) { \
		st-> _member = PyInt_AsUnsignedLongLongMask(pValue); \
		Py_DECREF(pValue); \
	} else { \
		st-> _member = _default; \
	}

#define VFS_PY_STAT_TIMESPEC_VALUE(_name, _member) \
	do { \
		VFS_PY_STAT_VALUE(_name, _member .tv_sec, 1); \
		st-> _member .tv_nsec = 0; \
	} while(0);

#define VFS_PY_STAT_LONG(_name, _value) \
	do { \
		v = 0; \
		if ((pValue = PyMapping_GetItemString(pRet, _name))) { \
			_value = PyInt_AsUnsignedLongLongMask(pValue); \
			Py_DECREF(pValue); \
		} \
	} while(0);

	VFS_PY_STAT_VALUE("st_dev", st_ex_dev, 1);
	VFS_PY_STAT_VALUE("st_ino", st_ex_ino, 1);
	VFS_PY_STAT_VALUE("st_nlink", st_ex_nlink, 1);
	VFS_PY_STAT_VALUE("st_uid", st_ex_uid, 0);
	VFS_PY_STAT_VALUE("st_gid", st_ex_gid, 0);
	VFS_PY_STAT_VALUE("st_rdev", st_ex_gid, 1);
	VFS_PY_STAT_VALUE("st_size", st_ex_size, 0);
	VFS_PY_STAT_VALUE("st_blksize", st_ex_blksize, 512);
	VFS_PY_STAT_VALUE("st_mode", st_ex_mode, 0);

	if (PyMapping_HasKeyString(pRet, "st_blocks")) {
		VFS_PY_STAT_VALUE("st_blocks", st_ex_blocks, 0);
	} else {
		st->st_ex_blocks = st->st_ex_size / 512;
		if (st->st_ex_size % 512) st->st_ex_blocks++;
	}

	VFS_PY_STAT_TIMESPEC_VALUE("st_atime", st_ex_atime);
	VFS_PY_STAT_TIMESPEC_VALUE("st_mtime", st_ex_mtime);
	VFS_PY_STAT_TIMESPEC_VALUE("st_ctime", st_ex_ctime);
	if (PyMapping_HasKeyString(pRet, "st_btime")) {
		VFS_PY_STAT_TIMESPEC_VALUE("st_btime", st_ex_btime);
	} else {
		st->st_ex_btime.tv_sec = st->st_ex_ctime.tv_sec;
		st->st_ex_btime.tv_nsec = 0;
	}

	st->st_ex_flags = 0;
	st->st_ex_mask = 0;
	st->vfs_private = 0;
	st->st_ex_calculated_birthtime = 0;

	Py_DECREF(pRet);
	return 0;
}
/*
 *******************************************************************************************************
 * Checks serializer_policy.
 * Serializes Py_Object (value) into as_bytes using serialization logic
 * based on serializer_policy.
 *
 * @param serializer_policy         The serializer_policy to be used to handle
 *                                  the serialization.
 * @param bytes                     The as_bytes to be set.
 * @param value                     The value to be serialized.
 * @param error_p                   The as_error to be populated by the function
 *                                  with encountered error if any.
 *******************************************************************************************************
 */
extern PyObject * serialize_based_on_serializer_policy(AerospikeClient * self,
        int32_t serializer_policy,
		as_bytes **bytes,
		PyObject *value,
		as_error *error_p)
{
    uint8_t use_client_serializer = true;
	PyObject* initresult = NULL;

    if (self->is_client_put_serializer) {
        if (serializer_policy == SERIALIZER_USER) {
            if (!self->user_serializer_call_info.callback) {
                use_client_serializer = false;
            }
        }
    } else if (self->user_serializer_call_info.callback) {
        serializer_policy = SERIALIZER_USER;
    }

	switch(serializer_policy) {
		case SERIALIZER_NONE:
			as_error_update(error_p, AEROSPIKE_ERR_PARAM,
					"Cannot serialize: SERIALIZER_NONE selected");
			goto CLEANUP;
		case SERIALIZER_PYTHON:
			{
				/*
				 * Serialize bytearray as is and store them into database with
				 * type AS_BYTES_BLOB, unlike other values in case of 
				 * SERIALIZER_PYTHON.
				 * This is a special case.
				 * Refer: AER-3589 for more details.
				 */
				if (PyByteArray_Check(value)) {
					uint8_t *bytes_array = (uint8_t *) PyByteArray_AsString(value);
					uint32_t bytes_array_len  = (uint32_t)  PyByteArray_Size(value);

					set_as_bytes(bytes, bytes_array, bytes_array_len, AS_BYTES_BLOB, error_p);

				} else {

					/* get the sys.modules dictionary */
					PyObject* sysmodules = PyImport_GetModuleDict();
					PyObject* cpickle_module = NULL;
					if(PyMapping_HasKeyString(sysmodules, "cPickle")) {
						cpickle_module = PyMapping_GetItemString(sysmodules, "cPickle");
					} else {
						cpickle_module = PyImport_ImportModule("cPickle");
					}

					if(!cpickle_module) {
						/* insert error handling here! and exit this function */
						as_error_update(error_p, AEROSPIKE_ERR_CLIENT, "Unable to load cpickle module");
						goto CLEANUP;
					} else {
						PyObject * py_funcname = PyStr_FromString("dumps");

						Py_INCREF(cpickle_module);
						initresult = PyObject_CallMethodObjArgs(cpickle_module,
								py_funcname, value, NULL);
						Py_DECREF(cpickle_module);
						Py_DECREF(py_funcname);

						if(!initresult) {
							/* more error handling &c */
							as_error_update(error_p, AEROSPIKE_ERR_CLIENT, "Unable to call dumps function");
							goto CLEANUP;
						} else {
							Py_INCREF(initresult);
							char *return_value = PyStr_AsString(initresult);
							Py_ssize_t len = PyBytes_GET_SIZE(initresult);
                            set_as_bytes(bytes, (uint8_t *) return_value,
									len, AS_BYTES_PYTHON, error_p);
							Py_DECREF(initresult);
						}
					}
					Py_XDECREF(cpickle_module);
				}
			}
			break;
		case SERIALIZER_JSON:
			/*
			 *   TODO:
			 *     Handle JSON serialization after support for AS_BYTES_JSON
			 *     is added in aerospike-client-c
			 */
			as_error_update(error_p, AEROSPIKE_ERR,
					"Unable to serialize using standard json serializer");
			goto CLEANUP;

		case SERIALIZER_USER:
            if (use_client_serializer) {
                execute_user_callback(&self->user_serializer_call_info, bytes, &value, true, error_p);
				if (AEROSPIKE_OK != (error_p->code)) {
					goto CLEANUP;
				}
            } else {
			    if (is_user_serializer_registered) {
                    execute_user_callback(&user_serializer_call_info, bytes, &value, true, error_p);
				    if (AEROSPIKE_OK != (error_p->code)) {
					    goto CLEANUP;
				    }
			    } else if (self->user_serializer_call_info.callback) {
                    execute_user_callback(&self->user_serializer_call_info, bytes, &value, true, error_p);
				    if (AEROSPIKE_OK != (error_p->code)) {
					    goto CLEANUP;
				    }
                } else {
				    as_error_update(error_p, AEROSPIKE_ERR,
						"No serializer callback registered");
				    goto CLEANUP;
			    }
            }
		    break;
		default:
			as_error_update(error_p, AEROSPIKE_ERR,
					"Unsupported serializer");
			goto CLEANUP;
	}

CLEANUP:

	Py_XDECREF(initresult);
  	if ( error_p->code != AEROSPIKE_OK ) {
		PyObject * py_err = NULL;
		error_to_pyobject(error_p, &py_err);
		PyObject *exception_type = raise_exception(error_p);
		PyErr_SetObject(exception_type, py_err);
		Py_DECREF(py_err);
		return NULL;
	}

	return PyLong_FromLong(0);
}
/*
 *******************************************************************************************************
 * Checks as_bytes->type.
 * Deserializes as_bytes into Py_Object (retval) using deserialization logic
 * based on as_bytes->type.
 *
 * @param bytes                 The as_bytes to be deserialized.
 * @param retval                The return zval to be populated with the
 *                              deserialized value of the input as_bytes.
 * @param error_p               The as_error to be populated by the function
 *                              with encountered error if any.
 *******************************************************************************************************
 */
extern PyObject * deserialize_based_on_as_bytes_type(AerospikeClient * self,
        as_bytes  *bytes,
		PyObject  **retval,
		as_error  *error_p)
{
	switch(as_bytes_get_type(bytes)) {
		case AS_BYTES_PYTHON: {
								  PyObject* sysmodules = PyImport_GetModuleDict();
								  PyObject* cpickle_module = NULL;
								  if(PyMapping_HasKeyString(sysmodules, "cPickle")) {
									  cpickle_module = PyMapping_GetItemString(sysmodules, "cPickle");
								  } else {
									  cpickle_module = PyImport_ImportModule("cPickle");
								  }

								  PyObject* initresult = NULL;
								  if(!cpickle_module) {
									  /* insert error handling here! and exit this function */
									  as_error_update(error_p, AEROSPIKE_ERR_CLIENT, "Unable to load cpickle module");
									  goto CLEANUP;
								  } else {
									  char*       bytes_val_p = (char*)bytes->value;
									  PyObject *py_value = PyStr_FromStringAndSize(bytes_val_p, as_bytes_size(bytes));
									  PyObject *py_funcname = PyStr_FromString("loads");

									  Py_INCREF(cpickle_module);
									  initresult = PyObject_CallMethodObjArgs(cpickle_module, py_funcname, py_value, NULL);
									  Py_DECREF(cpickle_module);
									  Py_DECREF(py_funcname);
									  Py_DECREF(py_value);
									  if(!initresult) {
										  /* more error handling &c */
										  as_error_update(error_p, AEROSPIKE_ERR_CLIENT, "Unable to call loads function");
										  goto CLEANUP;
									  } else {
										  *retval = initresult;
									  }
								  }
								  Py_XDECREF(cpickle_module);
							  }
							  break;
		case AS_BYTES_BLOB: {
                                if (self->user_deserializer_call_info.callback) {
						            execute_user_callback(&self->user_deserializer_call_info, &bytes, retval, false, error_p);
									if(AEROSPIKE_OK != (error_p->code)) {
									    uint32_t bval_size = as_bytes_size(bytes);
									    PyObject *py_val = PyByteArray_FromStringAndSize((char *) as_bytes_get(bytes), bval_size);
									    if (!py_val) {
										    as_error_update(error_p, AEROSPIKE_ERR_CLIENT, "Unable to deserialize bytes");
										    goto CLEANUP;
									    }
									    *retval = py_val;
										as_error_update(error_p, AEROSPIKE_OK, NULL);
                                    }
                                } else {
								    if (is_user_deserializer_registered) {
									    execute_user_callback(&user_deserializer_call_info, &bytes, retval, false, error_p);
									    if(AEROSPIKE_OK != (error_p->code)) {
									        uint32_t bval_size = as_bytes_size(bytes);
									        PyObject *py_val = PyByteArray_FromStringAndSize((char *) as_bytes_get(bytes), bval_size);
									        if (!py_val) {
										        as_error_update(error_p, AEROSPIKE_ERR_CLIENT, "Unable to deserialize bytes");
										        goto CLEANUP;
									        }
										    as_error_update(error_p, AEROSPIKE_OK, NULL);
									        *retval = py_val;
									    }
								    } else {
									    uint32_t bval_size = as_bytes_size(bytes);
									    PyObject *py_val = PyByteArray_FromStringAndSize((char *) as_bytes_get(bytes), bval_size);
									    if (!py_val) {
										as_error_update(error_p, AEROSPIKE_ERR_CLIENT, "Unable to deserialize bytes");
										goto CLEANUP;
									    }
									    *retval = py_val;
								    }
							    }
                            }
							break;
        case AS_BYTES_LDT:  {
                                Py_INCREF(Py_None);
                                *retval = Py_None;
                            }
                            break;
		default:

							as_error_update(error_p, AEROSPIKE_ERR,
									"Unable to deserialize bytes");
							goto CLEANUP;
	}

CLEANUP:

  	if ( error_p->code != AEROSPIKE_OK ) {
		PyObject * py_err = NULL;
		error_to_pyobject(error_p, &py_err);
		PyObject *exception_type = raise_exception(error_p);
		PyErr_SetObject(exception_type, py_err);
		Py_DECREF(py_err);
		return NULL;
	}

	return PyLong_FromLong(0);
}
Exemple #20
0
CvArr * PyArray_to_CvArr (PyObject * obj)
{
  // let's try to create a temporary CvMat header that points to the
  // data owned by obj and reflects its memory layout
  
  CvArr * cvarr  = NULL;
  
  void * raw_data = 0;
  long   rows;
  long   cols;
  long   channels;
  long   step;
  long   mat_type     = 7;
  long   element_size = 1;
  
  // infer layout from array interface
  PyObject * interface = PyObject_GetAttrString (obj, "__array_interface__");
  
  
  // the array interface should be a dict
  if (PyMapping_Check (interface))
  {
    if (PyMapping_HasKeyString (interface, (char*)"version") &&
        PyMapping_HasKeyString (interface, (char*)"shape")   &&
        PyMapping_HasKeyString (interface, (char*)"typestr") &&
        PyMapping_HasKeyString (interface, (char*)"data"))
    {
      PyObject * version = PyMapping_GetItemString (interface, (char*)"version");
      PyObject * shape   = PyMapping_GetItemString (interface, (char*)"shape");
      PyObject * typestr = PyMapping_GetItemString (interface, (char*)"typestr");
      PyObject * data    = PyMapping_GetItemString (interface, (char*)"data");
      
      if (!PyInt_Check (version)  ||  PyInt_AsLong (version) != 3)
        PyErr_SetString(PyExc_TypeError, "OpenCV understands version 3 of the __array_interface__ only");
      else
      {
        if (!PyTuple_Check (shape)  ||  PyTuple_Size (shape) < 2  ||  PyTuple_Size (shape) > 3)
          PyErr_SetString(PyExc_TypeError, "arrays must have a shape with 2 or 3 dimensions");
        else
        {
          rows     = PyInt_AsLong (PyTuple_GetItem (shape, 0));
          cols     = PyInt_AsLong (PyTuple_GetItem (shape, 1));
          channels = PyTuple_Size (shape) < 3 ? 1 : PyInt_AsLong (PyTuple_GetItem (shape, 2));
          
          if (rows < 1  ||  cols < 1  ||  channels < 1  ||  channels > 4)
            PyErr_SetString(PyExc_TypeError, "rows and columns must be positive, channels from 1 to 4");
          else
          {
//              fprintf (stderr, "rows: %ld, cols: %ld, channels %ld\n", rows, cols, channels); fflush (stderr);
            
            if (! PyTuple_Check (data)  ||  PyTuple_Size (data) != 2  ||  
                !(PyInt_Check (PyTuple_GetItem (data,0)) || PyLong_Check (PyTuple_GetItem (data,0))) ||
                !(PyBool_Check (PyTuple_GetItem (data,1)) && !PyInt_AsLong (PyTuple_GetItem (data,1))))
              PyErr_SetString (PyExc_TypeError, "arrays must have a pointer to writeable data");
            else
            {
              raw_data = PyLong_AsVoidPtr (PyTuple_GetItem (data,0));
//                fprintf(stderr, "raw_data: %p\n", raw_data); fflush (stderr);
              
              char *      format_str = NULL;
              Py_ssize_t  len        = 0;
              
              if (!PyString_Check (typestr)  ||  PyString_AsStringAndSize (typestr, & format_str, &len) == -1  ||  len !=3)
                PyErr_SetString(PyExc_TypeError, "there is something wrong with the format string");
              else
              {
//                fprintf(stderr, "format: %c %c\n", format_str[1], format_str[2]); fflush (stderr);
              
                if      (format_str[1] == 'u'  &&  format_str[2] == '1')
                {
                  element_size = 1;
                  mat_type     = CV_MAKETYPE(CV_8U, channels);
                }
                else if (format_str[1] == 'i'  &&  format_str[2] == '1')
                {
                  element_size = 1;
                  mat_type     = CV_MAKETYPE(CV_8S, channels);
                }
                else if (format_str[1] == 'u'  &&  format_str[2] == '2')
                {
                  element_size = 2;
                  mat_type     = CV_MAKETYPE(CV_16U, channels);
                }
                else if (format_str[1] == 'i'  &&  format_str[2] == '2')
                {
                  element_size = 2;
                  mat_type     = CV_MAKETYPE(CV_16S, channels);
                }
                else if (format_str[1] == 'i'  &&  format_str[2] == '4')
                {
                  element_size = 4;
                  mat_type     = CV_MAKETYPE(CV_32S, channels);
                }
                else if (format_str[1] == 'f'  &&  format_str[2] == '4')
                {
                  element_size = 4;
                  mat_type     = CV_MAKETYPE(CV_32F, channels);
                }
                else if (format_str[1] == 'f'  &&  format_str[2] == '8')
                {
                  element_size = 8;
                  mat_type     = CV_MAKETYPE(CV_64F, channels);
                }
                else
                {
                  PyErr_SetString(PyExc_TypeError, "unknown or unhandled element format");
                  mat_type     = CV_USRTYPE1;
                }
                
                // handle strides if given
                // TODO: implement stride handling
                step = cols * channels * element_size;
                if (PyMapping_HasKeyString (interface, (char*)"strides"))
                {
                  PyObject * strides = PyMapping_GetItemString (interface, (char*)"strides");
                  
                  if (strides != Py_None)
                  {
                    fprintf(stderr, "we have strides ... not handled!\n"); fflush (stderr);
                    PyErr_SetString(PyExc_TypeError, "arrays with strides not handled yet");
                    mat_type = CV_USRTYPE1; // use this to denote, we've got an error
                  }
                  
                  Py_DECREF (strides);
                }
                
                // create matrix header if everything is okay
                if (mat_type != CV_USRTYPE1)
                {
                  CvMat * temp_matrix = cvCreateMatHeader (rows, cols, mat_type);
                  cvSetData (temp_matrix, raw_data, step);
                  cvarr = temp_matrix;
                  
//                    fprintf(stderr, "step_size: %ld, type: %ld\n", step, mat_type); fflush (stderr);
                }
              }
            }
          }
        }
      }
      
      Py_DECREF (data);
      Py_DECREF (typestr);
      Py_DECREF (shape);
      Py_DECREF (version);
    }
  
  }
  
  Py_DECREF (interface);
  
  return cvarr;
}
Exemple #21
0
static bool
CSAimported ()
{
  return PyMapping_HasKeyString (PyImport_GetModuleDict (), (char*)"csa");
}