def run(self): if not color_terminal(): nocolor() if not self.verbose: status_stream = StringIO() else: status_stream = sys.stdout confoverrides = {} if self.project: confoverrides['project'] = self.project if self.version: confoverrides['version'] = self.version if self.release: confoverrides['release'] = self.release if self.today: confoverrides['today'] = self.today if self.copyright: confoverrides['copyright'] = self.copyright app = Sphinx(self.source_dir, self.config_dir, self.builder_target_dir, self.doctree_dir, self.builder, confoverrides, status_stream, freshenv=self.fresh_env) try: app.build(force_all=self.all_files) if app.statuscode: raise DistutilsExecError('caused by %s builder.' % app.builder.name) except Exception as err: if self.pdb: import pdb print(darkred( 'Exception occurred while building, starting debugger:'), file=sys.stderr) traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) else: from docutils.utils import SystemMessage if isinstance(err, SystemMessage): print(darkred('reST markup error:'), file=sys.stderr) print(err.args[0].encode('ascii', 'backslashreplace'), file=sys.stderr) else: raise if self.link_index: src = app.config.master_doc + app.builder.out_suffix dst = app.builder.get_outfilename('index') os.symlink(src, dst)
def run(self): if not color_terminal(): nocolor() if not self.verbose: status_stream = StringIO() else: status_stream = sys.stdout confoverrides = {} if self.project: confoverrides['project'] = self.project if self.version: confoverrides['version'] = self.version if self.release: confoverrides['release'] = self.release if self.today: confoverrides['today'] = self.today if self.copyright: confoverrides['copyright'] = self.copyright app = Sphinx(self.source_dir, self.config_dir, self.builder_target_dir, self.doctree_dir, self.builder, confoverrides, status_stream, freshenv=self.fresh_env, warningiserror=self.warning_is_error) try: app.build(force_all=self.all_files) if app.statuscode: raise DistutilsExecError( 'caused by %s builder.' % app.builder.name) except Exception as err: if self.pdb: import pdb print(darkred('Exception occurred while building, starting debugger:'), file=sys.stderr) traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) else: from docutils.utils import SystemMessage if isinstance(err, SystemMessage): print(darkred('reST markup error:'), file=sys.stderr) print(err.args[0].encode('ascii', 'backslashreplace'), file=sys.stderr) else: raise if self.link_index: src = app.config.master_doc + app.builder.out_suffix dst = app.builder.get_outfilename('index') os.symlink(src, dst)
def run(self): if not color_terminal(): # Windows' poor cmd box doesn't understand ANSI sequences nocolor() if not self.verbose: status_stream = StringIO() else: status_stream = sys.stdout confoverrides = {} if self.project: confoverrides['project'] = self.project if self.version: confoverrides['version'] = self.version if self.release: confoverrides['release'] = self.release if self.today: confoverrides['today'] = self.today app = Sphinx(self.source_dir, self.config_dir, self.builder_target_dir, self.doctree_dir, self.builder, confoverrides, status_stream, freshenv=self.fresh_env) try: app.build(force_all=self.all_files) except Exception, err: from docutils.utils import SystemMessage if isinstance(err, SystemMessage): print >>sys.stderr, darkred('reST markup error:') print >>sys.stderr, err.args[0].encode('ascii', 'backslashreplace') else: raise
def run(self): if not color_terminal(): # Windows' poor cmd box doesn't understand ANSI sequences nocolor() if not self.verbose: status_stream = StringIO() else: status_stream = sys.stdout app = Sphinx(self.source_dir, self.source_dir, self.builder_target_dir, self.doctree_dir, self.builder, {}, status_stream, freshenv=self.fresh_env) try: if self.all_files: app.builder.build_all() else: app.builder.build_update() except Exception, err: from docutils.utils import SystemMessage if isinstance(err, SystemMessage): sys.stderr, darkred('reST markup error:') print >> sys.stderr, err.args[0].encode( 'ascii', 'backslashreplace') else: raise
def run(self): if not color_terminal(): # Windows' poor cmd box doesn't understand ANSI sequences nocolor() if not self.verbose: status_stream = StringIO() else: status_stream = sys.stdout confoverrides = {} if self.version: confoverrides['version'] = self.version if self.release: confoverrides['release'] = self.release if self.today: confoverrides['today'] = self.today app = Sphinx(self.source_dir, self.config_dir, self.builder_target_dir, self.doctree_dir, self.builder, confoverrides, status_stream, freshenv=self.fresh_env) try: app.build(force_all=self.all_files) except Exception, err: from docutils.utils import SystemMessage if isinstance(err, SystemMessage): print >>sys.stderr, darkred('reST markup error:') print >>sys.stderr, err.args[0].encode('ascii', 'backslashreplace') else: raise
def run(self): if not sys.stdout.isatty() or sys.platform == 'win32': # Windows' poor cmd box doesn't understand ANSI sequences nocolor() if not self.verbose: status_stream = StringIO() else: status_stream = sys.stdout app = Sphinx(self.source_dir, self.source_dir, self.builder_target_dir, self.doctree_dir, self.builder, {}, status_stream, freshenv=self.fresh_env) try: if self.all_files: app.builder.build_all() else: app.builder.build_update() except Exception, err: from docutils.utils import SystemMessage if isinstance(err, SystemMessage): sys.stderr, darkred('reST markup error:') print >>sys.stderr, err.args[0].encode('ascii', 'backslashreplace') else: raise
def logger_func(string): if string.startswith("preserved"): return elif string.startswith("rewrote"): string = purple(string) elif string.startswith("pruned"): string = darkred(string) elif string.startswith("wrote"): string = darkgreen(string) logger.info("{} {}".format(bold("[uqbar-api]"), string))
def run(self): if not color_terminal(): # Windows' poor cmd box doesn't understand ANSI sequences nocolor() if not self.verbose: status_stream = StringIO() else: status_stream = sys.stdout confoverrides = {} if self.project: confoverrides['project'] = self.project if self.version: confoverrides['version'] = self.version if self.release: confoverrides['release'] = self.release if self.today: confoverrides['today'] = self.today app = Sphinx(self.source_dir, self.config_dir, self.builder_target_dir, self.doctree_dir, self.builder, confoverrides, status_stream, freshenv=self.fresh_env) try: app.build(force_all=self.all_files) except Exception as err: from docutils.utils import SystemMessage if isinstance(err, SystemMessage): print(darkred('reST markup error:'), file=sys.stderr) print(err.args[0].encode('ascii', 'backslashreplace'), file=sys.stderr) else: raise if self.link_index: src = app.config.master_doc + app.builder.out_suffix dst = app.builder.get_outfilename('index') os.symlink(src, dst)
def main(argv=sys.argv): if not sys.stdout.isatty() or sys.platform == 'win32': # Windows' poor cmd box doesn't understand ANSI sequences nocolor() try: opts, args = getopt.getopt(argv[1:], 'ab:d:D:NEqP') srcdir = path.abspath(args[0]) if not path.isdir(srcdir): print >> sys.stderr, 'Error: Cannot find source directory.' return 1 if not path.isfile(path.join(srcdir, 'conf.py')): print >> sys.stderr, 'Error: Source directory doesn\'t contain conf.py file.' return 1 outdir = path.abspath(args[1]) if not path.isdir(outdir): print >> sys.stderr, 'Error: Cannot find output directory.' return 1 except (IndexError, getopt.error): usage(argv) return 1 filenames = args[2:] err = 0 for filename in filenames: if not path.isfile(filename): print >> sys.stderr, 'Cannot find file %r.' % filename err = 1 if err: return 1 buildername = all_files = None freshenv = use_pdb = False status = sys.stdout confoverrides = {} doctreedir = path.join(outdir, '.doctrees') for opt, val in opts: if opt == '-b': buildername = val elif opt == '-a': if filenames: usage(argv, 'Cannot combine -a option and filenames.') return 1 all_files = True elif opt == '-d': doctreedir = val elif opt == '-D': key, val = val.split('=') try: val = int(val) except: pass confoverrides[key] = val elif opt == '-N': nocolor() elif opt == '-E': freshenv = True elif opt == '-q': status = StringIO() elif opt == '-P': use_pdb = True try: app = Sphinx(srcdir, outdir, doctreedir, buildername, confoverrides, status, sys.stderr, freshenv) if not app.builder: return 1 if all_files: app.builder.build_all() elif filenames: app.builder.build_specific(filenames) else: app.builder.build_update() except KeyboardInterrupt: # catches BaseExceptions in 2.5 -- SystemExit, KeyboardInterrupt return 1 except SystemExit: return 0 except Exception, err: if use_pdb: import pdb print >> sys.stderr, darkred('Exception occurred while building, ' 'starting debugger:') traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) else: if isinstance(err, SystemMessage): print >> sys.stderr, darkred('reST markup error:') print >> sys.stderr, str(err) else: print >> sys.stderr, darkred('Exception occurred:') print >> sys.stderr, format_exception_cut_frames().rstrip() tbpath = save_traceback() print >> sys.stderr, darkred( 'The full traceback has been saved ' 'in %s, if you want to report the ' 'issue to the author.' % tbpath) print >> sys.stderr, ( 'Please also report this if it was a user ' 'error, so that a better error message ' 'can be provided next time.') print >> sys.stderr, 'Send reports to [email protected]. Thanks!' return 1
def main(argv=sys.argv): # delay-import these to be able to get sphinx.__version__ from setup.py # even without docutils installed from sphinx.application import Sphinx, SphinxError from docutils.utils import SystemMessage if not sys.stdout.isatty() or sys.platform == 'win32': # Windows' poor cmd box doesn't understand ANSI sequences nocolor() try: opts, args = getopt.getopt(argv[1:], 'ab:d:c:D:NEqP') srcdir = confdir = path.abspath(args[0]) if not path.isdir(srcdir): print >>sys.stderr, 'Error: Cannot find source directory.' return 1 if not path.isfile(path.join(srcdir, 'conf.py')) and \ '-c' not in (opt[0] for opt in opts): print >>sys.stderr, 'Error: Source directory doesn\'t contain conf.py file.' return 1 outdir = path.abspath(args[1]) if not path.isdir(outdir): print >>sys.stderr, 'Error: Cannot find output directory.' return 1 except (IndexError, getopt.error): usage(argv) return 1 filenames = args[2:] err = 0 for filename in filenames: if not path.isfile(filename): print >>sys.stderr, 'Cannot find file %r.' % filename err = 1 if err: return 1 buildername = all_files = None freshenv = use_pdb = False status = sys.stdout confoverrides = {} doctreedir = path.join(outdir, '.doctrees') for opt, val in opts: if opt == '-b': buildername = val elif opt == '-a': if filenames: usage(argv, 'Cannot combine -a option and filenames.') return 1 all_files = True elif opt == '-d': doctreedir = path.abspath(val) elif opt == '-c': confdir = path.abspath(val) if not path.isfile(path.join(confdir, 'conf.py')): print >>sys.stderr, \ 'Error: Configuration directory doesn\'t contain conf.py file.' return 1 elif opt == '-D': key, val = val.split('=') try: val = int(val) except ValueError: pass confoverrides[key] = val elif opt == '-N': nocolor() elif opt == '-E': freshenv = True elif opt == '-q': status = StringIO() elif opt == '-P': use_pdb = True try: app = Sphinx(srcdir, confdir, outdir, doctreedir, buildername, confoverrides, status, sys.stderr, freshenv) app.build(all_files, filenames) except KeyboardInterrupt: if use_pdb: import pdb print >>sys.stderr, darkred('Interrupted while building, starting debugger:') traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) return 1 except Exception, err: if use_pdb: import pdb print >>sys.stderr, darkred('Exception occurred while building, ' 'starting debugger:') traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) else: if isinstance(err, SystemMessage): print >>sys.stderr, darkred('reST markup error:') print >>sys.stderr, err.args[0].encode('ascii', 'backslashreplace') elif isinstance(err, SphinxError): print >>sys.stderr, darkred('%s:' % err.category) print >>sys.stderr, err else: print >>sys.stderr, darkred('Exception occurred:') print >>sys.stderr, format_exception_cut_frames().rstrip() tbpath = save_traceback() print >>sys.stderr, darkred('The full traceback has been saved ' 'in %s, if you want to report the ' 'issue to the author.' % tbpath) print >>sys.stderr, ('Please also report this if it was a user ' 'error, so that a better error message ' 'can be provided next time.') print >>sys.stderr, ('Send reports to [email protected]. ' 'Thanks!') return 1
def main(argv=sys.argv): if not sys.stdout.isatty() or sys.platform == 'win32': # Windows' poor cmd box doesn't understand ANSI sequences nocolor() try: opts, args = getopt.getopt(argv[1:], 'ab:d:D:NEqP') srcdir = path.abspath(args[0]) if not path.isdir(srcdir): print >>sys.stderr, 'Error: Cannot find source directory.' return 1 if not path.isfile(path.join(srcdir, 'conf.py')): print >>sys.stderr, 'Error: Source directory doesn\'t contain conf.py file.' return 1 outdir = path.abspath(args[1]) if not path.isdir(outdir): print >>sys.stderr, 'Error: Cannot find output directory.' return 1 except (IndexError, getopt.error): usage(argv) return 1 filenames = args[2:] err = 0 for filename in filenames: if not path.isfile(filename): print >>sys.stderr, 'Cannot find file %r.' % filename err = 1 if err: return 1 buildername = all_files = None freshenv = use_pdb = False status = sys.stdout confoverrides = {} doctreedir = path.join(outdir, '.doctrees') for opt, val in opts: if opt == '-b': buildername = val elif opt == '-a': if filenames: usage(argv, 'Cannot combine -a option and filenames.') return 1 all_files = True elif opt == '-d': doctreedir = val elif opt == '-D': key, val = val.split('=') try: val = int(val) except: pass confoverrides[key] = val elif opt == '-N': nocolor() elif opt == '-E': freshenv = True elif opt == '-q': status = StringIO() elif opt == '-P': use_pdb = True try: app = Sphinx(srcdir, outdir, doctreedir, buildername, confoverrides, status, sys.stderr, freshenv) if not app.builder: return 1 if all_files: app.builder.build_all() elif filenames: app.builder.build_specific(filenames) else: app.builder.build_update() except KeyboardInterrupt: # catches BaseExceptions in 2.5 -- SystemExit, KeyboardInterrupt return 1 except SystemExit: return 0 except Exception, err: if use_pdb: import pdb print >>sys.stderr, darkred('Exception occurred while building, ' 'starting debugger:') traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) else: if isinstance(err, SystemMessage): print >>sys.stderr, darkred('reST markup error:') print >>sys.stderr, str(err) else: print >>sys.stderr, darkred('Exception occurred:') print >>sys.stderr, format_exception_cut_frames().rstrip() tbpath = save_traceback() print >>sys.stderr, darkred('The full traceback has been saved ' 'in %s, if you want to report the ' 'issue to the author.' % tbpath) print >>sys.stderr, ('Please also report this if it was a user ' 'error, so that a better error message ' 'can be provided next time.') print >>sys.stderr, 'Send reports to [email protected]. Thanks!' return 1
def main(): # check that the linkcheck file exists linkcheck_file = os.path.join('build', 'linkcheck', 'output.txt') if not os.path.exists(linkcheck_file): error_exit('no linkcheck output file; run make linkcheck') # check that it hasn't been more than a day since the last linkcheck last_linkcheck = datetime.fromtimestamp(os.path.getmtime(linkcheck_file)) if datetime.now() - last_linkcheck > timedelta(days=1): error_exit('linkcheck output outdated; run make linkcheck') # parse each line of the linkcheck output.txt file with open(linkcheck_file) as fp: lines = fp.readlines() local = {} broken = {} perm_redirects = {} temp_redirects = {} for line in lines: m = LINE_RE.match(line) if m is None: error_exit('could not parse: {!r}'.format(line)) continue filename, lineno, status, url, more = m.groups() # ignore links with certain status messages if '429' in more and 'Too Many Requests' in more.title(): continue # gather data for broken urls elif status == 'broken': url = url.rstrip(':') m = REASON_RE.match(more) more = m.group(1) if m else more.strip() broken.setdefault(filename, {})[url] = more # gather local links elif status == 'local': local.setdefault(filename, set()).add(url) # gather data for permanent redirects elif status == 'redirected permanently': dst = more.split(' to ', 1)[-1].strip() perm_redirects.setdefault(filename, {})[url] = dst # gather data for ...other ...temporary? redirects elif status.startswith('redirected'): dst = more.split(' to ', 1)[-1].strip() temp_redirects.setdefault(filename, {})[url] = dst n = update_redirects(perm_redirects) print() urls = {x for urls in perm_redirects.values() for x in urls.items()} print(white('Found {} links returning 301s [{} replacements made]'.format(len(urls), n))) for src, dst in sorted(urls): print(src + darkgreen(' -> ' + dst)) print() urls = {x for urls in temp_redirects.values() for x in urls.items()} print(white('Found {} links returning other 300 codes [no replacements made]'.format(len(urls)))) for src, dst in sorted(urls): print(src + purple(' -> ' + dst)) print() urls = {x for urls in broken.values() for x in urls.items()} print(white('Found {} links returning error codes (excluding 429)'.format(len(urls)))) for url, reason in sorted(urls): print(url + darkred(' - ' + reason))
def main(argv=sys.argv): # delay-import these to be able to get sphinx.__version__ from setup.py # even without docutils installed from sphinx.application import Sphinx from docutils.utils import SystemMessage if not sys.stdout.isatty() or sys.platform == "win32": # Windows' poor cmd box doesn't understand ANSI sequences nocolor() try: opts, args = getopt.getopt(argv[1:], "ab:d:c:D:NEqP") srcdir = confdir = path.abspath(args[0]) if not path.isdir(srcdir): print >>sys.stderr, "Error: Cannot find source directory." return 1 if not path.isfile(path.join(srcdir, "conf.py")) and "-c" not in (opt[0] for opt in opts): print >>sys.stderr, "Error: Source directory doesn't contain conf.py file." return 1 outdir = path.abspath(args[1]) if not path.isdir(outdir): print >>sys.stderr, "Error: Cannot find output directory." return 1 except (IndexError, getopt.error): usage(argv) return 1 filenames = args[2:] err = 0 for filename in filenames: if not path.isfile(filename): print >>sys.stderr, "Cannot find file %r." % filename err = 1 if err: return 1 buildername = all_files = None freshenv = use_pdb = False status = sys.stdout confoverrides = {} doctreedir = path.join(outdir, ".doctrees") for opt, val in opts: if opt == "-b": buildername = val elif opt == "-a": if filenames: usage(argv, "Cannot combine -a option and filenames.") return 1 all_files = True elif opt == "-d": doctreedir = val elif opt == "-c": confdir = path.abspath(val) if not path.isfile(path.join(confdir, "conf.py")): print >>sys.stderr, "Error: Configuration directory doesn't contain conf.py file." return 1 elif opt == "-D": key, val = val.split("=") try: val = int(val) except ValueError: pass confoverrides[key] = val elif opt == "-N": nocolor() elif opt == "-E": freshenv = True elif opt == "-q": status = StringIO() elif opt == "-P": use_pdb = True try: app = Sphinx(srcdir, confdir, outdir, doctreedir, buildername, confoverrides, status, sys.stderr, freshenv) if not app.builder: return 1 if all_files: app.builder.build_all() elif filenames: app.builder.build_specific(filenames) else: app.builder.build_update() except KeyboardInterrupt: # catches BaseExceptions in 2.5 -- SystemExit, KeyboardInterrupt if use_pdb: import pdb print >>sys.stderr, darkred("Interrupted while building, starting debugger:") traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) return 1 except Exception, err: if use_pdb: import pdb print >>sys.stderr, darkred("Exception occurred while building, " "starting debugger:") traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) else: if isinstance(err, SystemMessage): print >>sys.stderr, darkred("reST markup error:") print >>sys.stderr, err.args[0].encode("ascii", "backslashreplace") else: print >>sys.stderr, darkred("Exception occurred:") print >>sys.stderr, format_exception_cut_frames().rstrip() tbpath = save_traceback() print >>sys.stderr, darkred( "The full traceback has been saved " "in %s, if you want to report the " "issue to the author." % tbpath ) print >>sys.stderr, ( "Please also report this if it was a user " "error, so that a better error message " "can be provided next time." ) print >>sys.stderr, ("Send reports to [email protected]. " "Thanks!") return 1