Newer
Older
#!/usr/bin/env python
'''
Created on Feb 3, 2013
@author: vigano
'''
import sys
import os
import zUtil_Python as dct
class DCTLauncher(object):
def __init__(self, args):
self.initialized = False
self.dct_dir = os.path.abspath(os.path.dirname(args[0]))
self.confPath = os.path.join(self.dct_dir, "conf.xml")
self.confPath = os.path.abspath(self.confPath)
try:
if len(args) is 1:
print("Defaulting to matlab")
args.append("matlab")
cmd = args[1]
if cmd in ("-h", "--help"):
self.command = "help"
elif cmd in ("matlab", "update", "compile_mex", "compile_matlab", \
"update_conf", "make", "publish"):
self.command = cmd
else:
raise ValueError("Command '%s' not recognized" % cmd)
self.args = args[2:]
self.initialized = True
except ValueError as ex:
dct.dct_io_xml.DCTOutput.printError(ex.args)
def run(self):
if self.command == "help":
self.printHelp()
elif self.command == "matlab":
self._launchMatlab()
elif self.command == "update":
self._launchUpdate()
elif self.command == "compile_mex":
self._launchCompileMex()
elif self.command == "compile_matlab":
self._launchCompileMatlab()
elif self.command == "update_conf":
self._launchUpdateConf()
elif self.command == "make":
self._launchMake()
elif self.command == "publish":
self._launchPublish()
else:
raise ValueError("Not recognized command: %s" % self.command)
def _launchMatlab(self):
from zUtil_Python.dct_compile_matlab_functions import FunctionsBuilder
if os.path.exists(self.confPath) is False:
raise SystemError("File conf.xml not found in DCT directory")
if (len(self.args) is not 0) and self.args[0] in ("-h", "--help"):
print(" Usage:")
print(" # python %s matlab [options]" % os.path.basename(__file__))
print(" Where [options] are the options for matlab")
else:
invoker = dct.dct_matlab_invocation.DCTMatlabInvocation(dct_dir = self.dct_dir, \
extra_args = self.args)
func_builder = FunctionsBuilder.getInstanceFromArgs([], dct_dir = self.dct_dir)
func_builder.generateMfile()
invoker.invoke()
def _launchUpdate(self):
util = dct.dct_utils_git.DCTGit(self.dct_dir)
util.updateRepo()
def _launchCompileMex(self):
from zUtil_Python.dct_compile_mex_functions import MexBuilder
try:
args_compile = [""]
for arg in self.args:
args_compile.append(arg)
mex_builder = MexBuilder.getInstanceFromArgs(args_compile, dct_dir = self.dct_dir)
mex_builder.findMexs()
mex_builder.compileFuncs()
except ValueError as ex:
if (len(ex.args) is not 0) and (ex.args[0] is not ""):
dct.dct_io_xml.DCTOutput.printError(ex.args)
MexBuilder("").printHelp();
except BaseException as ex:
dct.dct_io_xml.DCTOutput.printError(ex.args)
def _launchCompileMatlab(self):
from zUtil_Python.dct_compile_matlab_functions import FunctionsBuilder
try:
args_compile = [""]
for arg in self.args:
args_compile.append(arg)
func_builder = FunctionsBuilder.getInstanceFromArgs(args_compile, dct_dir = self.dct_dir)
if func_builder.do_generate is True:
func_builder.generateMfile()
if func_builder.do_compile is True:
func_builder.compileFuncs()
except ValueError as ex:
if (len(ex.args) is not 0) and (ex.args[0] is not ""):
dct.dct_io_xml.DCTOutput.printError(ex.args)
FunctionsBuilder("").printHelp();
def _launchUpdateConf(self):
upd = dct.dct_io_xml.DCTConfUpdater(self.dct_dir)
confexamplefile = os.path.join(self.dct_dir, "zUtil_Conf", "conf.example.xml")
upd.safelyInstallNewFile(confexamplefile, "conf.xml")
def _launchMake(self):
if len(self.args) is 0:
raise ValueError("Not enough arguments")
if self.args[0] == "install_zip":
builder = dct.dct_distrib.DCTMakeInstallBundle()
if len(self.args) >= 2:
builder.run(self.dct_dir, destFile = self.args[1])
else:
builder.run(self.dct_dir)
else:
raise ValueError("Unsupported make option: '%s'" % " ".join(self.args))
def _launchPublish(self):
if len(self.args) is 0:
raise ValueError("Not enough arguments")
if self.args[0] == "install_zip":
utils = dct.dct_utils_git.DCTGit(self.dct_dir)
sf_account = utils.getSourceForgeAccount()
if len(self.args) >= 2:
filename = self.args[1]
else:
filename = "dct-install.zip"
destination = "%s,dct@frs.sourceforge.net:/home/frs/project/dct/%s" \
% (sf_account, os.path.basename(filename))
utils_p = dct.dct_utils_platform.UtilsFactory.getMachineDep()
utils_p.scpFile(filename, destination)
else:
raise ValueError("Unsupported publish option: '%s'" % " ".join(self.args))
def printHelp(self):
launchname = os.path.basename(__file__)
print("\"%s\" launches dct or one of the maintenance routines in the DCT directory: \"%s\"" %
(launchname, self.dct_dir) )
print(" # python %s command [options]" % launchname)
print(" # python %s command -h | --help : to show command's help" % launchname)
print(" # python %s -h | --help : to show this help" % launchname)
print(" Commands:")
print(" matlab\n update\n compile_mex\n compile_matlab\n update_conf")
if __name__ == '__main__':
launcher = DCTLauncher(sys.argv)
if launcher.initialized is False:
launcher.printHelp()
sys.exit(1)
try:
launcher.run()
except SystemError as ex:
dct.dct_io_xml.DCTOutput.printError(ex.args)
print("Try running:\n # python %s update_conf" % __file__)
except ValueError as ex:
dct.dct_io_xml.DCTOutput.printError(ex.args)