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()