def setup(self): """ Banana banana """ configurable_classes = all_subclasses(Configurable) configured = set() for subclass in configurable_classes: if subclass.parse_config not in configured: subclass.parse_config(self, self.config) configured.add(subclass.parse_config) self.__parse_config() self.doc_tree = DocTree(self.get_private_folder(), self.include_paths) for extension in self.extensions.values(): info('Setting up %s' % extension.extension_name) extension.setup() self.doc_database.flush() sitemap = SitemapParser().parse(self.sitemap_path) self.doc_tree.parse_sitemap(self.change_tracker, sitemap) info("Resolving symbols", 'resolution') self.doc_tree.resolve_symbols(self.doc_database, self.link_resolver) self.doc_database.flush()
def __get_empty_typed_symbols(): typed_symbols_list = namedtuple( 'TypedSymbolsList', ['name', 'symbols']) empty_typed_symbols = {} for subclass in all_subclasses(Symbol): empty_typed_symbols[subclass] = typed_symbols_list( subclass.get_plural_name(), []) return empty_typed_symbols
def resolve_symbols(self, tree, database, link_resolver): """ When this method is called, the page's symbol names are queried from `database`, and added to lists of actual symbols, sorted by symbol class. """ typed_symbols_list = namedtuple('TypedSymbolsList', ['name', 'symbols']) for subclass in all_subclasses(Symbol): self.typed_symbols[subclass] = typed_symbols_list( subclass.get_plural_name(), []) all_syms = OrderedSet() for sym_name in self.symbol_names: sym = database.get_symbol(sym_name) self.__query_extra_symbols(sym, all_syms, tree, link_resolver, database) if tree.project.is_toplevel: page_path = self.link.ref else: page_path = self.project_name + '/' + self.link.ref for sym in all_syms: sym.update_children_comments() self.__resolve_symbol(sym, link_resolver, page_path) self.symbol_names.add(sym.unique_name) for sym_type in [ ClassSymbol, AliasSymbol, InterfaceSymbol, StructSymbol ]: syms = self.typed_symbols[sym_type].symbols if not syms: continue if self.title is None: self.title = syms[0].display_name if self.comment is None: self.comment = Comment(name=self.source_file) self.comment.short_description = syms[ 0].comment.short_description self.comment.title = syms[0].comment.title break
def run(args, verbose=False): """ Banana banana """ parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, add_help=False) parser.add_argument("--extra-extension-path", action="append", default=[], dest="extra_extension_path", help="An extra extension path to use") parser.add_argument('--conf-file', help='Path to the config file', dest='conf_file') tmpargs, _args = parser.parse_known_args(args) json_conf = None if tmpargs.conf_file: json_conf = load_config_json(tmpargs.conf_file) tmpargs.extra_extension_path += json_conf.get('extra_extension_path', []) # We only get these once, doing this now means all # installed extensions will show up as Configurable subclasses. try: ext_classes = get_extension_classes( sort=True, extra_extension_paths=tmpargs.extra_extension_path) except HotdocException: return 1 parser.add_argument('command', action="store", choices=('run', 'conf', 'init', 'help'), nargs="?") parser.add_argument('--output-conf-file', help='Path where to save the updated conf' ' file', dest='output_conf_file') parser.add_argument('--init-dir', help='Directory to initialize', dest='init_dir') parser.add_argument('--version', help="Print version and exit", action="store_true") parser.add_argument('--makefile-path', help="Print path to includable " "Makefile and exit", action="store_true") parser.add_argument("--get-conf-key", action="store", help="print the value for a configuration " "key") parser.add_argument("--get-conf-path", action="store", help="print the value for a configuration " "path") parser.add_argument("--get-private-folder", action="store_true", help="get the path to hotdoc's private " "folder") parser.add_argument("--has-extension", action="append", dest="has_extensions", default=[], help="Check if a given extension is available") parser.add_argument("--list-extensions", action="store_true", dest="list_extensions", help="Print " "available extensions") parser.add_argument("-", action="store_true", help="Separator to allow finishing a list" " of arguments before a command", dest="whatever") add_args_methods = set() for klass in all_subclasses(Configurable): if klass.add_arguments not in add_args_methods: klass.add_arguments(parser) add_args_methods.add(klass.add_arguments) known_args, _ = parser.parse_known_args(args) defaults = {} actual_args = {} for key, value in list(dict(vars(known_args)).items()): if value != parser.get_default(key): actual_args[key] = value if parser.get_default(key) is not None: defaults[key] = value if known_args.has_extensions: res = 0 for extension_name in known_args.has_extensions: found = False for klass in ext_classes: if klass.extension_name == extension_name: found = True if verbose: print("Extension '%s'... FOUND." % extension_name) if not found: if verbose: print("Extension '%s'... NOT FOUND." % extension_name) res = 1 return res if known_args.list_extensions: print("Extensions:") extensions = [e.extension_name for e in ext_classes] for extension in sorted(extensions): print(" - %s " % extension) return 0 if known_args.command != 'init': conf_file = actual_args.get('conf_file') if conf_file is None and os.path.exists('hotdoc.json'): conf_file = 'hotdoc.json' else: conf_file = '' config = Config(command_line_args=actual_args, conf_file=conf_file, defaults=defaults, json_conf=json_conf) Logger.parse_config(config) return execute_command(parser, config, ext_classes)
def __create_arg_parser(self): self.parser = \ argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter,) configurable_classes = all_subclasses(Configurable) seen = set() for subclass in configurable_classes: if subclass.add_arguments not in seen: subclass.add_arguments(self.parser) seen.add(subclass.add_arguments) self.parser.add_argument('command', action="store", choices=('run', 'conf', 'help'), nargs="?") self.parser.add_argument('--dry', help='Dry run, nothing will be output', dest='dry', action='store_true') self.parser.add_argument('--conf-file', help='Path to the config file', dest='conf_file') self.parser.add_argument('--output-conf-file', help='Path where to save the updated conf' ' file', dest='output_conf_file') self.parser.add_argument('--version', help="Print version and exit", action="store_true") self.parser.add_argument('--makefile-path', help="Print path to includable " "Makefile and exit", action="store_true") self.parser.add_argument('--deps-file-dest', help='Where to output the dependencies file') self.parser.add_argument('--deps-file-target', help='Name of the dependencies target', default='doc.stamp.d') self.parser.add_argument("-i", "--index", action="store", dest="index", help="location of the " "index file") self.parser.add_argument("--sitemap", action="store", dest="sitemap", help="Location of the sitemap file") self.parser.add_argument("--project-name", action="store", dest="project_name", help="Name of the documented project") self.parser.add_argument("--project-version", action="store", dest="project_version", help="Version of the documented project") self.parser.add_argument("-o", "--output", action="store", dest="output", help="where to output the rendered " "documentation") self.parser.add_argument("--extra-extensions-paths", action="append", dest="extra_extension_paths", default=[], help="Extra paths to lookup extensions in") self.parser.add_argument("--get-conf-key", action="store", help="print the value for a configuration " "key") self.parser.add_argument("--get-conf-path", action="store", help="print the value for a configuration " "path") self.parser.add_argument("--get-private-folder", action="store_true", help="get the path to hotdoc's private " "folder") self.parser.add_argument("--output-format", action="store", dest="output_format", help="format for the " "output") self.parser.add_argument("--has-extension", action="store", dest="has_extension", help="Check if a given " "extension is available") self.parser.add_argument("--list-extensions", action="store_true", dest="list_extensions", help="Print " "available extensions") self.parser.add_argument('--include-paths', help='paths to look up included files in', dest='include_paths', action='append', default=[]) self.parser.add_argument("-", action="store_true", help="Separator to allow finishing a list" " of arguments before a command", dest="whatever")
def __create_arg_parser(self): self.parser = \ argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter,) configurable_classes = all_subclasses(Configurable) seen = set() for subclass in configurable_classes: if subclass.add_arguments not in seen: subclass.add_arguments(self.parser) seen.add(subclass.add_arguments) self.parser.add_argument('command', action="store", choices=('run', 'conf', 'help'), nargs="?") self.parser.add_argument('--dry', help='Dry run, nothing will be output', dest='dry', action='store_true') self.parser.add_argument('--conf-file', help='Path to the config file', dest='conf_file') self.parser.add_argument('--output-conf-file', help='Path where to save the updated conf' ' file', dest='output_conf_file') self.parser.add_argument('--version', help="Print version and exit", action="store_true") self.parser.add_argument('--makefile-path', help="Print path to includable " "Makefile and exit", action="store_true") self.parser.add_argument('--deps-file-dest', help='Where to output the dependencies file') self.parser.add_argument('--deps-file-target', help='Name of the dependencies target', default='doc.stamp.d') self.parser.add_argument("-i", "--index", action="store", dest="index", help="location of the " "index file") self.parser.add_argument("--sitemap", action="store", dest="sitemap", help="Location of the sitemap file") self.parser.add_argument("--project-name", action="store", dest="project_name", help="Name of the documented project") self.parser.add_argument("--project-version", action="store", dest="project_version", help="Version of the documented project") self.parser.add_argument("-o", "--output", action="store", dest="output", help="where to output the rendered " "documentation") self.parser.add_argument("--get-conf-key", action="store", help="print the value for a configuration " "key") self.parser.add_argument("--get-conf-path", action="store", help="print the value for a configuration " "path") self.parser.add_argument("--get-private-folder", action="store_true", help="get the path to hotdoc's private " "folder") self.parser.add_argument("--output-format", action="store", dest="output_format", help="format for the " "output") self.parser.add_argument("--has-extension", action="store", dest="has_extension", help="Check if a given " "extension is available") self.parser.add_argument("--list-extensions", action="store_true", dest="list_extensions", help="Print " "available extensions") self.parser.add_argument("-", action="store_true", help="Separator to allow finishing a list" " of arguments before a command", dest="whatever")