Skip to content

Commit 13d31b9

Browse files
copy existing generated file if possible, otherwise generate it ourselves
1 parent 7fe8ac2 commit 13d31b9

File tree

1 file changed

+58
-22
lines changed

1 file changed

+58
-22
lines changed

doc/make.py

Lines changed: 58 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import argparse
1919
from contextlib import contextmanager
2020
import jinja2
21+
import shutil
2122
import webbrowser
2223

2324

@@ -50,7 +51,9 @@ def _generate_index(include_api=True, single_doc=None):
5051

5152

5253
def _generate_exclude_pattern(include_api=True, single_doc=None):
54+
"""
5355
56+
"""
5457
if not include_api:
5558
rst_files = ['api.rst', 'generated/*.rst']
5659
elif single_doc is not None:
@@ -67,34 +70,60 @@ def _generate_exclude_pattern(include_api=True, single_doc=None):
6770
return exclude_patterns
6871

6972

70-
def _write_temp_file2(classtype, module, function):
71-
72-
s = """{1}.{2}
73-
=================================
74-
75-
.. currentmodule:: {1}
76-
77-
.. auto{0}:: {2}""".format(classtype, module, function)
78-
79-
with open(os.path.join(SOURCE_PATH, "temp.rst"), 'w') as f:
80-
f.write(s)
81-
73+
def _generate_temp_docstring_file(method):
74+
"""
75+
"""
76+
fname = os.path.join(SOURCE_PATH, 'generated', '{}.rst'.format(method))
77+
78+
# # remove the target file to make sure it is updated again (to build
79+
# # latest version)
80+
# try:
81+
# os.remove(fname)
82+
# except OSError:
83+
# pass
84+
#
85+
# # generate docstring pages
86+
# print("Running sphinx-autogen to generate docstring stub pages")
87+
# os.system("sphinx-autogen -t _templates -o source/generated source/*.rst")
88+
89+
# create the temporary directory in which we will link the target file
90+
try:
91+
os.makedirs(os.path.join(SOURCE_PATH, 'generated_temp'))
92+
except OSError:
93+
pass
8294

83-
def _write_temp_file(classtype, module, function):
95+
if os.path.exists(fname):
96+
# link the target file
97+
try:
98+
# os.symlink(fname, os.path.join(SOURCE_PATH, 'generated_temp',
99+
# '{}.rst'.format(method)),
100+
# target_is_directory=False)
101+
# copying to make sure sphinx always thinks it is new
102+
# and needs to be re-generated (to pick source code changes)
103+
shutil.copy(fname, os.path.join(SOURCE_PATH, 'generated_temp'))
104+
linked = True
105+
except: # noqa
106+
linked = False
107+
else:
108+
linked = False
84109

85-
s = """API docs
86-
========
110+
s = """Built docstrings
111+
================
87112
88113
.. autosummary::
89-
:toctree: generated_temp/
114+
{toctree}
115+
{name}
90116
91-
{0}.{1}
92-
93-
""".format(module, function)
117+
""".format(name=method,
118+
toctree=':toctree: generated_temp/\n' if not linked else '')
94119

95120
with open(os.path.join(SOURCE_PATH, "temp.rst"), 'w') as f:
96121
f.write(s)
97122

123+
if not linked:
124+
print("Running sphinx-autogen on manually created file")
125+
os.system("sphinx-autogen -o source/generated_temp source/temp.rst")
126+
98127

99128
@contextmanager
100129
def _maybe_exclude_notebooks():
@@ -310,13 +339,20 @@ def main():
310339
os.environ['PYTHONPATH'] = args.python_path
311340

312341
if args.docstring is not None:
313-
_write_temp_file('method', 'pandas', args.docstring)
342+
shutil.rmtree(os.path.join(BUILD_PATH, 'html', 'generated_temp'),
343+
ignore_errors=True)
344+
_generate_temp_docstring_file(args.docstring)
314345
exclude_patterns = _generate_exclude_pattern(single_doc='temp.rst')
315346
_generate_index(single_doc='temp.rst')
316347
DocBuilder(args.num_jobs, exclude_patterns).build_docstring()
317-
url = "file://" + os.getcwd() + "/build/html/temp.html"
348+
# open generated page in new browser tab
349+
url = os.path.join("file://", DOC_PATH, "build", "html",
350+
"generated_temp", "{}.html".format(args.docstring))
318351
webbrowser.open(url, new=2)
319-
#os.remove('source/temp.rst')
352+
# clean-up generated files
353+
os.remove('source/temp.rst')
354+
shutil.rmtree(os.path.join(SOURCE_PATH, 'generated_temp'),
355+
ignore_errors=True)
320356

321357
else:
322358
_generate_index(not args.no_api, args.single)

0 commit comments

Comments
 (0)