##// END OF EJS Templates
Revert "Update README to use optional dependency over requirements.txt"...
Revert "Update README to use optional dependency over requirements.txt" In 4ab4de3bb (Update README to use optional dependency over requirements.txt, 2022-09-06), docs/README.rst was changed to suggest installing the requirements for the documentation build using 'pip install .[doc] -U' instead of using docs/requirements.txt. This works for a first build but since it is not an editable install, any changes to the docstrings are not reflected in the generated API section in subsequent builds, since Sphinx's autodoc extensions looks at installed modules only. Revert that commit, going back to suggesting 'pip install -U -r docs/requirements.txt'. The requirements file itself consists of '-e .[doc]' since 95de1fe40 (Move documentation requirements to setup.cfg, 2022-09-06) (the parent of the commit we are reverting), so this does not change the list of installed packages. This reverts commit 4ab4de3bbf08805262e4b67957faf2e2c588e382.

File last commit:

r27495:1a9d9554
r28183:af5f1156
Show More
autogen_magics.py
66 lines | 2.0 KiB | text/x-python | PythonLexer
from pathlib import Path
from IPython.core.alias import Alias
from IPython.core.interactiveshell import InteractiveShell
from IPython.core.magic import MagicAlias
from IPython.utils.text import dedent, indent
shell = InteractiveShell.instance()
magics = shell.magics_manager.magics
def _strip_underline(line):
chars = set(line.strip())
if len(chars) == 1 and ("-" in chars or "=" in chars):
return ""
else:
return line
def format_docstring(func):
docstring = (func.__doc__ or "Undocumented").rstrip()
docstring = indent(dedent(docstring))
# Sphinx complains if indented bits have rst headings in, so strip out
# any underlines in the docstring.
lines = [_strip_underline(l) for l in docstring.splitlines()]
return "\n".join(lines)
output = [
"Line magics",
"===========",
"",
]
# Case insensitive sort by name
def sortkey(s): return s[0].lower()
for name, func in sorted(magics["line"].items(), key=sortkey):
if isinstance(func, Alias) or isinstance(func, MagicAlias):
# Aliases are magics, but shouldn't be documented here
# Also skip aliases to other magics
continue
output.extend([".. magic:: {}".format(name),
"",
format_docstring(func),
""])
output.extend([
"Cell magics",
"===========",
"",
])
for name, func in sorted(magics["cell"].items(), key=sortkey):
if name == "!":
# Special case - don't encourage people to use %%!
continue
if func == magics["line"].get(name, "QQQP"):
# Don't redocument line magics that double as cell magics
continue
if isinstance(func, MagicAlias):
continue
output.extend([".. cellmagic:: {}".format(name),
"",
format_docstring(func),
""])
src_path = Path(__file__).parent
dest = src_path.joinpath("source", "interactive", "magics-generated.txt")
dest.write_text("\n".join(output), encoding="utf-8")