Thread: [Epydoc-commits] SF.net SVN: epydoc: [1157] trunk/epydoc/src/epydoc/cli.py
Brought to you by:
edloper
From: <ed...@us...> - 2006-04-04 04:45:36
|
Revision: 1157 Author: edloper Date: 2006-04-03 21:45:28 -0700 (Mon, 03 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1157&view=rev Log Message: ----------- - Check that all graph types specified are valid. - Added '--graph all' option to add all graphs. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-04 02:30:57 UTC (rev 1156) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-04 04:45:28 UTC (rev 1157) @@ -190,7 +190,7 @@ "If this executable is not on the path, then use --dotpath " "to specify its location. This option may be repeated to " "include multiple graph types in the output. GRAPHTYPE" - "should be one of: %s." % ', '.join(GRAPH_TYPES))) + "should be one of: all, %s." % ', '.join(GRAPH_TYPES))) # Add the option groups. optparser.add_option_group(action_group) @@ -235,6 +235,13 @@ if options.action == 'text' and len(names) > 1: optparser.error("--text option takes only one name.") + for graph_type in options.graphs: + if graph_type.lower() == 'all': + options.graphs = GRAPH_TYPES + break + elif graph_type not in GRAPH_TYPES: + optparser.error("Invalid graph type %s." % graph_type) + # Calculate verbosity. options.verbosity = options.verbose - options.quiet This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-04 16:28:20
|
Revision: 1159 Author: edloper Date: 2006-04-04 09:28:13 -0700 (Tue, 04 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1159&view=rev Log Message: ----------- - Fixed sf bug #1464341: Option files not closed after readfp() - Removed 2 debug printfs Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-04 15:19:28 UTC (rev 1158) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-04 16:28:13 UTC (rev 1159) @@ -257,10 +257,9 @@ # ConfigParser.read() silently ignores errors, so open the files # manually (since we want to notify the user of any errors). for configfile in configfiles: - log.debug('here') fp = open(configfile, 'r') # may raise IOError. - log.debug('here2') configparser.readfp(fp, configfile) + fp.close() for optname in configparser.options('epydoc'): val = configparser.get('epydoc', optname).strip() if optname in ('modules', 'objects', 'values', This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-05 02:30:38
|
Revision: 1164 Author: edloper Date: 2006-04-04 19:30:32 -0700 (Tue, 04 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1164&view=rev Log Message: ----------- - Added some docs - Added --separate-classes option - Added --no-sourcecode - Added target to just generate the latex output, without actually running latex on it. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-05 02:28:48 UTC (rev 1163) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-05 02:30:32 UTC (rev 1164) @@ -7,36 +7,48 @@ # $Id$ """ -Command-line interface for epydoc. +Command-line interface for epydoc. Abbreviated Usage:: -[xx] this usage message is probably a little out-of-date. - -Usage:: - - epydoc [OPTIONS] MODULES... + epydoc [options] NAMES... - MODULES... The Python modules to document. + NAMES... The Python modules to document. --html Generate HTML output (default). --latex Generate LaTeX output. --pdf Generate pdf output, via LaTeX. - --check Run documentation completeness checks. -o DIR, --output DIR The output directory. - -n NAME, --name NAME The documented project's name. - -u URL, --url URL The documented project's url. - -t PAGE, --top PAGE The top page for the HTML documentation. - -c SHEET, --css SHEET CSS stylesheet for HTML files. - --private-css SHEET CSS stylesheet for private objects. --inheritance STYLE The format for showing inherited objects. -V, --version Print the version of epydoc. - -h, -?, --help, --usage Display a usage message. - -h TOPIC, --help TOPIC Display information about TOPIC (docformat, - css, inheritance, usage, or version). + -h, --help Display a usage message. - Run \"epydoc --help\" for a complete option list. - See the epydoc(1) man page for more information. +Run \"epydoc --help\" for a complete option list. See the epydoc(1) +man page for more information. -Verbosity levels:: +Config Files +============ +Configuration files can be specified with the C{--config} option. +These files are read using U{ConfigParser +<http://docs.python.org/lib/module-ConfigParser.html>}. Configuration +files may set options or add names of modules to document. Option +names are (usually) identical to the long names of command line +options. To specify names to document, use any of the following +option names:: + module modules value values object objects + +A simple example of a config file is:: + + [epydoc] + modules: sys, os, os.path, re + name: Example + graph: classtree + introspect: no + +Verbosity Levels +================ +The C{-v} and C{-q} options increase and decrease verbosity, +respectively. The default verbosity level is zero. The verbosity +levels are currently defined as follows:: + Progress Markup warnings Warnings Errors -3 none no no no -2 none no no yes @@ -80,30 +92,20 @@ help="Write plaintext output. (not implemented yet)") action_group.add_option( # --latex "--latex", action="store_const", dest="action", const="latex", - help="Write LaTeX output. (not implemented yet)") + help="Write LaTeX output.") action_group.add_option( # --dvi "--dvi", action="store_const", dest="action", const="dvi", - help="Write DVI output. (not implemented yet)") + help="Write DVI output.") action_group.add_option( # --ps "--ps", action="store_const", dest="action", const="ps", - help="Write Postscript output. (not implemented yet)") + help="Write Postscript output.") action_group.add_option( # --pdf "--pdf", action="store_const", dest="action", const="pdf", - help="Write PDF output. (not implemented yet)") + help="Write PDF output.") action_group.add_option( # --check "--check", action="store_const", dest="action", const="check", help="Check completeness of docs. (not implemented yet)") - # Options I haven't ported over yet are... - # separate-classes (??) -- for latex only - # command-line-order (??) - # ignore-param-mismatch -- not implemented yet, but will be related - # to DocInheriter - # tests=... - # --no-markup-warnings ? - # --no-source, --incl-source? - - # Add options -- Options options_group.add_option( # --output "--output", "-o", dest="target", metavar="PATH", @@ -142,13 +144,13 @@ "of an HTML file -- navigation bars will be added to it.") options_group.add_option( # --frames "--show-frames", action="store_true", dest="show_frames", - help="Include frames in the output.") + help="Include frames in the HTML output. (default)") options_group.add_option( # --no-frames "--no-frames", action="store_false", dest="show_frames", - help="Do not include frames in the output.") + help="Do not include frames in the HTML output.") options_group.add_option( # --private "--show-private", action="store_true", dest="show_private", - help="Include private variables in the output.") + help="Include private variables in the output. (default)") options_group.add_option( # --no-private "--no-private", action="store_false", dest="show_private", help="Do not include private variables in the output.") @@ -157,7 +159,7 @@ help="List each module's imports.") options_group.add_option( # --show-imports "--no-imports", action="store_false", dest="show_imports", - help="Do not list each module's imports.") + help="Do not list each module's imports. (default)") options_group.add_option( # --quiet "--quiet", "-q", action="count", dest="quiet", help="Decrease the verbosity.") @@ -191,6 +193,20 @@ "to specify its location. This option may be repeated to " "include multiple graph types in the output. GRAPHTYPE" "should be one of: all, %s." % ', '.join(GRAPH_TYPES))) + options_group.add_option( + '--separate-classes', action='store_true', + dest='list_classes_separately', + help=("When generating LaTeX or PDF output, list each class in " + "its own section, instead of listing them under their " + "containing module.")) + options_group.add_option( + '--show-sourcecode', action='store_true', dest='include_source_code', + help=("Include source code with syntax highlighting in the " + "HTML output.")) + options_group.add_option( + '--no-sourcecode', action='store_false', dest='include_source_code', + help=("Do not include source code with syntax highlighting in the " + "HTML output.")) # Add the option groups. optparser.add_option_group(action_group) @@ -204,7 +220,8 @@ verbose=0, quiet=0, parse=True, introspect=True, debug=epydoc.DEBUG, profile=False, - graphs=[]) + graphs=[], list_classes_separately=False, + include_source_code=True) # Parse the arguments. options, names = optparser.parse_args() @@ -262,9 +279,10 @@ fp.close() for optname in configparser.options('epydoc'): val = configparser.get('epydoc', optname).strip() + optname = optname.lower().strip() if optname in ('modules', 'objects', 'values', 'module', 'object', 'value'): - names.extend(val.split()) + names.extend(val.replace(',', ' ').split()) elif optname in ('output', 'target'): options.target = val elif optname == 'inheritance': @@ -312,6 +330,10 @@ raise ValueError('"graph" expected one of: %s.' % ', '.join(GRAPH_TYPES)) options.graphs.extend(graphtypes) + elif optname in ('separate-classes', 'separate_classes'): + options.list_classes_separately = _str_to_bool(val, optname) + elif optname == 'sourcecode': + options.include_source_code = _str_to_bool(val, optname) else: raise ValueError('Unknown option %s' % optname) @@ -339,9 +361,6 @@ logger = ConsoleLogger(options.verbosity) log.register_logger(logger) else: - # Roughly how long does each action take? - action_time = {'html': [100], 'text': 30, 'latex': 60, 'ps': 70, - 'pdf': 80} # Each number is a rough approximation of how long we spend on # that task, used to divide up the unified progress bar. stages = [40, # Building documentation @@ -353,7 +372,8 @@ 2] # Sorting & Grouping if options.action == 'html': stages += [100] elif options.action == 'text': stages += [30] - elif options.action == 'latex': stages += [60,30] + elif options.action == 'latex': stages += [60] + elif options.action == 'dvi': stages += [60,30] elif options.action == 'ps': stages += [60,40] elif options.action == 'pdf': stages += [60,50] else: raise ValueError, '%r not supported' % options.action @@ -390,7 +410,7 @@ # Perform the specified action. if options.action == 'html': write_html(docindex, options) - elif options.action in ('latex', 'ps', 'pdf'): + elif options.action in ('latex', 'dvi', 'ps', 'pdf'): write_latex(docindex, options, options.action) elif options.action == 'text': write_text(docindex, options) @@ -430,8 +450,11 @@ log.start_progress('Writing LaTeX docs') latex_writer.write(options.target) log.end_progress() + # If we're just generating the latex, and not any output format, + # then we're done. + if format == 'latex': return - if format == 'latex': steps = 4 + if format == 'dvi': steps = 4 elif format == 'ps': steps = 5 elif format == 'pdf': steps = 6 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-21 07:20:26
|
Revision: 1252 Author: edloper Date: 2006-08-21 00:04:18 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1252&view=rev Log Message: ----------- - Fixed sf bug #1510231 "frames" directive ignored in configuration file Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-08-21 07:02:32 UTC (rev 1251) +++ trunk/epydoc/src/epydoc/cli.py 2006-08-21 07:04:18 UTC (rev 1252) @@ -338,7 +338,7 @@ elif optname == 'help': options.help_file = val elif optname =='frames': - options.frames = _str_to_bool(val, optname) + options.show_frames = _str_to_bool(val, optname) elif optname =='private': options.private = _str_to_bool(val, optname) elif optname =='imports': This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-02-23 04:50:46
|
Revision: 1741 http://epydoc.svn.sourceforge.net/epydoc/?rev=1741&view=rev Author: edloper Date: 2008-02-22 20:50:41 -0800 (Fri, 22 Feb 2008) Log Message: ----------- - Added --pdfdriver option, which selects whether pdf output should be generated via pdflatex or latex->dvips->ps2pdf. The default, 'auto', will use pdflatex if it's available; and latex otherwise. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2008-02-23 02:02:57 UTC (rev 1740) +++ trunk/epydoc/src/epydoc/cli.py 2008-02-23 04:50:41 UTC (rev 1741) @@ -89,6 +89,7 @@ PROFILER = 'profile' #: Which profiler to use: 'hotshot' or 'profile' TARGET_ACTIONS = ('html', 'latex', 'dvi', 'ps', 'pdf') DEFAULT_ACTIONS = ('html',) +PDFDRIVERS = ('pdflatex', 'latex', 'auto') ###################################################################### #{ Help Topics @@ -145,7 +146,8 @@ fail_on=None, exclude=[], exclude_parse=[], exclude_introspect=[], external_api=[], external_api_file=[], external_api_root=[], redundant_details=False, src_code_tab_width=8, verbosity=0, - include_timestamp=True, target={}, default_target=None) + include_timestamp=True, target={}, default_target=None, + pdfdriver='auto') # append_const is not defined in py2.3 or py2.4, so use a callback # instead, with the following function: @@ -330,6 +332,14 @@ help="The LaTeX style file. LATEXSTYLE can be either a " "builtin style file or the name of a .sty file.") + output_group.add_option("--pdfdriver", + dest="pdfdriver", metavar="DRIVER", + help="The command sequence that should be used to render " + "pdf output. \"pdflatex\" will generate the pdf directly " + "using pdflatex. \"latex\" will generate the pdf using " + "latex, dvips, and ps2pdf in succession. \"auto\" will use " + "pdflatex if available, and latex otherwise.") + output_group.add_option("--url", "-u", dest="prj_url", metavar="URL", help="The documented project's URL (for the navigation bar).") @@ -520,6 +530,18 @@ optparser.error("Invalid graph type %s. Expected one of: %s." % (graph_type, ', '.join(GRAPH_TYPES + ('all',)))) + # If pdfdriver is 'auto', then pick a pdf driver. + options.pdfdriver = options.pdfdriver.lower() + if options.pdfdriver not in PDFDRIVERS: + optparser.error("Invalid pdf driver %r. Expected one of: %s" % + (options.pdfdriver, ', '.join(PDF_DRIVERS))) + if 'pdf' in options.actions and options.pdfdriver=='auto': + try: + run_subprocess('pdflatex --version') + options.pdfdriver = 'pdflatex' + except RunSubprocessError, e: + options.pdfdriver = 'latex' + # Calculate verbosity. verbosity = getattr(options, 'verbosity', 0) options.verbosity = verbosity + options.verbose - options.quiet @@ -593,6 +615,10 @@ options.prj_name = val elif optname == 'css': options.css = val + elif optname == 'sty': + options.sty = val + elif optname == 'pdfdriver': + options.pdfdriver = val elif optname == 'url': options.prj_url = val elif optname == 'link': @@ -929,8 +955,13 @@ log.start_progress('Writing LaTeX docs') latex_writer.write(latex_target) log.end_progress() - - if 'pdf' in options.actions: steps = 6 + + # Decide how many steps we need to go through. + if 'pdf' in options.actions: + if options.pdfdriver == 'latex': steps = 6 + elif 'ps' in options.actions: steps = 8 + elif 'dvi' in options.actions: steps = 7 + else: steps = 4 elif 'ps' in options.actions: steps = 5 elif 'dvi' in options.actions: steps = 4 else: @@ -938,10 +969,19 @@ # output format, then we're done. assert 'latex' in options.actions return - + + # Decide whether we need to run latex, pdflatex, or both. + if options.pdfdriver == 'latex': + latex_commands = ['latex'] + elif 'dvi' in options.actions or 'ps' in options.actions: + latex_commands = ['latex', 'pdflatex'] + else: + latex_commands = ['pdflatex'] + log.start_progress('Processing LaTeX docs') oldpath = os.path.abspath(os.curdir) running = None # keep track of what we're doing. + step = 0. try: try: os.chdir(latex_target) @@ -951,44 +991,52 @@ if os.path.exists('api.%s' % ext): os.remove('api.%s' % ext) - # The first pass generates index files. - running = 'latex' - log.progress(0./steps, 'LaTeX: First pass') - run_subprocess('latex api.tex') + for latex_command in latex_commands: + # The first pass generates index files. + running = latex_command + log.progress(step/steps, 'LaTeX: First pass') + step += 1 + run_subprocess('%s api.tex' % latex_command) + + # Build the index. + running = 'makeindex' + log.progress(step/steps, 'LaTeX: Build index') + step += 1 + run_subprocess('makeindex api.idx') + + # The second pass generates our output. + running = latex_command + log.progress(step/steps, 'LaTeX: Second pass') + step += 1 + out, err = run_subprocess('%s api.tex' % latex_command) + + # The third pass is only necessary if the second pass + # changed what page some things are on. + running = latex_command + if _RERUN_LATEX_RE.match(out): + log.progress(step/steps, 'LaTeX: Third pass') + out, err = run_subprocess('%s api.tex' % latex_command) + + # A fourth path should (almost?) never be necessary. + running = latex_command + if _RERUN_LATEX_RE.match(out): + log.progress(step/steps, 'LaTeX: Fourth pass') + run_subprocess('%s api.tex' % latex_command) + step += 1 - # Build the index. - running = 'makeindex' - log.progress(1./steps, 'LaTeX: Build index') - run_subprocess('makeindex api.idx') - - # The second pass generates our output. - running = 'latex' - log.progress(2./steps, 'LaTeX: Second pass') - out, err = run_subprocess('latex api.tex') - - # The third pass is only necessary if the second pass - # changed what page some things are on. - running = 'latex' - if _RERUN_LATEX_RE.match(out): - log.progress(3./steps, 'LaTeX: Third pass') - out, err = run_subprocess('latex api.tex') - - # A fourth path should (almost?) never be necessary. - running = 'latex' - if _RERUN_LATEX_RE.match(out): - log.progress(3./steps, 'LaTeX: Fourth pass') - run_subprocess('latex api.tex') - # If requested, convert to postscript. - if 'ps' in options.actions or 'pdf' in options.actions: + if ('ps' in options.actions or + ('pdf' in options.actions and options.pdfdriver=='latex')): running = 'dvips' - log.progress(4./steps, 'dvips') + log.progress(step/steps, 'dvips') + step += 1 run_subprocess('dvips api.dvi -o api.ps -G0 -Ppdf') # If requested, convert to pdf. - if 'pdf' in options.actions: + if 'pdf' in options.actions and options.pdfdriver=='latex': running = 'ps2pdf' - log.progress(5./steps, 'ps2pdf') + log.progress(step/steps, 'ps2pdf') + step += 1 run_subprocess( 'ps2pdf -sPAPERSIZE#letter -dMaxSubsetPct#100 ' '-dSubsetFonts#true -dCompatibilityLevel#1.2 ' @@ -1006,7 +1054,7 @@ shutil.copy2('api.pdf', dst) except RunSubprocessError, e: - if running == 'latex': + if running in ('latex', 'pdflatex'): e.out = re.sub(r'(?sm)\A.*?!( LaTeX Error:)?', r'', e.out) e.out = re.sub(r'(?sm)\s*Type X to quit.*', '', e.out) e.out = re.sub(r'(?sm)^! Emergency stop.*', '', e.out) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-02-23 05:00:47
|
Revision: 1743 http://epydoc.svn.sourceforge.net/epydoc/?rev=1743&view=rev Author: edloper Date: 2008-02-22 21:00:43 -0800 (Fri, 22 Feb 2008) Log Message: ----------- - Minor changes to progress messages for latex output Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2008-02-23 04:54:23 UTC (rev 1742) +++ trunk/epydoc/src/epydoc/cli.py 2008-02-23 05:00:43 UTC (rev 1743) @@ -996,21 +996,22 @@ os.remove('api.%s' % ext) for latex_command in latex_commands: + LaTeX = latex_command.replace('latex', 'LaTeX') # The first pass generates index files. running = latex_command - log.progress(step/steps, 'LaTeX: First pass') + log.progress(step/steps, '%s (First pass)' % LaTeX) step += 1 run_subprocess('%s api.tex' % latex_command) # Build the index. running = 'makeindex' - log.progress(step/steps, 'LaTeX: Build index') + log.progress(step/steps, '%s (Build index)' % LaTeX) step += 1 run_subprocess('makeindex api.idx') # The second pass generates our output. running = latex_command - log.progress(step/steps, 'LaTeX: Second pass') + log.progress(step/steps, '%s (Second pass)' % LaTeX) step += 1 out, err = run_subprocess('%s api.tex' % latex_command) @@ -1018,13 +1019,13 @@ # changed what page some things are on. running = latex_command if _RERUN_LATEX_RE.match(out): - log.progress(step/steps, 'LaTeX: Third pass') + log.progress(step/steps, '%s (Third pass)' % LaTeX) out, err = run_subprocess('%s api.tex' % latex_command) # A fourth path should (almost?) never be necessary. running = latex_command if _RERUN_LATEX_RE.match(out): - log.progress(step/steps, 'LaTeX: Fourth pass') + log.progress(step/steps, '%s (Fourth pass)' % LaTeX) run_subprocess('%s api.tex' % latex_command) step += 1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-02-23 17:47:51
|
Revision: 1756 http://epydoc.svn.sourceforge.net/epydoc/?rev=1756&view=rev Author: edloper Date: 2008-02-23 09:47:49 -0800 (Sat, 23 Feb 2008) Log Message: ----------- - Moved code that resolves 'auto' pdfdriver to the write_latex function. - 'auto' pdfdriver now selects 'latex' if 'dvi' or 'ps' output are requested - if pdfdriver is set to 'pdflatex' and the dvi or ps output are requested, then signal an error Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2008-02-23 17:34:49 UTC (rev 1755) +++ trunk/epydoc/src/epydoc/cli.py 2008-02-23 17:47:49 UTC (rev 1756) @@ -534,17 +534,16 @@ optparser.error("Invalid graph type %s. Expected one of: %s." % (graph_type, ', '.join(GRAPH_TYPES + ('all',)))) - # If pdfdriver is 'auto', then pick a pdf driver. + # Check the value of the pdfdriver option; and check for conflicts + # between pdfdriver & actions options.pdfdriver = options.pdfdriver.lower() if options.pdfdriver not in PDFDRIVERS: optparser.error("Invalid pdf driver %r. Expected one of: %s" % (options.pdfdriver, ', '.join(PDF_DRIVERS))) - if 'pdf' in options.actions and options.pdfdriver=='auto': - try: - run_subprocess('pdflatex --version') - options.pdfdriver = 'pdflatex' - except RunSubprocessError, e: - options.pdfdriver = 'latex' + if (options.pdfdriver == 'pdflatex' and + ('dvi' in options.actions or 'ps' in options.actions)): + optparser.error("Use of the pdflatex driver is incompatible " + "with generating dvi or ps output.") # Calculate verbosity. verbosity = getattr(options, 'verbosity', 0) @@ -953,10 +952,23 @@ latex_target = options.target['latex'] else: latex_target = tempfile.mkdtemp() - + + log.start_progress('Writing LaTeX docs') + + # Choose a pdfdriver if we're generating pdf output. + if 'pdf' in options.actions and options.pdfdriver=='auto': + if 'dvi' in options.actions or 'ps' in options.actions: + options.pdfdriver = 'latex' + else: + try: + run_subprocess('pdflatex --version') + options.pdfdriver = 'pdflatex' + except RunSubprocessError, e: + options.pdfdriver = 'latex' + log.info('%r pdfdriver selected' % options.pdfdriver) + from epydoc.docwriter.latex import LatexWriter latex_writer = LatexWriter(docindex, **options.__dict__) - log.start_progress('Writing LaTeX docs') latex_writer.write(latex_target) log.end_progress() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-03-04 02:33:17
|
Revision: 1807 http://epydoc.svn.sourceforge.net/epydoc/?rev=1807&view=rev Author: edloper Date: 2008-03-03 18:32:58 -0800 (Mon, 03 Mar 2008) Log Message: ----------- - When latex is run with --debug or --v, display the latex warnings. - Fixed bug in determining whether to re-run latex Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2008-03-04 02:31:57 UTC (rev 1806) +++ trunk/epydoc/src/epydoc/cli.py 2008-03-04 02:32:58 UTC (rev 1807) @@ -1056,9 +1056,16 @@ options.pdfdriver = 'latex' log.info('%r pdfdriver selected' % options.pdfdriver) - from epydoc.docwriter.latex import LatexWriter + from epydoc.docwriter.latex import LatexWriter, show_latex_warnings latex_writer = LatexWriter(docindex, **options.__dict__) - latex_writer.write(latex_target) + try: + latex_writer.write(latex_target) + except IOError, e: + log.error(e) + log.end_progress() + log.start_progress() + log.end_progress() + return log.end_progress() # Decide how many steps we need to go through. @@ -1119,17 +1126,21 @@ # The third pass is only necessary if the second pass # changed what page some things are on. running = latex_command - if _RERUN_LATEX_RE.match(out): + if _RERUN_LATEX_RE.search(out): log.progress(step/steps, '%s (Third pass)' % LaTeX) out, err = run_subprocess('%s api.tex' % latex_command) # A fourth path should (almost?) never be necessary. running = latex_command - if _RERUN_LATEX_RE.match(out): + if _RERUN_LATEX_RE.search(out): log.progress(step/steps, '%s (Fourth pass)' % LaTeX) - run_subprocess('%s api.tex' % latex_command) + out, err = run_subprocess('%s api.tex' % latex_command) step += 1 + # Show the output, if verbosity is high: + if options.verbosity > 2 or epydoc.DEBUG: + show_latex_warnings(out) + # If requested, convert to postscript. if ('ps' in options.actions or ('pdf' in options.actions and options.pdfdriver=='latex')): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-05 02:35:14
|
Revision: 1165 Author: edloper Date: 2006-04-04 19:35:07 -0700 (Tue, 04 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1165&view=rev Log Message: ----------- - Add support for ansi color displays (e.g., OS X) to TerminalController Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-05 02:30:32 UTC (rev 1164) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-05 02:35:07 UTC (rev 1165) @@ -584,7 +584,7 @@ A class that can be used to portably generate formatted output to a terminal. See U{http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/475116} - for documentation. + for documentation. (This is a somewhat stripped-down version.) """ BOL = '' #: Move the cursor to the beginning of the line UP = '' #: Move the cursor up one line @@ -602,6 +602,7 @@ BOL=cr UP=cuu1 DOWN=cud1 LEFT=cub1 RIGHT=cuf1 CLEAR_EOL=el BOLD=bold UNDERLINE=smul NORMAL=sgr0""".split() _COLORS = """BLACK BLUE GREEN CYAN RED MAGENTA YELLOW WHITE""".split() + _ANSICOLORS = "BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE".split() def __init__(self, term_stream=sys.stdout): # If the stream isn't a tty, then assume it has no capabilities. @@ -635,6 +636,10 @@ if set_fg: for i,color in zip(range(len(self._COLORS)), self._COLORS): setattr(self, color, curses.tparm(set_fg, i) or '') + set_fg_ansi = self._tigetstr('setaf') + if set_fg_ansi: + for i,color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS): + setattr(self, color, curses.tparm(set_fg_ansi, i) or '') def _tigetstr(self, cap_name): # String capabilities can include "delays" of the form "$<2>". This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-05 17:19:58
|
Revision: 1172 Author: edloper Date: 2006-04-05 10:19:53 -0700 (Wed, 05 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1172&view=rev Log Message: ----------- - Better verification for --graph option values Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-05 17:12:13 UTC (rev 1171) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-05 17:19:53 UTC (rev 1172) @@ -257,9 +257,18 @@ if options.action == 'text' and len(names) > 1: optparser.error("--text option takes only one name.") + # Check the list of requested graph types to make sure they're + # acceptable. + options.graphs = [graph_type.lower() for graph_type in options.graphs] for graph_type in options.graphs: - if graph_type.lower() == 'all': + if graph_type == 'callgraph' and not options.pstat_files: + optparser.error('"callgraph" graph type may only be used if ' + 'one or more pstat files are specified.') + # If it's 'all', then add everything (but don't add callgraph if + # we don't have any profiling info to base them on). + if graph_type == 'all': options.graphs = GRAPH_TYPES + if not options.pstat_files: graph_types.remove('callgraph') break elif graph_type not in GRAPH_TYPES: optparser.error("Invalid graph type %s." % graph_type) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-05 22:02:50
|
Revision: 1174 Author: edloper Date: 2006-04-05 15:02:43 -0700 (Wed, 05 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1174&view=rev Log Message: ----------- - Added pstat option to config file Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-05 19:47:34 UTC (rev 1173) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-05 22:02:43 UTC (rev 1174) @@ -333,8 +333,6 @@ options.parse = _str_to_bool(val, optname) elif optname == 'introspect': options.introspect = _str_to_bool(val, optname) - elif optname == 'profile': - options.profile = _str_to_bool(val, optname) elif optname == 'dotpath': options.dotpath = val elif optname == 'graph': @@ -348,6 +346,8 @@ options.list_classes_separately = _str_to_bool(val, optname) elif optname == 'sourcecode': options.include_source_code = _str_to_bool(val, optname) + elif optname == 'pstat': + options.pstat_files.extend(val.replace(',', ' ').split()) else: raise ValueError('Unknown option %s' % optname) @@ -593,7 +593,7 @@ except SystemExit: pass prof.dump_stats('profile.out') - + return # Use the pstats statistical browser. This is made unnecessarily # difficult because the whole browser is wrapped in an # if __name__=='__main__' clause. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-06 04:34:23
|
Revision: 1178 Author: edloper Date: 2006-04-05 21:34:20 -0700 (Wed, 05 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1178&view=rev Log Message: ----------- - Fixed bug with "--graph all" option. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-06 04:33:06 UTC (rev 1177) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-06 04:34:20 UTC (rev 1178) @@ -268,7 +268,7 @@ # we don't have any profiling info to base them on). if graph_type == 'all': options.graphs = GRAPH_TYPES - if not options.pstat_files: graph_types.remove('callgraph') + if not options.pstat_files: option.graphs.remove('callgraph') break elif graph_type not in GRAPH_TYPES: optparser.error("Invalid graph type %s." % graph_type) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-06 04:35:20
|
Revision: 1179 Author: edloper Date: 2006-04-05 21:35:12 -0700 (Wed, 05 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1179&view=rev Log Message: ----------- - Fixed bug with "--graph all" option. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-06 04:34:20 UTC (rev 1178) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-06 04:35:12 UTC (rev 1179) @@ -267,8 +267,10 @@ # If it's 'all', then add everything (but don't add callgraph if # we don't have any profiling info to base them on). if graph_type == 'all': - options.graphs = GRAPH_TYPES - if not options.pstat_files: option.graphs.remove('callgraph') + if options.pstat_files: + options.graphs = GRAPH_TYPES + else: + options.graphs = [g for g in GRAPH_TYPES if g != 'callgraph'] break elif graph_type not in GRAPH_TYPES: optparser.error("Invalid graph type %s." % graph_type) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-07 01:04:20
|
Revision: 1181 Author: edloper Date: 2006-04-06 18:04:16 -0700 (Thu, 06 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1181&view=rev Log Message: ----------- - Added --check action - Fixed usage typos - Changed config file options a little: now 'output' is used to specify the output type (html, pdf, etc); and 'target' is used to specify the destination directory. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-07 01:02:08 UTC (rev 1180) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-07 01:04:16 UTC (rev 1181) @@ -70,6 +70,8 @@ INHERITANCE_STYLES = ('grouped', 'listed', 'included') GRAPH_TYPES = ('classtree', 'callgraph') +ACTIONS = ('html', 'text', 'latex', 'dvi', 'ps', 'pdf', 'check') +DEFAULT_DOCFORMAT = 'epytext' ###################################################################### #{ Argument & Config File Parsing @@ -104,7 +106,7 @@ help="Write PDF output.") action_group.add_option( # --check "--check", action="store_const", dest="action", const="check", - help="Check completeness of docs. (not implemented yet)") + help="Check completeness of docs.") # Add options -- Options options_group.add_option( # --output @@ -118,7 +120,7 @@ options_group.add_option( # --output "--docformat", dest="docformat", metavar="NAME", help="The default markup language for docstrings. Defaults " - "to \"%default\".") + "to \"%s\"." % DEFAULT_DOCFORMAT) options_group.add_option( # --css "--css", dest="css", metavar="STYLESHEET", help="The CSS stylesheet. STYLESHEET can be either a " @@ -193,7 +195,7 @@ "Graphs are generated using the Graphviz dot executable. " "If this executable is not on the path, then use --dotpath " "to specify its location. This option may be repeated to " - "include multiple graph types in the output. GRAPHTYPE" + "include multiple graph types in the output. GRAPHTYPE " "should be one of: all, %s." % ', '.join(GRAPH_TYPES))) options_group.add_option( '--separate-classes', action='store_true', @@ -219,7 +221,7 @@ # Set the option parser's defaults. optparser.set_defaults(action="html", show_frames=True, - docformat='epytext', + docformat=DEFAULT_DOCFORMAT, show_private=True, show_imports=False, inheritance="listed", verbose=0, quiet=0, @@ -299,12 +301,17 @@ if optname in ('modules', 'objects', 'values', 'module', 'object', 'value'): names.extend(val.replace(',', ' ').split()) - elif optname in ('output', 'target'): + elif optname == 'output': + if optname not in ACTIONS: + raise ValueError('"%s" expected one of: %s' % + (optname, ', '.join(ACTIONS))) + options.action = action + elif optname == 'target': options.target = val elif optname == 'inheritance': if val.lower() not in INHERITANCE_STYLES: - raise ValueError('"inheritance" expected one of: %s.' % - ', '.join(INHERITANCE_STYLES)) + raise ValueError('"%s" expected one of: %s.' % + (optname, ', '.join(INHERITANCE_STYLES))) options.inerhitance = val.lower() elif optname == 'docformat': options.docformat = val @@ -330,7 +337,7 @@ try: options.verbosity = int(val) except ValueError: - raise ValueError('"verbosity" expected an int') + raise ValueError('"%s" expected an int' % optname) elif optname == 'parse': options.parse = _str_to_bool(val, optname) elif optname == 'introspect': @@ -341,8 +348,8 @@ graphtypes = val.replace(',', '').split() for graphtype in graphtypes: if graphtype not in GRAPH_TYPES: - raise ValueError('"graph" expected one of: %s.' % - ', '.join(GRAPH_TYPES)) + raise ValueError('"%s" expected one of: %s.' % + (optname, ', '.join(GRAPH_TYPES))) options.graphs.extend(graphtypes) elif optname in ('separate-classes', 'separate_classes'): options.list_classes_separately = _str_to_bool(val, optname) @@ -392,6 +399,7 @@ elif options.action == 'dvi': stages += [60,30] elif options.action == 'ps': stages += [60,40] elif options.action == 'pdf': stages += [60,50] + elif options.action == 'check': stages += [10] else: raise ValueError, '%r not supported' % options.action if options.parse and not options.introspect: del stages[1] # no merging @@ -443,6 +451,8 @@ write_latex(docindex, options, options.action) elif options.action == 'text': write_text(docindex, options) + elif options.action == 'check': + check_docs(docindex, options) else: print >>sys.stderr, '\nUnsupported action %s!' % options.action @@ -564,6 +574,10 @@ if isinstance(s, unicode): s = s.encode('ascii', 'backslashreplace') print s + +def check_docs(docindex, options): + from epydoc.checker import DocChecker + DocChecker(docindex).check() def cli(): # Parse command-line arguments. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-12 17:57:42
|
Revision: 1215 Author: edloper Date: 2006-04-12 10:57:36 -0700 (Wed, 12 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1215&view=rev Log Message: ----------- - Report name(s) of config files when reading them fails (sf bug #1464975) Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-11 17:26:56 UTC (rev 1214) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-12 17:57:36 UTC (rev 1215) @@ -239,7 +239,11 @@ parse_configfiles(options.configfiles, options, names) except (KeyboardInterrupt,SystemExit): raise except Exception, e: - optparser.error('Error reading config file:\n %s' % e) + if len(options.configfiles) == 1: + cf_name = 'config file %s' % options.configfiles[0] + else: + cf_name = 'config files %s' % ', '.join(options.configfiles + optparser.error('Error reading %s:\n %s' % (cf_name, e)) # Check to make sure all options are valid. if len(names) == 0: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-12 17:58:29
|
Revision: 1216 Author: edloper Date: 2006-04-12 10:58:21 -0700 (Wed, 12 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1216&view=rev Log Message: ----------- - fixed typo in previous checkin Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-12 17:57:36 UTC (rev 1215) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-12 17:58:21 UTC (rev 1216) @@ -242,7 +242,7 @@ if len(options.configfiles) == 1: cf_name = 'config file %s' % options.configfiles[0] else: - cf_name = 'config files %s' % ', '.join(options.configfiles + cf_name = 'config files %s' % ', '.join(options.configfiles) optparser.error('Error reading %s:\n %s' % (cf_name, e)) # Check to make sure all options are valid. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-04-12 18:03:12
|
Revision: 1217 Author: edloper Date: 2006-04-12 11:02:59 -0700 (Wed, 12 Apr 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1217&view=rev Log Message: ----------- - Use environment variable interpolations when reading config files (sf feature request #1464911) Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-12 17:58:21 UTC (rev 1216) +++ trunk/epydoc/src/epydoc/cli.py 2006-04-12 18:02:59 UTC (rev 1217) @@ -38,11 +38,15 @@ A simple example of a config file is:: [epydoc] - modules: sys, os, os.path, re + modules: sys, os, os.path, re, %(MYSANDBOXPATH)/utilities.py name: Example graph: classtree introspect: no +All ConfigParser interpolations are done using local values and the +environment variables. + + Verbosity Levels ================ The C{-v} and C{-q} options increase and decrease verbosity, @@ -300,7 +304,7 @@ configparser.readfp(fp, configfile) fp.close() for optname in configparser.options('epydoc'): - val = configparser.get('epydoc', optname).strip() + val = configparser.get('epydoc', optname, vars=os.environ).strip() optname = optname.lower().strip() if optname in ('modules', 'objects', 'values', 'module', 'object', 'value'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2006-06-22 14:32:11
|
Revision: 1232 Author: dvarrazzo Date: 2006-06-22 07:32:06 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1232&view=rev Log Message: ----------- - The dotgraph module is looked for in the right package. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-04-19 00:30:37 UTC (rev 1231) +++ trunk/epydoc/src/epydoc/cli.py 2006-06-22 14:32:06 UTC (rev 1232) @@ -428,7 +428,7 @@ # Set the dot path if options.dotpath: - from epydoc import dotgraph + from epydoc.docwriter import dotgraph dotgraph.DOT_PATH = options.dotpath # Build docs for the named values. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2006-06-22 14:47:53
|
Revision: 1233 Author: dvarrazzo Date: 2006-06-22 07:47:48 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1233&view=rev Log Message: ----------- - The option "graphs: all" works in config file too. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-06-22 14:32:06 UTC (rev 1232) +++ trunk/epydoc/src/epydoc/cli.py 2006-06-22 14:47:48 UTC (rev 1233) @@ -355,8 +355,8 @@ elif optname == 'graph': graphtypes = val.replace(',', '').split() for graphtype in graphtypes: - if graphtype not in GRAPH_TYPES: - raise ValueError('"%s" expected one of: %s.' % + if graphtype not in GRAPH_TYPES + ('all',): + raise ValueError('"%s" expected one of: all, %s.' % (optname, ', '.join(GRAPH_TYPES))) options.graphs.extend(graphtypes) elif optname in ('separate-classes', 'separate_classes'): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2006-06-22 14:53:57
|
Revision: 1234 Author: dvarrazzo Date: 2006-06-22 07:53:52 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1234&view=rev Log Message: ----------- - Verbosity values from config file and command line are summed together (the latter used to overwrite the former). Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-06-22 14:47:48 UTC (rev 1233) +++ trunk/epydoc/src/epydoc/cli.py 2006-06-22 14:53:52 UTC (rev 1234) @@ -286,7 +286,8 @@ optparser.error("Invalid graph type %s." % graph_type) # Calculate verbosity. - options.verbosity = options.verbose - options.quiet + verbosity = getattr(options, 'verbosity', 0) + options.verbosity = verbosity + options.verbose - options.quiet # The target default depends on the action. if options.target is None: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2006-06-22 15:35:00
|
Revision: 1235 Author: dvarrazzo Date: 2006-06-22 08:34:55 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1235&view=rev Log Message: ----------- - shell expansion is performed in the proper order. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-06-22 14:53:52 UTC (rev 1234) +++ trunk/epydoc/src/epydoc/cli.py 2006-06-22 15:34:55 UTC (rev 1235) @@ -254,7 +254,7 @@ optparser.error("No names specified.") # perform shell expansion. - for i, name in enumerate(names[:]): + for i, name in reversed(list(enumerate(names[:]))): if '?' in name or '*' in name: names[i:i+1] = glob(name) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2006-06-22 15:42:53
|
Revision: 1236 Author: dvarrazzo Date: 2006-06-22 08:42:48 -0700 (Thu, 22 Jun 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1236&view=rev Log Message: ----------- - "output" correctly parsed from config file. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-06-22 15:34:55 UTC (rev 1235) +++ trunk/epydoc/src/epydoc/cli.py 2006-06-22 15:42:48 UTC (rev 1236) @@ -311,10 +311,10 @@ 'module', 'object', 'value'): names.extend(val.replace(',', ' ').split()) elif optname == 'output': - if optname not in ACTIONS: + if val not in ACTIONS: raise ValueError('"%s" expected one of: %s' % (optname, ', '.join(ACTIONS))) - options.action = action + options.action = val elif optname == 'target': options.target = val elif optname == 'inheritance': This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-07-05 11:29:38
|
Revision: 1238 Author: edloper Date: 2006-07-05 04:29:29 -0700 (Wed, 05 Jul 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1238&view=rev Log Message: ----------- made 'ouptput' option in config file case insensitive Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-06-22 15:51:49 UTC (rev 1237) +++ trunk/epydoc/src/epydoc/cli.py 2006-07-05 11:29:29 UTC (rev 1238) @@ -70,6 +70,7 @@ from epydoc import log from epydoc.util import wordwrap, run_subprocess, RunSubprocessError from epydoc.apidoc import UNKNOWN +from epydoc.compat import * import ConfigParser INHERITANCE_STYLES = ('grouped', 'listed', 'included') @@ -314,7 +315,7 @@ if val not in ACTIONS: raise ValueError('"%s" expected one of: %s' % (optname, ', '.join(ACTIONS))) - options.action = val + options.action = val.lower() elif optname == 'target': options.target = val elif optname == 'inheritance': This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-21 09:17:00
|
Revision: 1258 Author: edloper Date: 2006-08-21 02:16:55 -0700 (Mon, 21 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1258&view=rev Log Message: ----------- made 'ouptput' option in config file case insensitive Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-08-21 09:06:08 UTC (rev 1257) +++ trunk/epydoc/src/epydoc/cli.py 2006-08-21 09:16:55 UTC (rev 1258) @@ -312,7 +312,7 @@ 'module', 'object', 'value'): names.extend(val.replace(',', ' ').split()) elif optname == 'output': - if val not in ACTIONS: + if val.lower() not in ACTIONS: raise ValueError('"%s" expected one of: %s' % (optname, ', '.join(ACTIONS))) options.action = val.lower() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2006-08-23 15:00:20
|
Revision: 1303 Author: edloper Date: 2006-08-23 07:59:28 -0700 (Wed, 23 Aug 2006) ViewCVS: http://svn.sourceforge.net/epydoc/?rev=1303&view=rev Log Message: ----------- - Added support for pickling & unpickling docs. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2006-08-23 14:58:34 UTC (rev 1302) +++ trunk/epydoc/src/epydoc/cli.py 2006-08-23 14:59:28 UTC (rev 1303) @@ -63,7 +63,7 @@ """ __docformat__ = 'epytext en' -import sys, os, time, re, pstats +import sys, os, time, re, pstats, pickle from glob import glob from optparse import OptionParser, OptionGroup import epydoc @@ -112,6 +112,9 @@ action_group.add_option( # --check "--check", action="store_const", dest="action", const="check", help="Check completeness of docs.") + action_group.add_option( + "--pickle", action="store_const", dest="action", const="pickle", + help="Write the documentation to a pickle file.") # Add options -- Options options_group.add_option( # --output @@ -229,7 +232,7 @@ docformat=DEFAULT_DOCFORMAT, show_private=True, show_imports=False, inheritance="listed", - verbose=0, quiet=0, + verbose=0, quiet=0, load_pickle=False, parse=True, introspect=True, debug=epydoc.DEBUG, profile=False, graphs=[], list_classes_separately=False, @@ -249,6 +252,14 @@ else: cf_name = 'config files %s' % ', '.join(options.configfiles) optparser.error('Error reading %s:\n %s' % (cf_name, e)) + + # Check if the input file is a pickle file. + for name in names: + if name.endswith('.pickle'): + if len(names) != 1: + optparse.error("When a pickle file is specified, no other " + "input files may be specified.") + options.load_pickle = True # Check to make sure all options are valid. if len(names) == 0: @@ -403,6 +414,8 @@ 30, # Parsing Docstrings 1, # Inheriting documentation 2] # Sorting & Grouping + if options.load_pickle: + stages = [30] # Loading pickled documentation if options.action == 'html': stages += [100] elif options.action == 'text': stages += [30] elif options.action == 'latex': stages += [60] @@ -410,6 +423,7 @@ elif options.action == 'ps': stages += [60,40] elif options.action == 'pdf': stages += [60,50] elif options.action == 'check': stages += [10] + elif options.action == 'pickle': stages += [10] else: raise ValueError, '%r not supported' % options.action if options.parse and not options.introspect: del stages[1] # no merging @@ -419,7 +433,7 @@ log.register_logger(logger) # check the output directory. - if options.action != 'text': + if options.action not in ('text', 'check', 'pickle'): if os.path.exists(options.target): if not os.path.isdir(options.target): return log.error("%s is not a directory" % options.target) @@ -433,10 +447,23 @@ from epydoc.docwriter import dotgraph dotgraph.DOT_PATH = options.dotpath - # Build docs for the named values. - from epydoc.docbuilder import build_doc_index - docindex = build_doc_index(names, options.introspect, options.parse, - add_submodules=(options.action!='text')) + # If the input name is a pickle file, then read the docindex that + # it contains. Otherwise, build the docs for the input names. + if options.load_pickle: + assert len(names) == 1 + log.start_progress('Deserializing') + log.progress(0.1, 'Loading %r' % names[0]) + t0 = time.time() + unpickler = pickle.Unpickler(open(names[0], 'rb')) + unpickler.persistent_load = pickle_persistent_load + docindex = unpickler.load() + log.debug('deserialization time: %.1f sec' % (time.time()-t0)) + log.end_progress() + else: + # Build docs for the named values. + from epydoc.docbuilder import build_doc_index + docindex = build_doc_index(names, options.introspect, options.parse, + add_submodules=(options.action!='text')) if docindex is None: return # docbuilder already logged an error. @@ -463,6 +490,8 @@ write_text(docindex, options) elif options.action == 'check': check_docs(docindex, options) + elif options.action == 'pickle': + write_pickle(docindex, options) else: print >>sys.stderr, '\nUnsupported action %s!' % options.action @@ -490,6 +519,37 @@ html_writer.write(options.target) log.end_progress() +def write_pickle(docindex, options): + """Helper for writing output to a pickle file, which can then be + read in at a later time. But loading the pickle is only marginally + faster than building the docs from scratch, so this has pretty + limited application.""" + if options.target == 'pickle': + options.target = 'api.pickle' + elif not options.target.endswith('.pickle'): + options.target += '.pickle' + + log.start_progress('Serializing output') + log.progress(0.2, 'Writing %r' % options.target) + outfile = open(options.target, 'wb') + pickler = pickle.Pickler(outfile, protocol=0) + pickler.persistent_id = pickle_persistent_id + pickler.dump(docindex) + outfile.close() + log.end_progress() + +def pickle_persistent_id(obj): + """Helper for pickling, which allows us to save and restore UNKNOWN, + which is required to be identical to apidoc.UNKNOWN.""" + if obj is UNKNOWN: return 'UNKNOWN' + else: return None + +def pickle_persistent_load(identifier): + """Helper for pickling, which allows us to save and restore UNKNOWN, + which is required to be identical to apidoc.UNKNOWN.""" + if identifier == 'UNKNOWN': return UNKNOWN + else: raise pickle.UnpicklingError, 'Invalid persistent id' + _RERUN_LATEX_RE = re.compile(r'(?im)^LaTeX\s+Warning:\s+Label\(s\)\s+may' r'\s+have\s+changed.\s+Rerun') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |