import sphinx
org_PyObject_add_target_and_index = None
org_PyModule_run = None
EXCLUDES = {}
def PythonModuleIndex_generate(self, docnames=None):
docnames = []
excludes = self.domain.env.config['modindex_exclude']
for modname, (docname, synopsis, platforms, deprecated) in self.domain.data['modules'].items():
if modname not in excludes:
docnames.append(docname)
return org_PythonModuleIndex_generate(self, docnames)
def PyObject_add_target_and_index(self, name_cls, sig, signode):
if hasattr(self.env, "ref_context"):
ref_context = self.env.ref_context
else:
ref_context = self.env.temp_data
modname = self.options.get(
'module', ref_context.get('py:module'))
if modname in self.env.config['modindex_exclude']:
return None
return org_PyObject_add_target_and_index(self, name_cls, sig, signode)
def PyModule_run(self):
env = self.state.document.settings.env
modname = self.arguments[0].strip()
excl = env.config['modindex_exclude']
if modname in excl:
self.options['noindex'] = True
EXCLUDES.setdefault(modname, []).append(env.docname)
return org_PyModule_run(self)
def setup(app):
app.add_config_value('modindex_exclude', [], 'html')
global org_PyObject_add_target_and_index
org_PyObject_add_target_and_index = sphinx.domains.python.PyObject.add_target_and_index
sphinx.domains.python.PyObject.add_target_and_index = PyObject_add_target_and_index
global org_PyModule_run
org_PyModule_run = sphinx.domains.python.PyModule.run
sphinx.domains.python.PyModule.run = PyModule_run