self._memcache = Client(self.servers, debug=1)
def get(self, key):
+ logging.debug("Querying memcache for: %s" % key)
+
key = "".join((self.key_prefix, key))
return self._memcache.get(key)
key = "".join((self.key_prefix, key))
return self._memcache.delete(key, time=time)
+
+
+class PermanentCache(base.Object):
+ __items = {}
+
+ def has_key(self, key):
+ return self.__items.has_key(key)
+
+ def get(self, key, default=None):
+ return self.__items.get(key, default)
+
+ def set(self, key, val):
+ self.__items[key] = val
+
+ def delete(self, key):
+ if self.__items.has_key(key):
+ del self.__items[key]
#!/usr/bin/python
import base
+import cache
class Settings(base.Object):
- """
- The cache is not available here.
- """
+ def __init__(self, pakfire):
+ base.Object.__init__(self, pakfire)
+
+ # Private cache.
+ self._cache = cache.PermanentCache(self.pakfire)
def query(self, key):
return self.db.get("SELECT * FROM settings WHERE k = %s", key)
- def get(self, key, default=None):
+ def get(self, key, default=None, cacheable=True):
+ if cacheable and self.cache.has_key(key):
+ return self.cache.get(key)
+
result = self.query(key)
if not result:
return default
- return "%s" % result.v
+ result = result.v
+
+ # Put the item into the cache to access it later.
+ if cacheable:
+ self.cache.set(key, result)
+
+ return result
def get_id(self, key):
return self.query(key)["id"]
- def get_int(self, key, default=None):
- value = self.get(key, default)
+ def get_int(self, key, default=None, cacheable=True):
+ value = self.get(key, default, cacheable=cacheable)
if value is None:
return None
return int(value)
- def get_float(self, key, default=None):
- value = self.get(key, default)
+ def get_float(self, key, default=None, cacheable=True):
+ value = self.get(key, default, cacheable=cacheable)
if value is None:
return None