Thread: [Epydoc-devel] Proposal: give possibility to use derived customized HTMLWriter
Brought to you by:
edloper
From: Thomas K. <sou...@sc...> - 2009-05-23 09:50:07
|
Hi, below is a patch, to extend cli.py with the possibility, to use an customized HTMLWriter (or even for development too) without changing epydoc itself. I use such Customization for myself to have some changes in created html file as, for example, use class attributes for defining view style by css file instead of hardcoding view style in code. Goal is, to have a commandline option to specify this customized class. By default the HTMLWriter class is used, so it's behavior is the same as before, if somebody do not use this option. In this patch I have also used same mechanism for checker class. But it can be used in the same way for other output targets. Here is the patch: diff -ruN epydoc-3.0.1_orig/epydoc/cli.py epydoc_3.0.1/epydoc/cli.py --- epydoc-3.0.1_orig/epydoc/cli.py 2008-01-29 14:21:23.000000000 +0100 +++ epydoc_3.0.1/epydoc/cli.py 2008-06-04 18:55:11.000000000 +0200 @@ -180,6 +180,10 @@ action="store_const", dest="action", const="html", help="Write HTML output.") + action_group.add_option("--html-writer-class", + action="store", dest="action_html_writer_class", default = None, + help="HTML writer class as 'import.path.to.class:class'") + action_group.add_option("--text", action="store_const", dest="action", const="text", help="Write plaintext output. (not implemented yet)") @@ -204,6 +208,10 @@ action="store_const", dest="action", const="check", help="Check completeness of docs.") + action_group.add_option("--check-checker-class", + action="store", dest="action_check_checker_class", default = None, + help="checker class for check docu as 'import.path.to.class:class'") + action_group.add_option("--pickle", action="store_const", dest="action", const="pickle", help="Write the documentation to a pickle file.") @@ -815,7 +823,21 @@ def write_html(docindex, options): from epydoc.docwriter.html import HTMLWriter - html_writer = HTMLWriter(docindex, **options.__dict__) + istr = options.action_html_writer_class + wr = None + if istr: + try: + ipath, imod = istr.split(":", 1) + mod = __import__(ipath, globals(), locals(), [imod], -1) + wr = getattr(mod, imod) + if not issubclass(wr, HTMLWriter): + wr = None + raise Exception, "class isn't subclass of HTMLWriter" + except Exception, e: + from log import error + error("html writer setting '%s': %s" % (istr, str(e))) + if wr is None: wr = HTMLWriter + html_writer = wr(docindex, **options.__dict__) if options.verbose > 0: log.start_progress('Writing HTML docs to %r' % options.target) else: @@ -951,7 +973,22 @@ def check_docs(docindex, options): from epydoc.checker import DocChecker - DocChecker(docindex).check() + + istr = options.action_check_checker_class + ckr = None + if istr: + try: + ipath, imod = istr.split(":", 1) + mod = __import__(ipath, globals(), locals(), [imod], -1) + ckr = getattr(mod, imod) + if not issubclass(ckr, DocChecker): + ckr = None + raise Exception, "class isn't subclass of DocChecker" + except Exception, e: + from log import error + error("doc checker setting '%s': %s" % (istr, str(e))) + if ckr is None: ckr = DocChecker + ckr(docindex, **options.__dict__).check() def cli(): # Parse command-line arguments. |