mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Add sphinx.util.logging.pending_warnings()
This commit is contained in:
parent
d8ad3d063c
commit
ad871e5a48
@ -287,7 +287,7 @@ class Builder(object):
|
|||||||
logger.info(bold('building [%s]' % self.name) + ': ' + summary)
|
logger.info(bold('building [%s]' % self.name) + ': ' + summary)
|
||||||
|
|
||||||
# while reading, collect all warnings from docutils
|
# while reading, collect all warnings from docutils
|
||||||
with logging.pending_logging():
|
with logging.pending_warnings():
|
||||||
updated_docnames = set(self.env.update(self.config, self.srcdir,
|
updated_docnames = set(self.env.update(self.config, self.srcdir,
|
||||||
self.doctreedir, self.app))
|
self.doctreedir, self.app))
|
||||||
|
|
||||||
@ -386,7 +386,7 @@ class Builder(object):
|
|||||||
|
|
||||||
def _write_serial(self, docnames):
|
def _write_serial(self, docnames):
|
||||||
# type: (Sequence[unicode]) -> None
|
# type: (Sequence[unicode]) -> None
|
||||||
with logging.pending_logging():
|
with logging.pending_warnings():
|
||||||
for docname in self.app.status_iterator(
|
for docname in self.app.status_iterator(
|
||||||
docnames, 'writing output... ', darkgreen, len(docnames)):
|
docnames, 'writing output... ', darkgreen, len(docnames)):
|
||||||
doctree = self.env.get_and_resolve_doctree(docname, self)
|
doctree = self.env.get_and_resolve_doctree(docname, self)
|
||||||
|
@ -126,6 +126,11 @@ class SphinxLoggerAdapter(logging.LoggerAdapter):
|
|||||||
self.logger.handle(record) # type: ignore
|
self.logger.handle(record) # type: ignore
|
||||||
|
|
||||||
|
|
||||||
|
class WarningStreamHandler(logging.StreamHandler):
|
||||||
|
"""StreamHandler for warnings."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class NewLineStreamHandlerPY2(logging.StreamHandler):
|
class NewLineStreamHandlerPY2(logging.StreamHandler):
|
||||||
"""StreamHandler which switches line terminator by record.nonl flag."""
|
"""StreamHandler which switches line terminator by record.nonl flag."""
|
||||||
|
|
||||||
@ -195,10 +200,36 @@ class MemoryHandler(logging.handlers.BufferingHandler):
|
|||||||
return buffer
|
return buffer
|
||||||
|
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def pending_warnings():
|
||||||
|
# type: () -> Generator
|
||||||
|
"""contextmanager to pend logging warnings temporary."""
|
||||||
|
logger = logging.getLogger()
|
||||||
|
memhandler = MemoryHandler()
|
||||||
|
memhandler.setLevel(logging.WARNING)
|
||||||
|
|
||||||
|
try:
|
||||||
|
handlers = []
|
||||||
|
for handler in logger.handlers[:]:
|
||||||
|
if isinstance(handler, WarningStreamHandler):
|
||||||
|
logger.removeHandler(handler)
|
||||||
|
handlers.append(handler)
|
||||||
|
|
||||||
|
logger.addHandler(memhandler)
|
||||||
|
yield memhandler
|
||||||
|
finally:
|
||||||
|
logger.removeHandler(memhandler)
|
||||||
|
|
||||||
|
for handler in handlers:
|
||||||
|
logger.addHandler(handler)
|
||||||
|
|
||||||
|
memhandler.flushTo(logger)
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def pending_logging():
|
def pending_logging():
|
||||||
# type: () -> Generator
|
# type: () -> Generator
|
||||||
"""contextmanager to pend logging temporary."""
|
"""contextmanager to pend logging all logs temporary."""
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
memhandler = MemoryHandler()
|
memhandler = MemoryHandler()
|
||||||
|
|
||||||
@ -357,7 +388,7 @@ def setup(app, status, warning):
|
|||||||
info_handler.setLevel(VERBOSITY_MAP.get(app.verbosity))
|
info_handler.setLevel(VERBOSITY_MAP.get(app.verbosity))
|
||||||
info_handler.setFormatter(ColorizeFormatter())
|
info_handler.setFormatter(ColorizeFormatter())
|
||||||
|
|
||||||
warning_handler = logging.StreamHandler(warning)
|
warning_handler = WarningStreamHandler(warning)
|
||||||
warning_handler.addFilter(WarningSuppressor(app))
|
warning_handler.addFilter(WarningSuppressor(app))
|
||||||
warning_handler.addFilter(WarningIsErrorFilter(app))
|
warning_handler.addFilter(WarningIsErrorFilter(app))
|
||||||
warning_handler.addFilter(WarningLogRecordTranslator(app))
|
warning_handler.addFilter(WarningLogRecordTranslator(app))
|
||||||
|
@ -225,12 +225,12 @@ def test_warn_node(app, status, warning):
|
|||||||
|
|
||||||
|
|
||||||
@with_app()
|
@with_app()
|
||||||
def test_pending_logging(app, status, warning):
|
def test_pending_warnings(app, status, warning):
|
||||||
logging.setup(app, status, warning)
|
logging.setup(app, status, warning)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
logger.warning('message1')
|
logger.warning('message1')
|
||||||
with logging.pending_logging():
|
with logging.pending_warnings():
|
||||||
# not logged yet (bufferred) in here
|
# not logged yet (bufferred) in here
|
||||||
logger.warning('message2')
|
logger.warning('message2')
|
||||||
logger.warning('message3')
|
logger.warning('message3')
|
||||||
|
Loading…
Reference in New Issue
Block a user