Example #1
0
    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')
Example #2
0
    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)
Example #3
0
    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
Example #4
0
    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
Example #5
0
    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)
Example #6
0
    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}
Example #7
0
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")
Example #8
0
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")
Example #9
0
        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:')