Beispiel #1
0
    def _find_variables_and_functions(module_list):
        "find all top-level variables, functions, and traits"
        obj_list = [ ]
        for m in module_list:
            temp = m.divide_children()
            children = [ (c.name.upper(), c.abs_name.upper(), c) for c in temp[0] + temp[2] + temp[3] ]
            obj_list.extend(children)

        # sort alphabetically by local name
        alpha_sort(obj_list)
        obj_list = [ r[2] for r in obj_list ]

        # group by first letter
        result = { }
        for obj in obj_list:
            letter = obj.name[0].upper()
            display_name = obj.name
            if isinstance(obj, docobjects.Function):
                display_name += '()'
            link = object_link(obj)
            text = obj.abs_name

            result[letter] = result.get(letter, [ ]) + [ (display_name, link, text) ]

        return result
Beispiel #2
0
    def _find_variables_and_functions(module_list):
        "find all top-level variables, functions, and traits"
        obj_list = []
        for m in module_list:
            temp = m.divide_children()
            children = [(c.name.upper(), c.abs_name.upper(), c)
                        for c in temp[0] + temp[2] + temp[3]]
            obj_list.extend(children)

        # sort alphabetically by local name
        alpha_sort(obj_list)
        obj_list = [r[2] for r in obj_list]

        # group by first letter
        result = {}
        for obj in obj_list:
            letter = obj.name[0].upper()
            display_name = obj.name
            if isinstance(obj, docobjects.Function):
                display_name += '()'
            link = object_link(obj)
            text = obj.abs_name

            result[letter] = result.get(letter,
                                        []) + [(display_name, link, text)]

        return result
Beispiel #3
0
def add_module_names(filename_list):
    result = [ ]

    for package, package_root, filenames in filename_list:
        fn = [ ]
        for filename in filenames:
            module_name = filename_to_module_name(package_root, package, filename)
            fn.append((module_name, filename))
        alpha_sort(fn)
        result.append((package, package_root, [ (x[0], x[1]) for x in fn ]))

    return result
Beispiel #4
0
    def write_class_index(self):
        """Generate alphabetical index of classes

        Generates class_index.html in output directory
        """
        output_dir = self.options.docdir
        customheader = self.options.header
        customfooter = self.options.footer
        module_list = self.modules
        package_name = self.package_namespace.name
        extrastyle = self.get_extra_style()

        class_list = self._find_classes(module_list)
        header_title = "Class Index"
        title = "%s -- %s" % (package_name, header_title)
        stylesheet = "default.css"

        of = open(os.path.join(output_dir, 'class_index.html'), 'wt')

        # load class index HTML template
        template = self.template_loader.load('alpha_list')

        alpha_sort(class_list)

        # group class objects by first letter of local name
        classes_grouped = {}
        for c in class_list:
            letter = c.name[0].upper()
            link = class_link(c)
            display_name = c.name
            text = "%s" % c.abs_name

            classes_grouped[letter] = classes_grouped.get(
                letter, []) + [(display_name, link, text)]

        # list of available first letters (for links at top of index)
        letter_list = classes_grouped.keys()
        letter_list.sort()

        # sort by class name within letter categories
        for letter in letter_list:
            alpha_sort(classes_grouped[letter])

        objects = classes_grouped

        # render template with local variables as arguments and write to disk
        of.write(template.render(vars()))

        of.close()
Beispiel #5
0
    def write_class_index(self):
        """Generate alphabetical index of classes

        Generates class_index.html in output directory
        """
        output_dir = self.options.docdir
        customheader = self.options.header
        customfooter = self.options.footer
        module_list = self.modules
        package_name = self.package_namespace.name
        extrastyle = self.get_extra_style()

        class_list = self._find_classes(module_list)
        header_title = "Class Index"
        title = "%s -- %s" % (package_name, header_title)
        stylesheet = "default.css"

        of = open(os.path.join(output_dir, 'class_index.html'), 'wt')

        # load class index HTML template
        template = self.template_loader.load('alpha_list')

        alpha_sort(class_list)

        # group class objects by first letter of local name
        classes_grouped = { }
        for c in class_list:
            letter = c.name[0].upper()
            link = class_link(c)
            display_name = c.name
            text = "%s" % c.abs_name

            classes_grouped[letter] = classes_grouped.get(letter, [ ]) + [ (display_name, link, text) ]

        # list of available first letters (for links at top of index)
        letter_list = classes_grouped.keys()
        letter_list.sort()

        # sort by class name within letter categories
        for letter in letter_list:
            alpha_sort(classes_grouped[letter])

        objects = classes_grouped

        # render template with local variables as arguments and write to disk
        of.write(template.render(vars()))

        of.close()
Beispiel #6
0
def main():
    quit_now = False
    option_parser = OptionParser(usage = """
%prog [options] [-r [package_name=path/to/package]]*
                  [[module_prefix=]path/to/module.py]*""")
    #option_parser.add_option("-r", "--recursive", dest="recursive",
    #                         help="walk a directory recursively",
    #                         action="store_true", default=False)

    add_endo_options(option_parser)
    (options, args) = option_parser.parse_args()

    read_header_footer_files(options)

    if options.rst and not OutputHTML.HAS_DOCUTILS:
        option_parser.error("Option --rst specified, but docutils not found in default import path.\n")

    if len(args) < 1 and len(options.package_list) < 1:
        option_parser.error("Please specify at least one module or one package (with -r)")

    filename_list = [ ]

    # add package files
    for package_arg in options.package_list:
        if package_arg.find('=') != -1:
            package_name, package_dir = package_arg.split('=')
        else:
            # obtain package name from directory
            package_dir = package_arg
            package_name = os.path.split(os.path.normpath(package_dir))[-1]
        package_dir_list = [ (package_name, x) for x in glob(package_dir) ]
        alpha_sort(package_dir_list)
        new_files = [ (package_name, package_dir, search_tree(package_dir))
                      for package_name, package_dir in package_dir_list ]
        [ alpha_sort(entry[2]) for entry in new_files ]
        filename_list.extend(new_files)

    # add additional modules
    for module_arg in args:
        if module_arg.find('=') != -1:
            module_prefix, module_file = module_arg.split('=')
        else:
            module_prefix = options.package
            module_file = module_arg
        module_file_list = [ (module_prefix, x) for x in glob(module_file) ]
        alpha_sort(module_file_list)
        new_files = [ (module_prefix, os.path.dirname(f), [ f ])
                      for module_prefix, f in module_file_list ]
        alpha_sort(new_files)
        filename_list.extend(new_files)

    # create output dir if it doesn't exist
    create_output_dir(options.docdir)

    # set package name if it doesn't exist
    if not(options.package):
        options.package = ', '.join([ package_name
                                      for package_name,
                                          package_root,
                                          filenames
                                      in filename_list ])

    filename_list = add_module_names(filename_list)

    backend = OutputHTML(options)
    exceptions = [ ]
    scanned = {}
    for package, package_root, filenames in filename_list:
        for mod_name, filename in filenames:
            try:
                if str(mod_name) not in scanned: # Avoid duplicates
                    if options.verbose:
                        sys.stdout.write("Scanning %s ... " % filename)
                        sys.stdout.flush()
                    module_obj = scan_file(options, filename, mod_name)
                    scanned[mod_name] = filename
                    if module_obj is not None:
                        backend.add_module(module_obj)
                    if options.verbose:
                        sys.stdout.write("ok.\n")
            except KeyboardInterrupt:
                sys.stdout.write("interrupted!  Exiting...\n")
                quit_now = True
                break
            except:
                # save exception info and move on
                exc_info = sys.exc_info()
                exceptions.append((filename, exc_info))

                if options.verbose:
                    sys.stdout.write("error, moving on.\n")

        if quit_now:
            break

    if (options.silent):
        warnings.filterwarnings("ignore")

    # set the docobjects warning var to be the module imported here
    # so they can share the same warnings filters
    docobjects.warnings = warnings

    if options.state_file is not None:
        write_state(backend, options.state_file)
    elif not quit_now:
        # resolve intra-package imports
        backend.write_output()

    # print all exceptions that were raised while reading sources
    if len(exceptions) > 0:
        sys.stderr.write("The following exceptions were encountered while processing the source files:\n\n")

        for filename, exc_info in exceptions:
            exc_type, exc_value, exc_traceback = exc_info
            sys.stderr.write("%s\n%s\n" % (filename, '-' * len(filename)))
            print_exception(exc_type, exc_value, exc_traceback, file=sys.stderr)
            sys.stderr.write("\n")