faster init on gae and better gae_memcache
This commit is contained in:
2
VERSION
2
VERSION
@@ -1 +1 @@
|
||||
Version 2.1.0 (2012-10-10 15:15:45) dev
|
||||
Version 2.1.0 (2012-10-11 08:27:52) dev
|
||||
|
||||
@@ -12,49 +12,56 @@ cache.ram=cache.disk=MemcacheClient(request)
|
||||
import time
|
||||
from google.appengine.api.memcache import Client
|
||||
|
||||
class MemcacheClient(object):
|
||||
|
||||
class MemcacheClient(Client):
|
||||
client = Client()
|
||||
|
||||
def __init__(self, request):
|
||||
self.request = request
|
||||
Client.__init__(self)
|
||||
|
||||
def __call__(
|
||||
self,
|
||||
key,
|
||||
f,
|
||||
time_expire=300,
|
||||
):
|
||||
):
|
||||
key = '%s/%s' % (self.request.application, key)
|
||||
dt = time_expire
|
||||
value = None
|
||||
obj = self.get(key)
|
||||
obj = self.client.get(key)
|
||||
if obj and (dt == None or obj[0] > time.time() - dt):
|
||||
value = obj[1]
|
||||
elif f is None:
|
||||
if obj:
|
||||
self.delete(key)
|
||||
self.client.delete(key)
|
||||
else:
|
||||
value = f()
|
||||
self.set(key, (time.time(), value))
|
||||
self.client.set(key, (time.time(), value))
|
||||
return value
|
||||
|
||||
def increment(self, key, value=1):
|
||||
key = '%s/%s' % (self.request.application, key)
|
||||
obj = self.get(key)
|
||||
obj = self.client.get(key)
|
||||
if obj:
|
||||
value = obj[1] + value
|
||||
self.set(key, (time.time(), value))
|
||||
self.client.set(key, (time.time(), value))
|
||||
return value
|
||||
|
||||
def clear(self, key = None):
|
||||
if key:
|
||||
key = '%s/%s' % (self.request.application, key)
|
||||
self.delete(key)
|
||||
self.client.delete(key)
|
||||
else:
|
||||
self.flush_all()
|
||||
|
||||
self.client.flush_all()
|
||||
|
||||
def delete(self,*a,**b):
|
||||
return self.client.delete(*a,**b)
|
||||
|
||||
def get(self,*a,**b):
|
||||
return self.client.delete(*a,**b)
|
||||
|
||||
def set(self,*a,**b):
|
||||
return self.client.delete(*a,**b)
|
||||
|
||||
def flush_all(self,*a,**b):
|
||||
return self.client.delete(*a,**b)
|
||||
|
||||
Reference in New Issue
Block a user