1313from sphinx .util .osutil import ensuredir
1414import sphinx .util .logging
1515
16- from ..settings import API_ROOT , TEMPLATE_DIR , SINGLE_PAGE_LEVELS
16+ from ..settings import API_ROOT , TEMPLATE_DIR
1717
1818LOGGER = sphinx .util .logging .getLogger (__name__ )
19+ _OWN_PAGE_LEVELS = [
20+ "package" ,
21+ "module" ,
22+ "exception" ,
23+ "class" ,
24+ "function" ,
25+ "method" ,
26+ "property" ,
27+ "attribute" ,
28+ "data" ,
29+ ]
1930
2031Path = namedtuple ("Path" , ["absolute" , "relative" ])
2132
@@ -90,10 +101,15 @@ def rendered(self):
90101 return self .render ()
91102
92103 def get_context_data (self ):
104+ own_page_level = self .app .config .autoapi_own_page_level
105+ desired_page_level = _OWN_PAGE_LEVELS .index (own_page_level )
106+ own_page_types = set (_OWN_PAGE_LEVELS [:desired_page_level + 1 ])
107+
93108 return {
94109 "autoapi_options" : self .app .config .autoapi_options ,
95110 "include_summaries" : self .app .config .autoapi_include_summaries ,
96111 "obj" : self ,
112+ "own_page_types" : own_page_types ,
97113 "sphinx_version" : sphinx .version_info ,
98114 }
99115
@@ -191,18 +207,20 @@ def _wrapped_prepare(value):
191207 if self .app .config .autoapi_prepare_jinja_env :
192208 self .app .config .autoapi_prepare_jinja_env (self .jinja_env )
193209
210+ own_page_level = self .app .config .autoapi_own_page_level
211+ desired_page_level = _OWN_PAGE_LEVELS .index (own_page_level )
212+ self .own_page_types = set (_OWN_PAGE_LEVELS [:desired_page_level + 1 ])
213+
194214 self .url_root = url_root
195215
196216 # Mapping of {filepath -> raw data}
197217 self .paths = OrderedDict ()
198218 # Mapping of {object id -> Python Object}
199- self .objects = OrderedDict ()
219+ self .objects_to_render = OrderedDict ()
200220 # Mapping of {object id -> Python Object}
201221 self .all_objects = OrderedDict ()
202222 # Mapping of {namespace id -> Python Object}
203223 self .namespaces = OrderedDict ()
204- # Mapping of {namespace id -> Python Object}
205- self .top_level_objects = OrderedDict ()
206224
207225 def load (self , patterns , dirs , ignore = None ):
208226 """Load objects from the filesystem into the ``paths`` dictionary."""
@@ -280,7 +298,9 @@ def add_object(self, obj):
280298 Args:
281299 obj: Instance of a AutoAPI object
282300 """
283- self .objects [obj .id ] = obj
301+ if obj .type in self .own_page_types :
302+ self .objects_to_render [obj .id ] = obj
303+
284304 self .all_objects [obj .id ] = obj
285305 child_stack = list (obj .children )
286306 while child_stack :
@@ -307,75 +327,34 @@ def create_class(self, data, options=None, **kwargs):
307327 """
308328 raise NotImplementedError
309329
310- def output_child_rst (self , obj , obj_parent , detail_dir , single_page_level , source_suffix ):
311-
312- if not obj .display :
313- return
314-
315- obj_child_page_level = SINGLE_PAGE_LEVELS .index (obj .type )
316- desired_page_level = SINGLE_PAGE_LEVELS .index (single_page_level )
317- needs_single_page = obj_child_page_level <= desired_page_level
318- if not needs_single_page :
319- return
320-
321- obj_child_rst = obj .render (
322- needs_single_page = needs_single_page ,
323- )
324- if not obj_child_rst :
325- return
326-
327- ensuredir (os .path .join (detail_dir , obj .short_name ))
328- path = os .path .join (
329- detail_dir , obj .short_name , f"index{ source_suffix } "
330- )
331-
332- with open (path , "wb+" ) as obj_child_detail_file :
333- obj_child_detail_file .write (obj_child_rst .encode ("utf-8" ))
334-
335- for obj_child in obj .children :
336- child_detail_dir = os .path .join (detail_dir , obj .name )
337- self .output_child_rst (obj_child , obj , child_detail_dir , single_page_level , source_suffix )
338-
339-
340330 def output_rst (self , root , source_suffix ):
341- # Evaluate which object types should render in a single page
342- single_page_level = self .app .config .autoapi_single_page_level
343- desired_page_level = SINGLE_PAGE_LEVELS .index (single_page_level )
344- single_page_objects = SINGLE_PAGE_LEVELS [:desired_page_level + 1 ]
345-
346331 for _ , obj in status_iterator (
347- self .objects .items (),
332+ self .objects_to_render .items (),
348333 colorize ("bold" , "[AutoAPI] " ) + "Rendering Data... " ,
349- length = len (self .objects ),
334+ length = len (self .objects_to_render ),
350335 verbosity = 1 ,
351336 stringify_func = (lambda x : x [0 ]),
352337 ):
353338 if not obj .display :
354339 continue
355340
356- rst = obj .render (single_page_objects = single_page_objects )
341+ rst = obj .render (is_own_page = True )
357342 if not rst :
358343 continue
359344
360345 detail_dir = obj .include_dir (root = root )
361346 ensuredir (detail_dir )
362347 path = os .path .join (detail_dir , f"index{ source_suffix } " )
363-
364348 with open (path , "wb+" ) as detail_file :
365349 detail_file .write (rst .encode ("utf-8" ))
366-
367- for obj_child in obj .children :
368- self .output_child_rst (obj_child , obj , detail_dir = detail_dir ,
369- single_page_level = single_page_level ,
370- source_suffix = source_suffix )
371350
372351 if self .app .config .autoapi_add_toctree_entry :
373352 self ._output_top_rst (root )
374353
375354 def _output_top_rst (self , root ):
376355 # Render Top Index
377356 top_level_index = os .path .join (root , "index.rst" )
378- pages = self .objects .values ()
357+ pages = self .objects_to_render .values ()
379358 with open (top_level_index , "wb" ) as top_level_file :
380359 content = self .jinja_env .get_template ("index.rst" )
381360 top_level_file .write (content .render (pages = pages ).encode ("utf-8" ))
0 commit comments