Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
Index: _pylibmcmodule.c =================================================================== --- _pylibmcmodule.c (revision 7071) +++ _pylibmcmodule.c (working copy) @@ -33,6 +33,7 @@ #include "_pylibmcmodule.h" + /* {{{ _pylibmc.client implementation */ /* {{{ Type methods */ static PylibMC_Client *PylibMC_ClientType_new(PyTypeObject *type, @@ -131,12 +132,18 @@ case PYLIBMC_FLAG_PICKLE: retval = _PylibMC_Unpickle(value, size); break; + case PYLIBMC_FLAG_BOOL_TRUE: + retval = Py_True; + break; + case PYLIBMC_FLAG_BOOL_FALSE: + retval = Py_False; + break; case PYLIBMC_FLAG_INTEGER: case PYLIBMC_FLAG_LONG: retval = PyInt_FromString(value, NULL, 10); break; case PYLIBMC_FLAG_NONE: - retval = PyString_FromStringAndSize(value, (Py_ssize_t)size); + retval = PyString_FromStringAndSize(value, (size_t)size); break; default: PyErr_Format(PylibMCExc_MemcachedError, @@ -199,6 +206,12 @@ } else if (PyString_Check(val)) { store_val = val; Py_INCREF(store_val); + } else if (val == Py_True) { + store_flags |= PYLIBMC_FLAG_BOOL_TRUE; + store_val = PyObject_Str(val); + } else if (val == Py_False) { + store_flags |= PYLIBMC_FLAG_BOOL_FALSE; + store_val = PyObject_Str(val); } else if (PyInt_Check(val)) { store_flags |= PYLIBMC_FLAG_INTEGER; store_val = PyObject_Str(val); @@ -345,7 +358,7 @@ char **keys, *prefix = NULL; unsigned int prefix_len = 0; size_t *key_lens; - Py_ssize_t nkeys; + size_t nkeys; memcached_return rc; char curr_key[MEMCACHED_MAX_KEY]; @@ -712,6 +725,9 @@ if (error == MEMCACHED_ERRNO) { PyErr_Format(PylibMCExc_MemcachedError, "system error %d from %s: %s", errno, what, strerror(errno)); + /* The key exists, but it has no value */ + } else if(error == 0) { + return PyString_FromStringAndSize("", 0); } else { PyErr_Format(PylibMCExc_MemcachedError, "error %d from %s: %s", error, what, memcached_strerror(self->mc, error)); Index: pylibmc.py =================================================================== --- pylibmc.py (revision 7071) +++ pylibmc.py (working copy) @@ -64,6 +64,10 @@ addr_tups.append((stype, addr, port)) super(Client, self).__init__(addr_tups) + #Perfomance is generally a lot better with tcp_nodelay + #so set that as a default + self.set_behaviors({'tcp_nodelay': 1}) + def get_behaviors(self): behaviors = super(Client, self).get_behaviors() behaviors["hash"] = hashers_rvs[behaviors["hash"]] Index: setup.py =================================================================== --- setup.py (revision 7071) +++ setup.py (working copy) @@ -60,9 +60,26 @@ to it, as well as implemented behaviors. """ +import os from distutils.core import setup, Extension +BASE_CFLAGS = ['-O3'] #Apply highest optimization +BASE_LDFLAGS = [] + +mac_snow_leopard = os.path.exists('/Developer/SDKs/MacOSX10.6.sdk/') and\ + int(os.uname()[2].split('.')[0]) >= 8 + +if mac_snow_leopard: + #Only compile the 64bit version on Snow Leopard + #libmemcached should also be compiled with make + # CFLAGS="-arch x86_64" + #else one will expereince seg. faults + BASE_LDFLAGS.extend(['-arch', 'x86_64']) + BASE_CFLAGS.extend(['-arch', 'x86_64']) + pylibmc_ext = Extension("_pylibmc", ["_pylibmcmodule.c"], + extra_compile_args=BASE_CFLAGS, + extra_link_args=BASE_LDFLAGS, libraries=["memcached"]) setup(name="pylibmc", version="0.6.1", Index: _pylibmcmodule.h =================================================================== --- _pylibmcmodule.h (revision 7071) +++ _pylibmcmodule.h (working copy) @@ -47,6 +47,8 @@ #define PYLIBMC_FLAG_PICKLE (1 << 0) #define PYLIBMC_FLAG_INTEGER (1 << 1) #define PYLIBMC_FLAG_LONG (1 << 2) +#define PYLIBMC_FLAG_BOOL_TRUE (1 << 3) +#define PYLIBMC_FLAG_BOOL_FALSE (1 << 4) #define PYLIBMC_INC (1 << 0) #define PYLIBMC_DEC (1 << 1)
This paste will be private.
From the Design Piracy series on my blog: