Skip to content

Commit 512d3a6

Browse files
fix opening webbrowser (if not single docstring page)
1 parent 2cd4a5d commit 512d3a6

File tree

1 file changed

+37
-31
lines changed

1 file changed

+37
-31
lines changed

doc/make.py

+37-31
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
from contextlib import contextmanager
2020
import webbrowser
2121
import jinja2
22-
import shutil
2322

2423
import pandas
2524

@@ -82,8 +81,10 @@ class DocBuilder:
8281
def __init__(self, num_jobs=1, include_api=True, single_doc=None):
8382
self.num_jobs = num_jobs
8483
self.include_api = include_api
85-
self.single_doc = single_doc
86-
self.single_doc_type = self._single_doc_type
84+
self.single_doc = None
85+
self.single_doc_type = None
86+
if single_doc is not None:
87+
self._process_single_doc(single_doc)
8788
self.exclude_patterns = self._exclude_patterns
8889

8990
self._generate_index()
@@ -99,7 +100,7 @@ def _exclude_patterns(self):
99100
rst_files = [f for f in os.listdir(SOURCE_PATH)
100101
if ((f.endswith('.rst') or f.endswith('.ipynb'))
101102
and (f != 'index.rst')
102-
and (f != self.single_doc))]
103+
and (f != '{0}.rst'.format(self.single_doc)))]
103104
if self.single_doc_type != 'api':
104105
rst_files += ['generated/*.rst']
105106
elif not self.include_api:
@@ -112,33 +113,44 @@ def _exclude_patterns(self):
112113

113114
return exclude_patterns
114115

115-
@property
116-
def _single_doc_type(self):
117-
if self.single_doc:
118-
if self.single_doc == 'api.rst':
119-
return 'api'
120-
if os.path.exists(os.path.join(SOURCE_PATH, self.single_doc)):
121-
return 'rst'
116+
def _process_single_doc(self, single_doc):
117+
"""Extract self.single_doc (base name) and self.single_doc_type from
118+
passed single_doc kwarg.
119+
120+
"""
121+
self.include_api = False
122+
123+
if single_doc == 'api.rst':
124+
self.single_doc_type = 'api'
125+
self.single_doc = 'api'
126+
elif os.path.exists(os.path.join(SOURCE_PATH, single_doc)):
127+
self.single_doc_type = 'rst'
128+
self.single_doc = os.path.splitext(os.path.basename(single_doc))[0]
129+
elif single_doc is not None:
122130
try:
123131
obj = pandas
124-
for name in self.single_doc.split('.'):
132+
for name in single_doc.split('.'):
125133
obj = getattr(obj, name)
126134
except AttributeError:
127135
raise ValueError('Single document not understood, it should '
128136
'be a file in doc/source/*.rst (e.g. '
129137
'"contributing.rst" or a pandas function or '
130138
'method (e.g. "pandas.DataFrame.head")')
131139
else:
132-
return 'docstring'
140+
self.single_doc_type = 'docstring'
141+
if single_doc.startswith('pandas.'):
142+
self.single_doc = single_doc[len('pandas.'):]
143+
else:
144+
self.single_doc = single_doc
133145

134-
def _copy_generated_docstring(self, method):
146+
def _copy_generated_docstring(self):
135147
"""Copy existing generated (from api.rst) docstring page because
136148
this is more correct in certain cases (where a custom autodoc
137149
template is used).
138150
139151
"""
140152
fname = os.path.join(SOURCE_PATH, 'generated',
141-
'pandas.{}.rst'.format(method))
153+
'pandas.{}.rst'.format(self.single_doc))
142154
temp_dir = os.path.join(SOURCE_PATH, 'generated_single')
143155

144156
try:
@@ -156,25 +168,15 @@ def _copy_generated_docstring(self, method):
156168

157169
def _generate_index(self):
158170
"""Create index.rst file with the specified sections."""
159-
if self.single_doc_type == 'rst':
160-
single_doc = os.path.splitext(os.path.basename(self.single_doc))[0]
161-
self.include_api = False
162-
elif self.single_doc_type == 'docstring':
163-
if self.single_doc.startswith('pandas.'):
164-
single_doc = self.single_doc[len('pandas.'):]
165-
else:
166-
single_doc = self.single_doc
167-
self.include_api = False
168-
self._copy_generated_docstring(single_doc)
169-
elif self.single_doc_type == 'api':
170-
single_doc = 'api'
171+
if self.single_doc_type == 'docstring':
172+
self._copy_generated_docstring()
171173

172174
with open(os.path.join(SOURCE_PATH, 'index.rst.template')) as f:
173175
t = jinja2.Template(f.read())
174176

175177
with open(os.path.join(SOURCE_PATH, 'index.rst'), 'w') as f:
176178
f.write(t.render(include_api=self.include_api,
177-
single_doc=single_doc,
179+
single_doc=self.single_doc,
178180
single_doc_type=self.single_doc_type))
179181

180182
@staticmethod
@@ -229,9 +231,13 @@ def _sphinx_build(self, kind):
229231
os.path.join(BUILD_PATH, kind))
230232

231233
def _open_browser(self):
232-
url = os.path.join(
233-
'file://', DOC_PATH, 'build', 'html',
234-
'generated_single', '{}.html'.format(self.single_doc))
234+
base_url = os.path.join('file://', DOC_PATH, 'build', 'html')
235+
if self.single_doc_type == 'docstring':
236+
url = os.path.join(
237+
base_url,
238+
'generated_single', 'pandas.{}.html'.format(self.single_doc))
239+
else:
240+
url = os.path.join(base_url, '{}.html'.format(self.single_doc))
235241
webbrowser.open(url, new=2)
236242

237243
def html(self):

0 commit comments

Comments
 (0)