def __init__(self, targetPackageOrPath, rootPath, verbose=True, debug=False, trace=False, force=False, compress=False, buildOnly=False): """Creates a new instance of CoffeescriptBuilder.""" self.buildOnly = buildOnly self._imports = dict() self._requires = dict() self._includes = dict() self._report = dict() self._warnings = [] self._dependencyReport = dict() self._verbose = verbose self._log = Logger(self, printOut=True) self._trace = trace self._debug = debug self._targets = [] self._force = force self._compress = compress self._rootPath = rootPath if not isinstance(targetPackageOrPath, CoffeescriptDependency): target = CoffeescriptDependency(targetPackageOrPath, rootPath, None) else: target = targetPackageOrPath if target.exists: self._targets.append(target) else: csFiles = CoffeescriptBuilder.getScriptsInPath(target.packagePath) # Look for exec matches first for f in csFiles: testTarget = CoffeescriptDependency(f, rootPath, None) if testTarget.isExec: self._targets.append(testTarget) # Look for lib matches second. Lib matches are tested as a second pass because # constructing all exec files first potentially optimizes the import process for # the libraries. for f in csFiles: testTarget = CoffeescriptDependency(f, rootPath, None) if testTarget.isLib: self._targets.append(testTarget) if len(self._targets) == 0: print('\n\n') self._log.write('No targets exist for: %s. Compilation aborted.' % targetPackageOrPath) print('\n')
def _parseIncludes(self, target, rootTarget=None): """Doc...""" if rootTarget is None: rootTarget = target if not rootTarget.package in self._imports: self._imports[rootTarget.package] = [] if not rootTarget.package in self._requires: self._requires[rootTarget.package] = [] if not rootTarget.package in self._includes: self._includes[rootTarget.package] = [] if not os.path.exists(target.path): print("\n") self._log.add('WARNING: Missing import.\n\tPACKAGE: ' + target.package + '\n\tFILE: ' \ + target.path) print("\n") return f = open(target.path) for line in f: # import parse dependency = CoffeescriptDependency.createImport( line, self._rootPath) if dependency and not dependency.isInList( self._imports[rootTarget.package]): self._parseIncludes(dependency, rootTarget) self._imports[rootTarget.package].append(dependency) continue # require parse dependency = CoffeescriptDependency.createRequire( line, self._rootPath) if dependency and not dependency.isInList( self._imports[rootTarget.package]): self._requires[rootTarget.package].append(dependency) continue # include parse dependency = CoffeescriptDependency.createInclude( line, self._rootPath) if dependency and not dependency.isInList( self._includes[rootTarget.package]): self._includes[rootTarget.package].append(dependency) continue f.close() self._imports[rootTarget.package].append(target)
def _getLibraryData(self, target): targets = [] modules = [] imports = [] includes = [] src = open(target.path, "r") for line in src: # target parse d = CoffeescriptDependency.create(line, self._rootPath) if not d: continue if d.dependencyType == CoffeescriptDependency.TARGET_TYPE: targets.append(d) elif d.dependencyType == CoffeescriptDependency.IMPORT_TYPE: imports.append(d) elif d.dependencyType == CoffeescriptDependency.REQUIRE_TYPE: imports.append(d) elif d.dependencyType == CoffeescriptDependency.INCLUDE_TYPE: includes.append(d) elif d.dependencyType == CoffeescriptDependency.MODULE_TYPE: modules.append(d) else: continue self._parseIncludes(d) src.close() return targets, imports, modules, includes
def _getLibraryData(self, target): targets = [] modules = [] imports = [] includes = [] src = open(target.path, 'r') for line in src: # target parse d = CoffeescriptDependency.create(line, self._rootPath) if not d: continue if d.dependencyType == CoffeescriptDependency.TARGET_TYPE: targets.append(d) elif d.dependencyType == CoffeescriptDependency.IMPORT_TYPE: imports.append(d) elif d.dependencyType == CoffeescriptDependency.REQUIRE_TYPE: imports.append(d) elif d.dependencyType == CoffeescriptDependency.INCLUDE_TYPE: includes.append(d) elif d.dependencyType == CoffeescriptDependency.MODULE_TYPE: modules.append(d) else: continue self._parseIncludes(d) src.close() return targets, imports, modules, includes
def _parseIncludes(self, target, rootTarget =None): """Doc...""" if rootTarget is None: rootTarget = target if not rootTarget.package in self._imports: self._imports[rootTarget.package] = [] if not rootTarget.package in self._requires: self._requires[rootTarget.package] = [] if not rootTarget.package in self._includes: self._includes[rootTarget.package] = [] if not os.path.exists(target.path): print "\n" self._log.add('WARNING: Missing import.\n\tPACKAGE: ' + target.package + '\n\tFILE: ' \ + target.path) print "\n" return f = open(target.path) for line in f: # import parse dependency = CoffeescriptDependency.createImport(line, self._rootPath) if dependency and not dependency.isInList(self._imports[rootTarget.package]): self._parseIncludes(dependency, rootTarget) self._imports[rootTarget.package].append(dependency) continue # require parse dependency = CoffeescriptDependency.createRequire(line, self._rootPath) if dependency and not dependency.isInList(self._imports[rootTarget.package]): self._requires[rootTarget.package].append(dependency) continue # include parse dependency = CoffeescriptDependency.createInclude(line, self._rootPath) if dependency and not dependency.isInList(self._includes[rootTarget.package]): self._includes[rootTarget.package].append(dependency) continue f.close() self._imports[rootTarget.package].append(target)
def _compileAllInDirectory(path, rootPath=None, debug=False, trace=False, force=False, compress=False): results = '' missing = {} count = 0 for f in CoffeescriptBuilder.getScriptsInPath(path): target = CoffeescriptDependency(f, rootPath) if not (target.exists and (target.isExec or target.isLib)): continue c = CoffeescriptBuilder(target, rootPath, debug=debug, trace=trace, force=force, compress=compress) c.construct() count += 1 for n, v in DictUtils.iter(c.report): num = max(0, 60 - len(n)) results += '\n' + n + ':' + ('.' * num) if v == 0: results += 'SUCCESS' elif v > 0: results += 'COMPILATION FAILED' else: results += 'ASSEMBLY FAILED' if len(c.warnings) > 0: results += '[' + str(len(c.warnings)) + ' WARNINGS]' for v in c.warnings: if not v[ 'id'] == CoffeescriptBuilder._WARN_ID_MISSING_IMPORT: continue key = v['package'] + '-' + v['class'] + '-' + str( v['line']) if key in missing: continue missing[key] = v if len(results) > 0: print('\nDIRECTORY ' + path + ' COMPILE RESULTS [' + str(count) + ']:' + results) return {'res': results, 'missing': missing}
def main(): try: opts, args = getopt.gnu_getopt( sys.argv[1:], "hap:t:r:fdvc", ["help", "all", "path=", "target=", "root=", "full", "debug", "verbose", "force", "compress"], ) except getopt.GetoptError as err: print(str(err) + "\n") usage() sys.exit(2) target = None path = None root = None recursive = False compress = False full = False debug = False trace = False force = False for o, a in opts: if o in ("-h", "--help"): usage() sys.exit(0) elif o in ("--force"): force = True elif o in ("-a", "--all"): recursive = True elif o in ("-p", "--path"): if a: path = a elif o in ("-t", "--target"): if a: target = a elif o in ("-r", "--root"): if a: root = a elif o in ("-f", "--full"): full = True elif o in ("-d", "--debug"): debug = True elif o in ("-v", "--verbose"): trace = True elif o in ("-c", "--compress"): compress = True else: print("\nUnknown argument: " + o + ". Unable to continue.\n\n") usage() sys.exit(2) if full: CoffeescriptBuilder.compileAllOnPath(path, root, True, debug, trace, force, compress=compress) elif target: if recursive: CoffeescriptBuilder.compileAllOnPath( path=CoffeescriptDependency.pathFromPackage(target, root), rootPath=root, recursive=True, debug=debug, trace=trace, force=force, compress=compress, ) else: CoffeescriptBuilder(target, root, debug=debug, trace=trace, force=force, compress=compress).construct() elif path: CoffeescriptBuilder.compileAllOnPath(path, root, recursive, debug, trace, force, compress=compress) else: print("\nNo path was specified. Would you like to compile the entire vmi domain?") result = queryYesNoQuit("Yes to continue:") if result != "yes": sys.exit() CoffeescriptBuilder.compileAllOnPath(path, root, True, debug, trace, force) print("\nOperation complete.\n")
def main(): try: opts, args = getopt.gnu_getopt(sys.argv[1:], "hap:t:r:fdvc", [ "help", "all", "path=", "target=", "root=", "full", "debug", "verbose", "force", "compress" ]) except getopt.GetoptError as err: print(str(err) + "\n") usage() sys.exit(2) target = None path = None root = None recursive = False compress = False full = False debug = False trace = False force = False for o, a in opts: if o in ("-h", "--help"): usage() sys.exit(0) elif o in ("--force"): force = True elif o in ("-a", "--all"): recursive = True elif o in ("-p", "--path"): if a: path = a elif o in ("-t", "--target"): if a: target = a elif o in ("-r", "--root"): if a: root = a elif o in ("-f", "--full"): full = True elif o in ("-d", "--debug"): debug = True elif o in ("-v", "--verbose"): trace = True elif o in ("-c", "--compress"): compress = True else: print("\nUnknown argument: " + o + ". Unable to continue.\n\n") usage() sys.exit(2) if full: CoffeescriptBuilder.compileAllOnPath(path, root, True, debug, trace, force, compress=compress) elif target: if recursive: CoffeescriptBuilder.compileAllOnPath( path=CoffeescriptDependency.pathFromPackage(target, root), rootPath=root, recursive=True, debug=debug, trace=trace, force=force, compress=compress) else: CoffeescriptBuilder(target, root, debug=debug, trace=trace, force=force, compress=compress).construct() elif path: CoffeescriptBuilder.compileAllOnPath(path, root, recursive, debug, trace, force, compress=compress) else: print( "\nNo path was specified. Would you like to compile the entire vmi domain?" ) result = queryYesNoQuit('Yes to continue:') if result != "yes": sys.exit() CoffeescriptBuilder.compileAllOnPath(path, root, True, debug, trace, force) print("\nOperation complete.\n")
elif o in ("-v", "--verbose"): trace = True elif o in ("-c", "--compress"): compress = True else: print "\nUnknown argument: " + o + ". Unable to continue.\n\n" usage() sys.exit(2) if full: CoffeescriptBuilder.compileAllOnPath( path, root, True, debug, trace, force, compress=compress) elif target: if recursive: CoffeescriptBuilder.compileAllOnPath( path=CoffeescriptDependency.pathFromPackage(target, root), rootPath=root, recursive=True, debug=debug, trace=trace, force=force, compress=compress) else: CoffeescriptBuilder( target, root, debug=debug, trace=trace, force=force, compress=compress).construct() elif path: CoffeescriptBuilder.compileAllOnPath( path, root, recursive, debug, trace, force, compress=compress) else: print "\nNo path was specified. Would you like to compile the entire vmi domain?" result = queryYesNoQuit('Yes to continue:')