]> git.ipfire.org Git - pbs.git/commitdiff
Add permanent cache for Settings.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 18 Nov 2012 17:59:10 +0000 (18:59 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 18 Nov 2012 17:59:10 +0000 (18:59 +0100)
backend/base.py
backend/cache.py
backend/settings.py

index 4d8d92541bc7fd7cc06b26efdd0597ca3d046d56..4bffdf8c7bfcb68d196ab2c4cd73a33ae9d46235 100644 (file)
@@ -18,11 +18,17 @@ class Object(object):
                if hasattr(self.pakfire, "settings"):
                        self.settings = self.pakfire.settings
 
+               # Private cache.
+               self._cache = None
+
        @property
        def cache(self):
                """
                        Shortcut to the cache.
                """
+               if self._cache:
+                       return self._cache
+
                return self.pakfire.cache
 
        @property
index 0aac46f47233204770f9b0a51499f67fe728e79b..08e46e9f9e2fb5f22c39b2c7ab984c6bb9663988 100644 (file)
@@ -27,6 +27,8 @@ class Cache(base.Object):
                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)
@@ -41,3 +43,20 @@ class Cache(base.Object):
                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]
index 5a0ad405262a40cf9ab7e391ed9911d3f6251bbd..b617e0d6ec3939a9e6752aecfced0e725fe89692 100644 (file)
@@ -1,35 +1,47 @@
 #!/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