[CalendarServer-changes] [2504] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Tue May 27 07:58:33 PDT 2008
Revision: 2504
http://trac.macosforge.org/projects/calendarserver/changeset/2504
Author: cdaboo at apple.com
Date: 2008-05-27 07:58:26 -0700 (Tue, 27 May 2008)
Log Message:
-----------
Allow memcacher to handle arbitrary python types via an explicit switch to turn on pickling of values.
The default is to just store values with pickle - i.e. string values.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/memcacher.py
CalendarServer/trunk/twistedcaldav/test/test_memcacher.py
Modified: CalendarServer/trunk/twistedcaldav/memcacher.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/memcacher.py 2008-05-26 16:20:13 UTC (rev 2503)
+++ CalendarServer/trunk/twistedcaldav/memcacher.py 2008-05-27 14:58:26 UTC (rev 2504)
@@ -20,6 +20,7 @@
from twistedcaldav.log import LoggingMixIn
from twistedcaldav.memcache import MemCacheProtocol
from twistedcaldav.config import config
+import cPickle
class Memcacher(LoggingMixIn):
_memcacheProtocol = None
@@ -69,8 +70,10 @@
def delete(self, key):
return succeed(True)
- def __init__(self, namespace):
+ def __init__(self, namespace, pickle=False):
self._namespace = namespace
+ self._pickle = pickle
+
self._host = config.Memcached['BindAddress']
self._port = config.Memcached['Port']
@@ -105,7 +108,10 @@
def set(self, key, value):
def _set(proto):
- return proto.set('%s:%s' % (self._namespace, key), value)
+ my_value = value
+ if self._pickle:
+ my_value = cPickle.dumps(value)
+ return proto.set('%s:%s' % (self._namespace, key), my_value)
self.log_debug("Changing Cache Token for %s" % (key,))
d = self._getMemcacheProtocol()
@@ -116,6 +122,8 @@
def _gotit(result):
_ignore_flags, value = result
+ if self._pickle and value is not None:
+ value = cPickle.loads(value)
return value
def _get(proto):
Modified: CalendarServer/trunk/twistedcaldav/test/test_memcacher.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_memcacher.py 2008-05-26 16:20:13 UTC (rev 2503)
+++ CalendarServer/trunk/twistedcaldav/test/test_memcacher.py 2008-05-27 14:58:26 UTC (rev 2504)
@@ -67,3 +67,26 @@
result = yield cacher.get("akey")
self.assertEquals(None, result)
+ @inlineCallbacks
+ def test_all_pickled(self):
+
+ for processType in ("Single", "Combined",):
+ config.processType = processType
+
+ cacher = Memcacher("testing", pickle=True)
+
+ result = yield cacher.set("akey", ["1", "2", "3",])
+ self.assertTrue(result)
+
+ result = yield cacher.get("akey")
+ if isinstance(cacher._memcacheProtocol, Memcacher.nullCacher):
+ self.assertEquals(None, result)
+ else:
+ self.assertEquals(["1", "2", "3",], result)
+
+ result = yield cacher.delete("akey")
+ self.assertTrue(result)
+
+ result = yield cacher.get("akey")
+ self.assertEquals(None, result)
+
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080527/1e9d2d47/attachment.htm
More information about the calendarserver-changes
mailing list