#!/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" else: self.command = 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 == "batch": self._launchBatch() elif self.command == "make": self._launchMake() elif self.command == "publish": self._launchPublish() else: raise ValueError("Command not recognized: '%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(matlab_path = "", \ dct_dir = self.dct_dir, \ verboseLevel = 0) 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 = [""] + self.args 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 = [""] + self.args 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 _launchBatch(self): args = [__file__] + self.args bt = dct.dct_batch.DCTBatch.getInstanceFromArgs(args) bt.execute(self.args) 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(" Usage:") 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\n batch") 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)