DOC options must be a dict when used with extends_documentation_fragment (#21745)
* Fix string formatting * Provide better tracebacks * When options is None and extends_documentation_fragment is in use, add an error that options must be a dict * If options was specified and not a dict, then error
This commit is contained in:
parent
404b2864ef
commit
b143fdea54
2 changed files with 13 additions and 5 deletions
|
@ -117,7 +117,7 @@ def get_docstring(filename, verbose=False):
|
||||||
elif isinstance(doc[key], MutableSequence):
|
elif isinstance(doc[key], MutableSequence):
|
||||||
doc[key] = sorted(frozenset(doc[key] + value))
|
doc[key] = sorted(frozenset(doc[key] + value))
|
||||||
else:
|
else:
|
||||||
raise Exception("Attempt to extend a documentation fragement (%s) of unknown type: %s" (fragment_name, filename))
|
raise Exception("Attempt to extend a documentation fragement (%s) of unknown type: %s" % (fragment_name, filename))
|
||||||
|
|
||||||
elif 'EXAMPLES' == theid:
|
elif 'EXAMPLES' == theid:
|
||||||
plainexamples = child.value.s[1:] # Skip first empty line
|
plainexamples = child.value.s[1:] # Skip first empty line
|
||||||
|
|
|
@ -28,6 +28,7 @@ import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import traceback
|
||||||
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
@ -569,13 +570,20 @@ class ModuleValidator(Validator):
|
||||||
303,
|
303,
|
||||||
'DOCUMENTATION fragment missing: %s' % fragment
|
'DOCUMENTATION fragment missing: %s' % fragment
|
||||||
))
|
))
|
||||||
except Exception as e:
|
except Exception:
|
||||||
self.traces.append(e)
|
self.traces.append(traceback.format_exc())
|
||||||
self.errors.append((
|
self.errors.append((
|
||||||
304,
|
304,
|
||||||
'Unknown DOCUMENTATION error, see TRACE'
|
'Unknown DOCUMENTATION error, see TRACE'
|
||||||
))
|
))
|
||||||
|
|
||||||
|
if 'options' in doc and doc['options'] is None and doc.get('extends_documentation_fragment'):
|
||||||
|
self.errors.append((
|
||||||
|
305,
|
||||||
|
('DOCUMENTATION.options must be a dictionary/hash when used '
|
||||||
|
'with DOCUMENTATION.extends_documentation_fragment')
|
||||||
|
))
|
||||||
|
|
||||||
self._validate_docs_schema(doc, doc_schema, 'DOCUMENTATION', 305)
|
self._validate_docs_schema(doc, doc_schema, 'DOCUMENTATION', 305)
|
||||||
self._check_version_added(doc)
|
self._check_version_added(doc)
|
||||||
self._check_for_new_args(doc)
|
self._check_for_new_args(doc)
|
||||||
|
@ -760,8 +768,8 @@ class ModuleValidator(Validator):
|
||||||
self.errors.append((401, 'Python SyntaxError while parsing module'))
|
self.errors.append((401, 'Python SyntaxError while parsing module'))
|
||||||
try:
|
try:
|
||||||
compile(self.text, self.path, 'exec')
|
compile(self.text, self.path, 'exec')
|
||||||
except Exception as e:
|
except Exception:
|
||||||
self.traces.append(e)
|
self.traces.append(traceback.format_exc())
|
||||||
return
|
return
|
||||||
|
|
||||||
if self._python_module():
|
if self._python_module():
|
||||||
|
|
Loading…
Reference in a new issue