]> mj.ucw.cz Git - eval.git/commitdiff
Configuration values are now cached
authorMartin Mares <mj@ucw.cz>
Sat, 8 Aug 2009 15:16:44 +0000 (17:16 +0200)
committerMartin Mares <mj@ucw.cz>
Sat, 8 Aug 2009 15:16:44 +0000 (17:16 +0200)
t/moe/config.py

index f2ca64136bc19c7c3e52fd6aaedf68735a4f15cb..2a8443f10db9e515c9ef42a96e686d858eec19ce 100644 (file)
@@ -13,7 +13,7 @@ class MoeConfigEvalErr(Exception):
     pass
 
 class MoeConfig:
-    """Moe configuration file."""
+    """Moe configuration file. Should be immutable once a part of a stack."""
 
     def __init__(self, file=None, name=None):
         self.vars = {}
@@ -116,16 +116,24 @@ class MoeConfigStack:
        else:
            self.stk = []
        self.in_progress = {}
+       self.reset_cache()
+
+    def reset_cache(self):
+       self.cache = {}
 
     def push(self, cfg):
        self.stk.append(cfg)
+       self.reset_cache()
 
     def __getitem__(self, k):
+       if self.cache.has_key(k):
+           return self.cache[k]
         if self.in_progress.has_key(k):
            raise MoeConfigEvalErr, "Definition of $%s is recursive" % k;
        self.in_progress[k] = 1;
         v = self.do_get(k, len(self.stk)-1)
        del self.in_progress[k]
+       self.cache[k] = v
        return v
 
     def do_get(self, k, pos):
@@ -186,3 +194,4 @@ class MoeConfigStack:
            else:
                newstk.append(cfg)
        self.stk = newstk
+       self.reset_cache()