from google.appengine.ext import db from datetime import datetime from datetime import timedelta class Lookup(db.Model): value = db.StringProperty(multiline=True) update_date = db.DateTimeProperty(auto_now_add=True) def toJSON(self): #return "{'value':'" + self.value + "'}" return "{'value':'" + self.value + "','update_date':'" + str(self.update_date) + "'}" def create_or_update(keyname, valueTxt): obj = Lookup.get_by_key_name(keyname) if obj == None: obj = Lookup(key_name=keyname,value=valueTxt) else: obj.value = valueTxt obj.update_date = datetime.now() obj.put() def get_value(keyname): obj = Lookup.get_by_key_name(keyname) if obj == None: return None else: return obj.value def get_Lookup(keyname): obj = Lookup.get_by_key_name(keyname) if obj == None: return None else: return "" def get_LookupJSON(keyname): obj = Lookup.get_by_key_name(keyname) if obj == None: return None else: return str(obj.toJSON()) def deleteByKey(keyname): obj = Lookup.get_by_key_name(keyname) if obj != None: obj.delete() #for cron job def expireCacheEntries(): weekago = datetime.now() - timedelta(days=7) query = Lookup.gql("where update_date < :1", weekago) for l in query: l.delete() class CacheService: "http://solidcoding.blogspot.com" def setValue(self, key,value): "keyvalue" db.run_in_transaction(create_or_update,key,value) def getValue(self, key): "key" return db.run_in_transaction(get_value,key) def getLookupAsXml(self, key): "key" return db.run_in_transaction(get_Lookup,key) def getLookupAsJSON(self, key): "key" return db.run_in_transaction(get_LookupJSON,key) def delete(self, key): "key" return db.run_in_transaction(deleteByKey,key) def expire(self): #for cron job. Not allowed to query inside a transaction. Call direct expireCacheEntries()