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; }
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); }