Exemple #1
0
static PyObject *
handle_float_tmo(lcb_t instance,
                 int cmd, int mode, PyObject *val, lcb_error_t *err)
{
    lcb_uint32_t cval;

    if (val != NULL) {
        if (PyFloat_Check(val)) {
            double dv = PyFloat_AsDouble(val);
            if (dv < 0) {
                PYCBC_EXC_WRAP(PYCBC_EXC_ARGUMENTS, 0,
                               "Timeout cannot be < 0");
                return NULL;
            }
            cval = dv * 1000000;

        } else {
        cval = pycbc_IntAsL(val);
            if (cval == (lcb_uint32_t)-1 && PyErr_Occurred()) {
                PYCBC_EXCTHROW_ARGS();
                return NULL;
            }
        }
    }
    if ( (*err = lcb_cntl(instance, mode, cmd, &cval)) != LCB_SUCCESS) {
        return NULL;
    }

    return pycbc_IntFromUL(cval);
}
static int handle_replica_options(int *optype,
                                  struct getcmd_vars_st *gv,
                                  PyObject *replica_O)
{

#if LCB_VERSION >= 0x020007
    switch (*optype) {
    case PYCBC_CMD_GET:
        *optype = PYCBC_CMD_GETREPLICA;
        if (gv->u.ttl) {
            PYCBC_EXC_WRAP(PYCBC_EXC_ARGUMENTS,
                           0, "TTL specified along with replica");
            return -1;
        }
        gv->u.replica.strategy = LCB_REPLICA_FIRST;
        return 0;

    case PYCBC_CMD_GETREPLICA:
        gv->u.replica.strategy = LCB_REPLICA_FIRST;
        return 0;

    case PYCBC_CMD_GETREPLICA_INDEX:
        gv->u.replica.strategy = LCB_REPLICA_SELECT;
        if (replica_O == NULL || replica_O == Py_None) {
            PYCBC_EXC_WRAP(PYCBC_EXC_ARGUMENTS,
                           0, "rgetix must have a valid replica index");
            return -1;
        }
        gv->u.replica.index = pycbc_IntAsL(replica_O);
        if (PyErr_Occurred()) {
            return -1;
        }
        return 0;

    case PYCBC_CMD_GETREPLICA_ALL:
        gv->u.replica.strategy = LCB_REPLICA_ALL;
        return 0;

    default:
        PYCBC_EXC_WRAP(PYCBC_EXC_ARGUMENTS, 0,
                       "Replica option not supported for this operation");
        return -1;
    }
#else
    PYCBC_EXC_WRAP(PYCBC_EXC_ARGUMENTS, 0, "Need libcouchbase >= 2.0.7");
    (void)optype;
    (void)gv;
    (void)replica_O;
#endif
    return -1;
}
Exemple #3
0
static PyObject *
handle_intval(lcb_t instance,
              int cmd, int mode, PyObject *val, lcb_error_t *err)
{
    int cval;

    if (val != NULL) {
        cval = pycbc_IntAsL(val);
        if (cval == -1 && PyErr_Occurred()) {
            PYCBC_EXCTHROW_ARGS();
        }
    }

    if ((*err = lcb_cntl(instance, mode, cmd, &cval)) != LCB_SUCCESS) {
        return NULL;
    }

    return pycbc_IntFromL(cval);

}