Improve modules hierarchy.
[sface.git] / sface / sficonfig.py
diff --git a/sface/sficonfig.py b/sface/sficonfig.py
new file mode 100644 (file)
index 0000000..595e892
--- /dev/null
@@ -0,0 +1,79 @@
+
+import os
+
+class SfiConfig:
+    defaults = { 'SFI_AUTH' : None,
+                 'SFI_USER' : None,
+                 'SFI_SLICE' : None,
+                 'SFI_REGISTRY' : "http://www.planet-lab.org:12345",
+                 'SFI_AM' : "http://www.planet-lab.org:12346",
+                 'SFI_SM' : "http://www.planet-lab.org:12347",
+                 'SFACE_VERBOSE' : False,
+                 'SFACE_DEBUG' : False,
+                 }
+
+    def __init__(self):
+        self.read_config()
+
+    def read_config(self):
+        filename = os.path.expanduser("~/.sfi/sfi_config")
+        execfile(filename, SfiConfig.__dict__)
+        for (k,v) in SfiConfig.defaults.items():
+            if not hasattr(SfiConfig,k): setattr(SfiConfig,k,v)
+        if SfiConfig.SFACE_VERBOSE:
+            print "After reading config from %s"%filename
+            for (k,v) in SfiConfig.defaults.items():
+                print "%-20s: %r"%(k,getattr(SfiConfig,k))
+
+    def save_config(self):
+        config_keys = SfiConfig.defaults.keys()
+        configfile = os.path.expanduser("~/.sfi/sfi_config")
+        tmpfile = configfile + ".tmp"
+
+        out = open(tmpfile, "w")
+        for line in open(os.path.expanduser("~/.sfi/sfi_config")):
+            try:
+                key, val = line.split('=')
+                key = key.strip()
+                val = val.strip()
+                if key in config_keys:
+                    line = "%s = '%s'\n" % (key, getattr(self, key))
+            except:
+                pass
+            out.write(line)
+        out.close()
+
+        os.unlink(configfile)
+        os.rename(tmpfile, configfile)
+                    
+
+    def getAuthority(self):
+        return SfiConfig.SFI_AUTH
+
+    def getUser(self):
+        return SfiConfig.SFI_USER
+
+    def setUser(self, user):
+        SfiConfig.SFI_USER = user
+
+        # Should probably get authority from user record instead...
+        a = user.split('.')
+        SfiConfig.SFI_AUTH = '.'.join(a[:len(a)-1])
+
+    def getSlice(self):
+        return SfiConfig.SFI_SLICE
+
+    def setSlice(self, slice):
+        SfiConfig.SFI_SLICE = slice
+
+    def registry(self):
+        return SfiConfig.SFI_REGISTRY
+
+    def slicemgr(self):
+        return SfiConfig.SFI_SM
+
+    def aggmgr(self):
+        return SfiConfig.SFI_AM
+
+# configuration singleton
+config = SfiConfig()