[Epydoc-commits] SF.net SVN: epydoc: [1704] trunk/epydoc/src/epydoc
Brought to you by:
edloper
From: <ed...@us...> - 2008-02-01 19:15:36
|
Revision: 1704 http://epydoc.svn.sourceforge.net/epydoc/?rev=1704&view=rev Author: edloper Date: 2008-02-01 11:15:34 -0800 (Fri, 01 Feb 2008) Log Message: ----------- - Deregister loggers before cli.main() exits. - Rearranged logger handling code in cli, to better handle the case where multiple loggers are used. Modified Paths: -------------- trunk/epydoc/src/epydoc/cli.py trunk/epydoc/src/epydoc/log.py Modified: trunk/epydoc/src/epydoc/cli.py =================================================================== --- trunk/epydoc/src/epydoc/cli.py 2008-01-31 06:52:33 UTC (rev 1703) +++ trunk/epydoc/src/epydoc/cli.py 2008-02-01 19:15:34 UTC (rev 1704) @@ -660,13 +660,15 @@ # options.parse = False # Set up the logger + loggers = [] if options.simple_term: TerminalController.FORCE_SIMPLE_TERM = True if options.action == 'text': - logger = None # no logger for text output. + pass # no logger for text output. elif options.verbosity > 1: logger = ConsoleLogger(options.verbosity) log.register_logger(logger) + loggers.append(logger) else: # Each number is a rough approximation of how long we spend on # that task, used to divide up the unified progress bar. @@ -695,6 +697,7 @@ del stages[1:3] # no merging or linking logger = UnifiedProgressConsoleLogger(options.verbosity, stages) log.register_logger(logger) + loggers.append(logger) # check the output directory. if options.action not in ('text', 'check', 'pickle'): @@ -707,7 +710,9 @@ if options.action == 'html': if not os.path.exists(options.target): os.mkdir(options.target) - log.register_logger(HTMLLogger(options.target, options)) + logger = HTMLLogger(options.target, options) + log.register_logger(logger) + loggers.append(logger) else: log.warning("--include-log requires --html") @@ -764,9 +769,11 @@ exclude_parse=exclude_parse) if docindex is None: - if log.ERROR in logger.reported_message_levels: - sys.exit(1) + for logger in loggers: + if log.ERROR in logger.reported_message_levels: + sys.exit(1) else: + for logger in loggers: log.remove_logger(logger) return # docbuilder already logged an error. # Load profile information, if it was given. @@ -778,7 +785,9 @@ profile_stats = pstats.Stats(options.pstat_files[0]) for filename in options.pstat_files[1:]: profile_stats.add(filename) - except KeyboardInterrupt: raise + except KeyboardInterrupt: + for logger in loggers: log.remove_logger(logger) + raise except Exception, e: log.error("Error reading pstat file: %s" % e) profile_stats = None @@ -800,18 +809,22 @@ print >>sys.stderr, '\nUnsupported action %s!' % options.action # If we suppressed docstring warnings, then let the user know. - if logger is not None and logger.suppressed_docstring_warning: - if logger.suppressed_docstring_warning == 1: - prefix = '1 markup error was found' - else: - prefix = ('%d markup errors were found' % - logger.suppressed_docstring_warning) - log.warning("%s while processing docstrings. Use the verbose " - "switch (-v) to display markup errors." % prefix) + for logger in loggers: + if (isinstance(logger, ConsoleLogger) and + logger.suppressed_docstring_warning): + if logger.suppressed_docstring_warning == 1: + prefix = '1 markup error was found' + else: + prefix = ('%d markup errors were found' % + logger.suppressed_docstring_warning) + logger.warning("%s while processing docstrings. Use the verbose " + "switch (-v) to display markup errors." % prefix) # Basic timing breakdown: - if options.verbosity >= 2 and logger is not None: - logger.print_times() + if options.verbosity >= 2: + for logger in logger: + if isinstance(logger, ConsoleLogger): + logger.print_times() # If we encountered any message types that we were requested to # fail on, then exit with status 2. @@ -820,6 +833,9 @@ if max_reported_message_level >= options.fail_on: sys.exit(2) + # Deregister our logger(s). + for logger in loggers: log.remove_logger(logger) + def write_html(docindex, options): from epydoc.docwriter.html import HTMLWriter html_writer = HTMLWriter(docindex, **options.__dict__) @@ -1309,7 +1325,7 @@ def start_progress(self, header=None): if self._progress is not None: - raise ValueError + raise ValueError('previous progress bar not ended') self._progress = None self._progress_start_time = time.time() self._progress_header = header @@ -1317,6 +1333,8 @@ print self.term.BOLD + header + self.term.NORMAL def end_progress(self): + if self._progress is None: + return # already ended. self.progress(1.) if self._progress_mode == 'bar': sys.stdout.write(self.term.CLEAR_LINE) @@ -1365,6 +1383,8 @@ if self.stage == 0: ConsoleLogger.start_progress(self) self.stage += 1 + if self.stage > len(self.stages): + self.stage = len(self.stages) # should never happen! def end_progress(self): if self.stage == len(self.stages): @@ -1448,6 +1468,7 @@ return self.MESSAGE % (level.split()[-1], hdr, message) def close(self): + if self.out is None: return if self.is_empty: self.out.write('<div class="log-info">' 'No warnings or errors!</div>') @@ -1457,6 +1478,7 @@ (time.ctime(), self._elapsed_time())) self.out.write(self.FOOTER) self.out.close() + self.out = None def _elapsed_time(self): secs = int(time.time()-self.start_time) Modified: trunk/epydoc/src/epydoc/log.py =================================================================== --- trunk/epydoc/src/epydoc/log.py 2008-01-31 06:52:33 UTC (rev 1703) +++ trunk/epydoc/src/epydoc/log.py 2008-02-01 19:15:34 UTC (rev 1704) @@ -66,7 +66,8 @@ def close(self): """ - Perform any tasks needed to close this logger. + Perform any tasks needed to close this logger. This should + be safe to call multiple times. """ #//////////////////////////////////////////////////////////// @@ -141,7 +142,8 @@ """ _loggers.append(logger) -def remove_logger(logger): +def remove_logger(logger, close_logger=True): + if close_logger: logger.close() _loggers.remove(logger) ###################################################################### This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |