19
19
```
20
20
"""
21
21
import os
22
- import inspect
22
+ import sphinx
23
23
from contextlib import contextmanager
24
24
25
25
from sphinx .ext .autosummary import get_rst_suffix
@@ -48,7 +48,6 @@ def custom_os_path_join(a, *p):
48
48
49
49
50
50
def process_generate_options_custom_files (app ):
51
-
52
51
orig_suffix = get_rst_suffix (app )
53
52
new_suffix = app .config .custom_autosummary_new_suffix
54
53
generated_dirname = app .config .custom_autosummary_generated_dirname
@@ -70,12 +69,20 @@ def setup(app):
70
69
app .add_config_value (
71
70
'custom_autosummary_generated_dirname' , '' , None )
72
71
73
- # Override process_generate_options added by sphinx.ext.autosummary
74
- builder_inited_listeners = app .events .listeners ["builder-inited" ]
72
+ if sphinx .version_info [0 ] <= 2 :
73
+ raise ModuleNotFoundError ("Please install Sphinx >= 3.0 in order "
74
+ "to build docs" )
75
75
76
- for listener_id , obj in builder_inited_listeners .items ():
77
- if (inspect .isfunction (obj )
78
- and obj .__name__ == "process_generate_options" ):
79
- builder_inited_listeners [listener_id ] = \
80
- process_generate_options_custom_files
76
+ # Find listener id for process_generate_options added by
77
+ process_generate_options_id = None
78
+ builder_inited_listeners = app .events .listeners ["builder-inited" ]
79
+ for event_listener in builder_inited_listeners :
80
+ func = event_listener .handler
81
+ if func .__name__ == "process_generate_options" :
82
+ process_generate_options_id = event_listener .id
81
83
break
84
+ assert process_generate_options_id is not None
85
+
86
+ # Override process_generate_options added by sphinx.ext.autosummary
87
+ app .disconnect (process_generate_options_id )
88
+ app .connect ("builder-inited" , process_generate_options_custom_files )
0 commit comments