autogen_config.py
88 lines
| 3.2 KiB
| text/x-python
|
PythonLexer
/ docs / autogen_config.py
Thomas Kluyver
|
r16204 | #!/usr/bin/env python | ||
Thomas Kluyver
|
r13459 | from IPython.utils.text import indent, wrap_paragraphs | ||
from IPython.terminal.ipapp import TerminalIPythonApp | ||||
from IPython.kernel.zmq.kernelapp import IPKernelApp | ||||
from IPython.html.notebookapp import NotebookApp | ||||
def document_config_options(classes): | ||||
lines = [] | ||||
for cls in classes: | ||||
classname = cls.__name__ | ||||
for k, trait in sorted(cls.class_traits(config=True).items()): | ||||
ttype = trait.__class__.__name__ | ||||
termline = classname + '.' + trait.name | ||||
# Choices or type | ||||
if 'Enum' in ttype: | ||||
# include Enum choices | ||||
termline += ' : ' + '|'.join(repr(x) for x in trait.values) | ||||
else: | ||||
termline += ' : ' + ttype | ||||
lines.append(termline) | ||||
# Default value | ||||
try: | ||||
dv = trait.get_default_value() | ||||
dvr = repr(dv) | ||||
except Exception: | ||||
dvr = dv = None # ignore defaults we can't construct | ||||
if (dv is not None) and (dvr is not None): | ||||
if len(dvr) > 64: | ||||
dvr = dvr[:61]+'...' | ||||
# Double up backslashes, so they get to the rendered docs | ||||
dvr = dvr.replace('\\n', '\\\\n') | ||||
lines.append(' Default: ' + dvr) | ||||
lines.append('') | ||||
help = trait.get_metadata('help') | ||||
if help is not None: | ||||
Thomas Kluyver
|
r13504 | help = '\n\n'.join(wrap_paragraphs(help, 76)) | ||
Thomas Kluyver
|
r13459 | lines.append(indent(help, 4)) | ||
else: | ||||
lines.append(' No description') | ||||
lines.append('') | ||||
return '\n'.join(lines) | ||||
kernel_classes = IPKernelApp().classes | ||||
Thomas Kluyver
|
r16204 | def write_doc(name, title, classes, preamble=None): | ||
Thomas Kluyver
|
r13459 | configdoc = document_config_options(classes) | ||
Thomas Kluyver
|
r16204 | filename = '%s.rst' % name | ||
with open('source/config/options/%s' % filename, 'w') as f: | ||||
Thomas Kluyver
|
r13459 | f.write(title + '\n') | ||
f.write(('=' * len(title)) + '\n') | ||||
f.write('\n') | ||||
if preamble is not None: | ||||
f.write(preamble + '\n\n') | ||||
f.write(configdoc) | ||||
Thomas Kluyver
|
r16204 | with open('source/config/options/generated', 'a') as f: | ||
f.write(filename + '\n') | ||||
Thomas Kluyver
|
r13459 | |||
if __name__ == '__main__': | ||||
Thomas Kluyver
|
r16204 | # create empty file | ||
with open('source/config/options/generated', 'w'): | ||||
pass | ||||
Thomas Kluyver
|
r13459 | write_doc('terminal', 'Terminal IPython options', TerminalIPythonApp().classes) | ||
write_doc('kernel', 'IPython kernel options', kernel_classes, | ||||
preamble="These options can be used in :file:`ipython_notebook_config.py` " | ||||
"or in :file:`ipython_qtconsole_config.py`") | ||||
nbclasses = set(NotebookApp().classes) - set(kernel_classes) | ||||
write_doc('notebook', 'IPython notebook options', nbclasses, | ||||
preamble="Any of the :doc:`kernel` can also be used.") | ||||
Thomas Kluyver
|
r13758 | |||
try: | ||||
from IPython.qt.console.qtconsoleapp import IPythonQtConsoleApp | ||||
except ImportError: | ||||
print("WARNING: Could not import qtconsoleapp. Config options for the " | ||||
"Qt Console will not be documented.") | ||||
else: | ||||
qtclasses = set(IPythonQtConsoleApp().classes) - set(kernel_classes) | ||||
write_doc('qtconsole', 'IPython Qt console options', qtclasses, | ||||
preamble="Any of the :doc:`kernel` can also be used.") | ||||
Thomas Kluyver
|
r13459 | |||