Skip to content

Commit

Permalink
Give a warning when extensions are explicitly not parallel safe
Browse files Browse the repository at this point in the history
  • Loading branch information
astrofrog committed Nov 11, 2019
1 parent c2d64a9 commit 9922698
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 deletions.
23 changes: 14 additions & 9 deletions sphinx/application.py
Expand Up @@ -1126,28 +1126,33 @@ def is_parallel_allowed(self, typ):
``typ`` is a type of processing; ``'read'`` or ``'write'``.
"""

if typ == 'read':
attrname = 'parallel_read_safe'
message = __("the %s extension does not declare if it is safe "
"for parallel reading, assuming it isn't - please "
"ask the extension author to check and make it "
"explicit")
message_none = __("the %s extension does not declare if it is safe "
"for parallel reading, assuming it isn't - please "
"ask the extension author to check and make it "
"explicit")
message_false = "the %s extension is not safe for parallel reading"
elif typ == 'write':
attrname = 'parallel_write_safe'
message = __("the %s extension does not declare if it is safe "
"for parallel writing, assuming it isn't - please "
"ask the extension author to check and make it "
"explicit")
message_none = __("the %s extension does not declare if it is safe "
"for parallel writing, assuming it isn't - please "
"ask the extension author to check and make it "
"explicit")
message_false = "the %s extension is not safe for parallel writing"
else:
raise ValueError('parallel type %s is not supported' % typ)

for ext in self.extensions.values():
allowed = getattr(ext, attrname, None)
if allowed is None:
logger.warning(message, ext.name)
logger.warning(message_none, ext.name)
logger.warning(__('doing serial %s'), typ)
return False
elif not allowed:
logger.warning(message_false, ext.name)
logger.warning(__('doing serial %s'), typ)
return False

return True
Expand Down
2 changes: 2 additions & 0 deletions tests/test_application.py
Expand Up @@ -98,6 +98,8 @@ def test_add_is_parallel_allowed(app, status, warning):

app.setup_extension('read_serial')
assert app.is_parallel_allowed('read') is False
assert ("the read_serial extension is not safe for parallel reading") in warning.getvalue()
warning.truncate(0) # reset warnings
assert app.is_parallel_allowed('write') is True
assert warning.getvalue() == ''
app.extensions.pop('read_serial')
Expand Down

0 comments on commit 9922698

Please sign in to comment.