* moved more generic code into `common` package
[invirt/packages/invirt-base.git] / files / usr / share / python-support / sipb-xen-base / invirt / config.py
index dab9f20..fad48fe 100644 (file)
@@ -1,4 +1,5 @@
 import json, yaml
+from invirt.common import *
 from os import error, makedirs
 from os.path import dirname, getmtime
 
@@ -8,11 +9,6 @@ default_cache_path = '/var/lib/invirt/invirt.json'
 try:    default_loader = yaml.CSafeLoader
 except: default_loader = yaml.SafeLoader
 
-def wrap(rsrc, func):
-    "Utility to that emulates with Python 2.5's `with closing(rsrc)`."
-    try: return func(rsrc)
-    finally: rsrc.close()
-
 def load(src_path = default_src_path,
          cache_path = default_cache_path,
          force_refresh = False):
@@ -30,12 +26,19 @@ def load(src_path = default_src_path,
         except OSError: do_refresh  = True
         else:           do_refresh  = src_mtime > cache_mtime
 
+    if not do_refresh:
+        # try reading from the cache first
+        try: cfg = wrap(file(cache_path), lambda f: json.read(f.read()))
+        except: do_refresh = True
+
     if do_refresh:
         # reload the source and regenerate the cache
         cfg = wrap(file(src_path), lambda f: yaml.load(f, default_loader))
-        wrap(file(cache_path, 'w'), lambda f: f.write(json.write(cfg)))
-    else:
-        cfg = wrap(file(cache_path), lambda f: json.read(f.read()))
+        try: wrap(file(cache_path, 'w'), lambda f: f.write(json.write(cfg)))
+        except: pass # silent failure
     return cfg
 
+dicts = load()
+structs = dicts2struct(dicts)
+
 # vim:et:sw=4:ts=4