Skip to content

Commit 9469f59

Browse files
committed
Move to numpydoc.__main__. Add test
1 parent 8245460 commit 9469f59

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

numpydoc/__main__.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import argparse
2+
import importlib
3+
import ast
4+
5+
from .docscrape_sphinx import get_doc_object
6+
7+
8+
def main(argv=None):
9+
"""Test numpydoc docstring generation for a given object"""
10+
11+
ap = argparse.ArgumentParser(description=__doc__)
12+
ap.add_argument('import_path', help='e.g. numpy.ndarray')
13+
14+
def _parse_config(s):
15+
key, _, value = s.partition('=')
16+
value = ast.literal_eval(value)
17+
return key, value
18+
19+
ap.add_argument('-c', '--config', type=_parse_config,
20+
action='append',
21+
help='key=val where val will be parsed by literal_eval, '
22+
'e.g. -c use_plots=True. Multiple -c can be used.')
23+
args = ap.parse_args(argv)
24+
25+
parts = args.import_path.split('.')
26+
27+
for split_point in range(len(parts), 0, -1)[::-1]:
28+
try:
29+
path = '.'.join(parts[:split_point])
30+
obj = importlib.import_module(path)
31+
except ImportError:
32+
continue
33+
break
34+
else:
35+
raise ImportError('Could not resolve {!r} to an importable object'
36+
''.format(args.import_path))
37+
38+
for part in parts[split_point:]:
39+
obj = getattr(obj, part)
40+
41+
print(get_doc_object(obj, config=dict(args.config or [])))
42+
43+
if __name__ == '__main__':
44+
main()

numpydoc/tests/test_main.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from numpydoc.__main__ import main
2+
3+
import sys
4+
import io
5+
6+
7+
def test_main():
8+
f = io.StringIO()
9+
sys.stdout, old_stdout = f, sys.stdout
10+
main(['numpydoc.__main__.main'])
11+
assert f.getvalue().strip() == main.__doc__
12+
sys.stdout = old_stdout

0 commit comments

Comments
 (0)