# simenv -- Provides and builds some convienient Environment stuff # # # # # import os, sys import simopts import libutil import simdb import simlib import simsubs import restartlib class SimEnvironment: def __init__(self, BASE_PATH, callingExecutable): self.BASE_PATH = BASE_PATH self.LIB_PATH = "%s%s%s" % (self.BASE_PATH, os.sep, "lib") self.ETC_PATH = "%s%s%s" % (self.BASE_PATH, os.sep, "etc") self.MDB_PATH = "%s%s%s" % (self.ETC_PATH, os.sep, "mdb") self.SYNTAX_PATH = "%s%s%s" % (self.ETC_PATH, os.sep, "syntax") self.OPTIONS_PATH = "%s%s%s" % (self.ETC_PATH, os.sep, "options") self.CACTUS_PATH = None # a couple of paths that are in the cactus root. self.CONFIGS_PATH = None self.EXE_PATH = None self.EXECUTABLE = callingExecutable self.COMMAND = None self.INTERNALDIRECTORY = "SIMFACTORY" def initApp(self, usageString, optionGroups): self.OptionsManager = simopts.OptionManager(self.OPTIONS_PATH) if optionGroups != None: for og in optionGroups: self.OptionsManager.UseGroup(og) if usageString != None: self.OptionsManager.SetUsage(usageString) self.OptionsManager.Build() self.GetIniFiles() self.LoadConfigurationDatabase() self.DefineDatabase = simsubs.DefineDatabase() self.SimLib = simlib.SimLib(self) self.RestartLib = restartlib.RestartLib(self) self.CACTUS_PATH = self.SimLib.GetCactusPath() self.CONFIGS_PATH = self.SimLib.BuildPath([self.CACTUS_PATH, "configs"]) self.EXE_PATH = self.SimLib.BuildPath([self.CACTUS_PATH, "exe"]) # get our local machine, and our local machine entry. self.LocalMachine = self.SimLib.GetMachineName() self.LocalMachineEntry = self.ConfigurationDatabase.GetMachine(self.LocalMachine) def GetIniFiles(self): ini_files = ['cdb', 'udb'] ini_req = ['cdb'] for ini in ini_files: if self.OptionsManager.HasOption(ini): path = self.OptionsManager.GetOption(ini) if not(libutil.FileExists(path)): self.IniFileError("%s is not readable or does not exist" % path) setattr(self, ini, path) else: path = "%s%s%s.ini" % (self.ETC_PATH, os.sep, ini) if libutil.FileExists(path): setattr(self, ini, path) else: setattr(self, ini, None) if ini in ini_req: self.IniFileError("No %s.ini found in %s, and --%s was not specified" % (ini, self.ETC_PATH, ini)) def LoadConfigurationDatabase(self): self.ConfigurationDatabase = simdb.ConfigurationDatabase(self, mdbDirectory=self.MDB_PATH, udb=self.udb, cdb=self.cdb) self.ConfigurationDatabase.Load() def IniFileError(self, error): print "Error while discoverying ini files: %s" % error sys.exit(1)