Add support for the binary protocol.

Also removed two behaviors from public exposure as they're better off
controlled by `_pylibmc`. (USE_UDP and BINARY_PROTOCOL.)
This commit is contained in:
lericson 2009-09-21 17:16:43 +02:00
parent 279544a468
commit 16e964e571
3 changed files with 15 additions and 15 deletions

View File

@ -57,20 +57,20 @@ static void PylibMC_ClientType_dealloc(PylibMC_Client *self) {
static int PylibMC_Client_init(PylibMC_Client *self, PyObject *args,
PyObject *kwds) {
PyObject *srv_list, *srv_list_it, *c_srv;
unsigned char set_stype = 0;
PyObject *srvs, *srvs_it, *c_srv;
unsigned char set_stype = 0, bin = 0;
if (!PyArg_ParseTuple(args, "O", &srv_list)) {
static char *kws[] = { "servers", "binary", NULL };
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|b", kws, &srvs, &bin)) {
return -1;
} else {
kwds = NULL;
}
if ((srv_list_it = PyObject_GetIter(srv_list)) == NULL) {
} else if ((srvs_it = PyObject_GetIter(srvs)) == NULL) {
return -1;
}
while ((c_srv = PyIter_Next(srv_list_it)) != NULL) {
memcached_behavior_set(self->mc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, bin);
while ((c_srv = PyIter_Next(srvs_it)) != NULL) {
unsigned char stype;
char *hostname;
unsigned short int port;
@ -137,10 +137,10 @@ it_error:
goto error;
}
Py_DECREF(srv_list_it);
Py_DECREF(srvs_it);
return 0;
error:
Py_DECREF(srv_list_it);
Py_DECREF(srvs_it);
return -1;
}

View File

@ -94,11 +94,9 @@ static PylibMC_Behavior PylibMC_behaviors[] = {
{ MEMCACHED_BEHAVIOR_RETRY_TIMEOUT, "retry_timeout" },
{ MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED, "ketama_weighted" },
{ MEMCACHED_BEHAVIOR_KETAMA_HASH, "ketama_hash" },
{ MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, "binary_protocol" },
{ MEMCACHED_BEHAVIOR_SND_TIMEOUT, "snd_timeout" },
{ MEMCACHED_BEHAVIOR_RCV_TIMEOUT, "rcv_timeout" },
{ MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT, "server_failure_limit" },
{ MEMCACHED_BEHAVIOR_USE_UDP, "udp" },
{ MEMCACHED_BEHAVIOR_IO_MSG_WATERMARK, "_io_msg_watermark" },
{ MEMCACHED_BEHAVIOR_IO_BYTES_WATERMARK, "_io_bytes_watermark" },
{ MEMCACHED_BEHAVIOR_IO_KEY_PREFETCH, "_io_key_prefetch" },

View File

@ -54,12 +54,14 @@ class BehaviorDict(dict):
self.client.set_behaviors(self.copy())
class Client(_pylibmc.client):
def __init__(self, servers, *args, **kwds):
def __init__(self, servers, binary=False):
"""Initialize a memcached client instance.
This connects to the servers in *servers*, which will default to being
TCP servers. If it looks like a filesystem path, a UNIX socket. If
prefixed with `udp:`, a UDP connection.
If *binary* is True, the binary memcached protocol is used.
"""
addr_tups = []
for server in servers:
@ -81,7 +83,7 @@ class Client(_pylibmc.client):
else:
stype = _pylibmc.server_type_tcp
addr_tups.append((stype, addr, port))
super(Client, self).__init__(addr_tups)
super(Client, self).__init__(servers=addr_tups, binary=binary)
def get_behaviors(self):
"""Gets the behaviors from the underlying C client instance.