#!/bin/env python # sim -- central dispatch for Sim Factory # # Michael Thomas # Center for Computation & Technology # Louisiana State University # import sys, os, shutil ############################################ ## APP SPECIFIC DEFINES ## # # Usage when (-h, --help) is used, this is the first line showing how to call the app # optionGroups which option groups from etc/options to import. common is always imported. App = "sim" Usage = "usage: %prog [args] command" # import all option groups. optionGroups = ['sim-sync', 'sim-build'] ############################################ ############################################ ## INIT ## if os.path.basename(sys.argv[0]) == App: rp = os.path.realpath(__file__) paths = rp.split(os.sep) paths.pop() global BASE_PATH BASE_PATH = os.sep.join(paths) sys.path.append(BASE_PATH) sys.path.append("%s%s%s" % (BASE_PATH, os.sep, "bin")) from lib import * global known_commands global associated_binaries known_commands = ['sync', 'build', 'manage'] known_binaries = {'sync':'sim-sync', 'build':'sim-build', 'manage':'sim-manage'} # import all of our known binaries for n in known_binaries: __import__(known_binaries[n]) ############################################ def BuildUsageString(): global Usage cmdString = "%s\n\n\nAvailable Commands:\n" % Usage iString = [] for kk in known_commands: binary = known_binaries[kk] ss = " %s\t\t\t%s" % (kk, sys.modules[binary].Purpose) iString.append(ss) cmdString = "%s%s" % (cmdString, "\n".join(iString)) for kk in known_commands: binary = known_binaries[kk] results = sys.modules[binary].GetOptions() if results != None: cmdString = "%s\n\n%s" % (cmdString, "Commands for %s:\n%s\n" % (kk, results)) return cmdString def CommandDispatch(): global OptionsManager global ConfigurationDatabase global SimLib global DefineDatabase global known_binaries global SimEnvironment command = OptionsManager.args.pop(0) # set our command in the environment SimEnvironment.COMMAND = command if command not in known_binaries: print "Error, unknown command %s" % command sys.exit(1) binary = known_binaries[command] module = sys.modules[binary] module.main(SimEnvironment) def main(SimEnvironment): global OptionsManager global ConfigurationDatabase global SimLib global DefineDatabase OptionsManager = SimEnvironment.OptionsManager ConfigurationDatabase = SimEnvironment.ConfigurationDatabase SimLib = SimEnvironment.SimLib DefineDatabase = SimEnvironment.DefineDatabase # a small bit of error checking. if len(OptionsManager.args) == 0: OptionsManager.PrintHelp() sys.exit(0) ############################################ print "sim: manage and submit cactus cactus jobs\n" print "mdb: %s" % SimEnvironment.mdb print "cdb: %s" % SimEnvironment.cdb if SimEnvironment.udb != None: print "udb: %s" % SimEnvironment.udb print CommandDispatch() # only run if you are App if os.path.basename(sys.argv[0]) == App: global SimEnvironment SimEnvironment = simenv.SimEnvironment(BASE_PATH, os.path.realpath(sys.argv[0])) SimEnvironment.initApp(usageString=BuildUsageString(), optionGroups=optionGroups) main(SimEnvironment)