13
13
from sphinx .util .docutils import SphinxDirective
14
14
15
15
if TYPE_CHECKING :
16
- from collections .abc import Iterator
16
+ from collections .abc import Iterator , Set
17
17
18
18
from sphinx .application import Sphinx
19
19
from sphinx .builders import Builder
33
33
class AuditEvents :
34
34
def __init__ (self ) -> None :
35
35
self .events : dict [str , list [str ]] = {}
36
- self .sources : dict [str , list [tuple [str , str ]]] = {}
36
+ self .sources : dict [str , set [tuple [str , str ]]] = {}
37
37
38
38
def __iter__ (self ) -> Iterator [tuple [str , list [str ], tuple [str , str ]]]:
39
39
for name , args in self .events .items ():
@@ -47,7 +47,7 @@ def add_event(
47
47
self ._check_args_match (name , args )
48
48
else :
49
49
self .events [name ] = args
50
- self .sources .setdefault (name , []). append (source )
50
+ self .sources .setdefault (name , set ()). add (source )
51
51
52
52
def _check_args_match (self , name : str , args : list [str ]) -> None :
53
53
current_args = self .events [name ]
@@ -69,11 +69,11 @@ def _check_args_match(self, name: str, args: list[str]) -> None:
69
69
return
70
70
71
71
def id_for (self , name ) -> str :
72
- source_count = len (self .sources .get (name , ()))
72
+ source_count = len (self .sources .get (name , set ()))
73
73
name_clean = re .sub (r"\W" , "_" , name )
74
74
return f"audit_event_{ name_clean } _{ source_count } "
75
75
76
- def rows (self ) -> Iterator [tuple [str , list [str ], list [tuple [str , str ]]]]:
76
+ def rows (self ) -> Iterator [tuple [str , list [str ], Set [tuple [str , str ]]]]:
77
77
for name in sorted (self .events .keys ()):
78
78
yield name , self .events [name ], self .sources [name ]
79
79
@@ -218,7 +218,7 @@ def _make_row(
218
218
docname : str ,
219
219
name : str ,
220
220
args : list [str ],
221
- sources : list [tuple [str , str ]],
221
+ sources : Set [tuple [str , str ]],
222
222
) -> nodes .row :
223
223
row = nodes .row ()
224
224
name_node = nodes .paragraph ("" , nodes .Text (name ))
@@ -233,7 +233,7 @@ def _make_row(
233
233
row += nodes .entry ("" , args_node )
234
234
235
235
backlinks_node = nodes .paragraph ()
236
- backlinks = enumerate (sorted (set ( sources ) ), start = 1 )
236
+ backlinks = enumerate (sorted (sources ), start = 1 )
237
237
for i , (doc , label ) in backlinks :
238
238
if isinstance (label , str ):
239
239
ref = nodes .reference ("" , f"[{ i } ]" , internal = True )
@@ -258,7 +258,7 @@ def setup(app: Sphinx):
258
258
app .connect ("env-purge-doc" , audit_events_purge )
259
259
app .connect ("env-merge-info" , audit_events_merge )
260
260
return {
261
- "version" : "1 .0" ,
261
+ "version" : "2 .0" ,
262
262
"parallel_read_safe" : True ,
263
263
"parallel_write_safe" : True ,
264
264
}
0 commit comments