Esempio n. 1
0
static void *createStringObject(const redisReadTask *task, char *str, size_t len) {
	pythonReader *self = (pythonReader*)task->privdata;
    PyObject *obj;

    if (task->type == REDIS_REPLY_ERROR) {
        PyObject *args = Py_BuildValue("(s#)", str, len);
        assert(args != NULL); /* TODO: properly handle OOM etc */
        obj = PyObject_CallObject(self->replyErrorClass, args);
        assert(obj != NULL);
        Py_DECREF(args);
    } else {
        obj = createDecodedString(self, str, len);
    }

    return tryParentize(task, obj);
}
Esempio n. 2
0
static PyObject *replyToPyObject(hirlite_RliteObject *self, rliteReply *reply) {
    if (reply->type == RLITE_REPLY_STATUS || reply->type == RLITE_REPLY_STRING) {
        if (reply->type == RLITE_REPLY_STATUS && reply->len == 2 && memcmp(reply->str, "OK", 2) == 0) {
            Py_INCREF(Py_True);
            return Py_True;
        }
        return createDecodedString(self, reply->str, reply->len);
    }
    if (reply->type == RLITE_REPLY_NIL) {
        Py_INCREF(Py_None);
        return Py_None;
    }
    if (reply->type == RLITE_REPLY_INTEGER) {
        return PyLong_FromLongLong(reply->integer);
    }
    if (reply->type == RLITE_REPLY_ERROR) {
        PyObject *obj;

        PyObject *args = Py_BuildValue("(s#)", reply->str, reply->len);
        assert(args != NULL);
        obj = PyObject_CallObject(HIRLITE_STATE->HiErr_Base, args);
        assert(obj != NULL);
        Py_DECREF(args);
        return obj;
    }
    if (reply->type == RLITE_REPLY_ARRAY) {
        PyObject *obj, *element;
        size_t i;
        obj = PyList_New(reply->elements);
        for (i = 0; i < reply->elements; i++) {
            element = replyToPyObject(self, reply->element[i]);
            PyList_SET_ITEM(obj, i, element);
        }
        return obj;
    }
    return NULL;
}