44import pickle
55import types
66from os import path
7- from typing import Any
7+ from typing import TYPE_CHECKING
88
99from sphinx .application import ENV_PICKLE_FILENAME , Sphinx
1010from sphinx .builders .html import BuildInfo , StandaloneHTMLBuilder
1313
1414from sphinxcontrib .serializinghtml import jsonimpl
1515
16+ if TYPE_CHECKING :
17+ from collections .abc import Sequence
18+ from typing import Any , Protocol
19+
20+ class SerialisingImplementation (Protocol ):
21+ def dump (self , obj : Any , file : Any , * args : Any , ** kwargs : Any ) -> None : ...
22+ def dumps (self , obj : Any , * args : Any , ** kwargs : Any ) -> str | bytes : ...
23+ def load (self , file : Any , * args : Any , ** kwargs : Any ) -> Any : ...
24+ def loads (self , data : Any , * args : Any , ** kwargs : Any ) -> Any : ...
25+
1626__version__ = '1.1.10'
1727__version_info__ = (1 , 1 , 10 )
1828
@@ -31,11 +41,11 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder):
3141 """
3242 #: the serializing implementation to use. Set this to a module that
3343 #: implements a `dump`, `load`, `dumps` and `loads` functions
34- #: (pickle, simplejson etc.)
35- implementation : Any = None
44+ #: (pickle, json etc.)
45+ implementation : SerialisingImplementation
3646 implementation_dumps_unicode = False
3747 #: additional arguments for dump()
38- additional_dump_args : tuple = ()
48+ additional_dump_args : Sequence [ Any ] = ()
3949
4050 #: the filename for the global context file
4151 globalcontext_filename : str = ''
@@ -62,7 +72,7 @@ def get_target_uri(self, docname: str, typ: str | None = None) -> str:
6272 return docname [:- 5 ] # up to sep
6373 return docname + SEP
6474
65- def dump_context (self , context : dict , filename : str | os .PathLike [str ]) -> None :
75+ def dump_context (self , context : dict [ str , Any ] , filename : str | os .PathLike [str ]) -> None :
6676 context = context .copy ()
6777 if 'css_files' in context :
6878 context ['css_files' ] = [css .filename for css in context ['css_files' ]]
@@ -75,7 +85,7 @@ def dump_context(self, context: dict, filename: str | os.PathLike[str]) -> None:
7585 with open (filename , 'wb' ) as fb :
7686 self .implementation .dump (context , fb , * self .additional_dump_args )
7787
78- def handle_page (self , pagename : str , ctx : dict , templatename : str = 'page.html' ,
88+ def handle_page (self , pagename : str , ctx : dict [ str , Any ] , templatename : str = 'page.html' ,
7989 outfilename : str | None = None , event_arg : Any = None ) -> None :
8090 ctx ['current_page_name' ] = pagename
8191 ctx .setdefault ('pathto' , lambda p : p )
@@ -132,7 +142,7 @@ class PickleHTMLBuilder(SerializingHTMLBuilder):
132142
133143 implementation = pickle
134144 implementation_dumps_unicode = False
135- additional_dump_args = (pickle .HIGHEST_PROTOCOL ,)
145+ additional_dump_args : tuple [ Any ] = (pickle .HIGHEST_PROTOCOL ,)
136146 indexer_format = pickle
137147 indexer_dumps_unicode = False
138148 out_suffix = '.fpickle'
0 commit comments