mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Move status_iterator to application object.
This commit is contained in:
parent
71cd2f7e50
commit
905cbf853d
@ -39,7 +39,8 @@ from sphinx.environment import BuildEnvironment, SphinxStandaloneReader
|
||||
from sphinx.util import pycompat # imported for side-effects
|
||||
from sphinx.util.tags import Tags
|
||||
from sphinx.util.osutil import ENOENT
|
||||
from sphinx.util.console import bold, lightgray, darkgray
|
||||
from sphinx.util.console import bold, lightgray, darkgray, darkgreen, \
|
||||
term_width_line
|
||||
|
||||
if hasattr(sys, 'intern'):
|
||||
intern = sys.intern
|
||||
@ -351,6 +352,48 @@ class Sphinx(object):
|
||||
message = message % (args or kwargs)
|
||||
self._log(lightgray(message), self._status)
|
||||
|
||||
def _display_chunk(chunk):
|
||||
if isinstance(chunk, (list, tuple)):
|
||||
if len(chunk) == 1:
|
||||
return str(chunk[0])
|
||||
return '%s .. %s' % (chunk[0], chunk[-1])
|
||||
return str(chunk)
|
||||
|
||||
def old_status_iterator(self, iterable, summary, colorfunc=darkgreen,
|
||||
stringify_func=_display_chunk):
|
||||
l = 0
|
||||
for item in iterable:
|
||||
if l == 0:
|
||||
self.info(bold(summary), nonl=1)
|
||||
l = 1
|
||||
self.info(colorfunc(stringify_func(item)) + ' ', nonl=1)
|
||||
yield item
|
||||
if l == 1:
|
||||
self.info()
|
||||
|
||||
# new version with progress info
|
||||
def status_iterator(self, iterable, summary, colorfunc=darkgreen, length=0,
|
||||
stringify_func=_display_chunk):
|
||||
if length == 0:
|
||||
for item in self.old_status_iterator(iterable, summary, colorfunc,
|
||||
stringify_func):
|
||||
yield item
|
||||
return
|
||||
l = 0
|
||||
summary = bold(summary)
|
||||
for item in iterable:
|
||||
l += 1
|
||||
s = '%s[%3d%%] %s' % (summary, 100*l/length,
|
||||
colorfunc(stringify_func(item)))
|
||||
if self.verbosity:
|
||||
s += '\n'
|
||||
else:
|
||||
s = term_width_line(s)
|
||||
self.info(s, nonl=1)
|
||||
yield item
|
||||
if l > 0:
|
||||
self.info()
|
||||
|
||||
# ---- general extensibility interface -------------------------------------
|
||||
|
||||
def setup_extension(self, extension):
|
||||
|
@ -22,7 +22,7 @@ from docutils import nodes
|
||||
|
||||
from sphinx.util import i18n, path_stabilize
|
||||
from sphinx.util.osutil import SEP, relative_uri, find_catalog
|
||||
from sphinx.util.console import bold, purple, darkgreen, term_width_line
|
||||
from sphinx.util.console import bold, purple, darkgreen
|
||||
|
||||
# side effect: registers roles and directives
|
||||
from sphinx import roles
|
||||
@ -62,6 +62,9 @@ class Builder(object):
|
||||
self.tags.add(self.name)
|
||||
self.tags.add("format_%s" % self.format)
|
||||
self.tags.add("builder_%s" % self.name)
|
||||
# compatibility aliases
|
||||
self.status_iterator = app.status_iterator
|
||||
self.old_status_iterator = app.old_status_iterator
|
||||
|
||||
# images that need to be copied over (source -> dest)
|
||||
self.images = {}
|
||||
@ -113,41 +116,6 @@ class Builder(object):
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def old_status_iterator(self, iterable, summary, colorfunc=darkgreen,
|
||||
stringify_func=lambda x: x):
|
||||
l = 0
|
||||
for item in iterable:
|
||||
if l == 0:
|
||||
self.info(bold(summary), nonl=1)
|
||||
l = 1
|
||||
self.info(colorfunc(stringify_func(item)) + ' ', nonl=1)
|
||||
yield item
|
||||
if l == 1:
|
||||
self.info()
|
||||
|
||||
# new version with progress info
|
||||
def status_iterator(self, iterable, summary, colorfunc=darkgreen, length=0,
|
||||
stringify_func=lambda x: x):
|
||||
if length == 0:
|
||||
for item in self.old_status_iterator(iterable, summary, colorfunc,
|
||||
stringify_func):
|
||||
yield item
|
||||
return
|
||||
l = 0
|
||||
summary = bold(summary)
|
||||
for item in iterable:
|
||||
l += 1
|
||||
s = '%s[%3d%%] %s' % (summary, 100*l/length,
|
||||
colorfunc(stringify_func(item)))
|
||||
if self.app.verbosity:
|
||||
s += '\n'
|
||||
else:
|
||||
s = term_width_line(s)
|
||||
self.info(s, nonl=1)
|
||||
yield item
|
||||
if l > 0:
|
||||
self.info()
|
||||
|
||||
supported_image_types = []
|
||||
|
||||
def post_process_images(self, doctree):
|
||||
@ -181,7 +149,7 @@ class Builder(object):
|
||||
return
|
||||
self.info(bold('building [mo]: '), nonl=1)
|
||||
self.info(message)
|
||||
for catalog in self.status_iterator(
|
||||
for catalog in self.app.status_iterator(
|
||||
catalogs, 'writing output... ', darkgreen, len(catalogs),
|
||||
lambda c: c.mo_path):
|
||||
catalog.write_mo(self.config.language)
|
||||
@ -370,7 +338,7 @@ class Builder(object):
|
||||
self.env.set_warnfunc(self.warn)
|
||||
|
||||
def _write_serial(self, docnames, warnings):
|
||||
for docname in self.status_iterator(
|
||||
for docname in self.app.status_iterator(
|
||||
docnames, 'writing output... ', darkgreen, len(docnames)):
|
||||
doctree = self.env.get_and_resolve_doctree(docname, self)
|
||||
self.write_doc_serialized(docname, doctree)
|
||||
@ -415,9 +383,8 @@ class Builder(object):
|
||||
nchunks += 1
|
||||
# partition documents in "chunks" that will be written by one Process
|
||||
chunks = [docnames[i*chunksize:(i+1)*chunksize] for i in range(nchunks)]
|
||||
for docnames in self.status_iterator(
|
||||
chunks, 'writing output... ', darkgreen, len(chunks),
|
||||
lambda chk: '%s .. %s' % (chk[0], chk[-1])):
|
||||
for docnames in self.app.status_iterator(
|
||||
chunks, 'writing output... ', darkgreen, len(chunks)):
|
||||
docs = []
|
||||
for docname in docnames:
|
||||
doctree = self.env.get_and_resolve_doctree(docname, self)
|
||||
|
@ -405,8 +405,8 @@ class EpubBuilder(StandaloneHTMLBuilder):
|
||||
converting the format and resizing the image if necessary/possible.
|
||||
"""
|
||||
ensuredir(path.join(self.outdir, '_images'))
|
||||
for src in self.status_iterator(self.images, 'copying images... ',
|
||||
brown, len(self.images)):
|
||||
for src in self.app.status_iterator(self.images, 'copying images... ',
|
||||
brown, len(self.images)):
|
||||
dest = self.images[src]
|
||||
try:
|
||||
img = Image.open(path.join(self.srcdir, src))
|
||||
|
@ -170,8 +170,8 @@ class MessageCatalogBuilder(I18nBuilder):
|
||||
|
||||
extract_translations = self.templates.environment.extract_translations
|
||||
|
||||
for template in self.status_iterator(files,
|
||||
'reading templates... ', purple, len(files)):
|
||||
for template in self.app.status_iterator(
|
||||
files, 'reading templates... ', purple, len(files)):
|
||||
with open(template, 'r', encoding='utf-8') as f:
|
||||
context = f.read()
|
||||
for line, meth, msg in extract_translations(context):
|
||||
@ -191,7 +191,7 @@ class MessageCatalogBuilder(I18nBuilder):
|
||||
ctime = datetime.fromtimestamp(
|
||||
timestamp, ltz).strftime('%Y-%m-%d %H:%M%z'),
|
||||
)
|
||||
for textdomain, catalog in self.status_iterator(
|
||||
for textdomain, catalog in self.app.status_iterator(
|
||||
iteritems(self.catalogs), "writing message catalogs... ",
|
||||
darkgreen, len(self.catalogs),
|
||||
lambda textdomain__: textdomain__[0]):
|
||||
|
@ -526,8 +526,8 @@ class StandaloneHTMLBuilder(Builder):
|
||||
# copy image files
|
||||
if self.images:
|
||||
ensuredir(path.join(self.outdir, '_images'))
|
||||
for src in self.status_iterator(self.images, 'copying images... ',
|
||||
brown, len(self.images)):
|
||||
for src in self.app.status_iterator(self.images, 'copying images... ',
|
||||
brown, len(self.images)):
|
||||
dest = self.images[src]
|
||||
try:
|
||||
copyfile(path.join(self.srcdir, src),
|
||||
@ -540,9 +540,9 @@ class StandaloneHTMLBuilder(Builder):
|
||||
# copy downloadable files
|
||||
if self.env.dlfiles:
|
||||
ensuredir(path.join(self.outdir, '_downloads'))
|
||||
for src in self.status_iterator(self.env.dlfiles,
|
||||
'copying downloadable files... ',
|
||||
brown, len(self.env.dlfiles)):
|
||||
for src in self.app.status_iterator(self.env.dlfiles,
|
||||
'copying downloadable files... ',
|
||||
brown, len(self.env.dlfiles)):
|
||||
dest = self.env.dlfiles[src][1]
|
||||
try:
|
||||
copyfile(path.join(self.srcdir, src),
|
||||
|
Loading…
Reference in New Issue
Block a user