11import ast
22import warnings
33from collections import namedtuple
4+ from os import PathLike
5+ from typing import Any
6+ from typing import Literal
7+ from typing import TypeAlias
48
59from RestrictedPython ._compat import IS_CPYTHON
610from RestrictedPython .transformer import RestrictingNodeTransformer
711
812
13+ # Temporary workaround for missing _typeshed
14+ ReadableBuffer : TypeAlias = bytes | bytearray
15+
16+
917CompileResult = namedtuple (
1018 'CompileResult' , 'code, errors, warnings, used_names' )
1119syntax_error_template = (
1826
1927
2028def _compile_restricted_mode (
21- source ,
22- filename = '<string>' ,
23- mode = "exec" ,
24- flags = 0 ,
25- dont_inherit = False ,
26- policy = RestrictingNodeTransformer ):
29+ source : str | ReadableBuffer | ast . Module | ast . Expression | ast . Interactive ,
30+ filename : str | ReadableBuffer | PathLike [ Any ] = '<string>' ,
31+ mode : Literal [ "exec" , "eval" , "single" ] = "exec" ,
32+ flags : int = 0 ,
33+ dont_inherit : bool = False ,
34+ policy : ast . NodeTransformer = RestrictingNodeTransformer ) -> CompileResult :
2735
2836 if not IS_CPYTHON :
2937 warnings .warn_explicit (
@@ -78,11 +86,11 @@ def _compile_restricted_mode(
7886
7987
8088def compile_restricted_exec (
81- source ,
82- filename = '<string>' ,
83- flags = 0 ,
84- dont_inherit = False ,
85- policy = RestrictingNodeTransformer ):
89+ source : str | ReadableBuffer | ast . Module | ast . Expression | ast . Interactive ,
90+ filename : str | ReadableBuffer | PathLike [ Any ] = '<string>' ,
91+ flags : int = 0 ,
92+ dont_inherit : bool = False ,
93+ policy : ast . NodeTransformer = RestrictingNodeTransformer ) -> CompileResult :
8694 """Compile restricted for the mode `exec`."""
8795 return _compile_restricted_mode (
8896 source ,
@@ -94,11 +102,11 @@ def compile_restricted_exec(
94102
95103
96104def compile_restricted_eval (
97- source ,
98- filename = '<string>' ,
99- flags = 0 ,
100- dont_inherit = False ,
101- policy = RestrictingNodeTransformer ):
105+ source : str | ReadableBuffer | ast . Module | ast . Expression | ast . Interactive ,
106+ filename : str | ReadableBuffer | PathLike [ Any ] = '<string>' ,
107+ flags : int = 0 ,
108+ dont_inherit : bool = False ,
109+ policy : ast . NodeTransformer = RestrictingNodeTransformer ) -> CompileResult :
102110 """Compile restricted for the mode `eval`."""
103111 return _compile_restricted_mode (
104112 source ,
@@ -110,11 +118,11 @@ def compile_restricted_eval(
110118
111119
112120def compile_restricted_single (
113- source ,
114- filename = '<string>' ,
115- flags = 0 ,
116- dont_inherit = False ,
117- policy = RestrictingNodeTransformer ):
121+ source : str | ReadableBuffer | ast . Module | ast . Expression | ast . Interactive ,
122+ filename : str | ReadableBuffer | PathLike [ Any ] = '<string>' ,
123+ flags : int = 0 ,
124+ dont_inherit : bool = False ,
125+ policy : ast . NodeTransformer = RestrictingNodeTransformer ) -> CompileResult :
118126 """Compile restricted for the mode `single`."""
119127 return _compile_restricted_mode (
120128 source ,
@@ -128,12 +136,12 @@ def compile_restricted_single(
128136def compile_restricted_function (
129137 p , # parameters
130138 body ,
131- name ,
132- filename = '<string>' ,
139+ name : str ,
140+ filename : str | ReadableBuffer | PathLike [ Any ] = '<string>' ,
133141 globalize = None , # List of globals (e.g. ['here', 'context', ...])
134- flags = 0 ,
135- dont_inherit = False ,
136- policy = RestrictingNodeTransformer ):
142+ flags : int = 0 ,
143+ dont_inherit : bool = False ,
144+ policy : ast . NodeTransformer = RestrictingNodeTransformer ) -> CompileResult :
137145 """Compile a restricted code object for a function.
138146
139147 Documentation see:
@@ -181,12 +189,12 @@ def compile_restricted_function(
181189
182190
183191def compile_restricted (
184- source ,
185- filename = '<unknown>' ,
186- mode = 'exec' ,
187- flags = 0 ,
188- dont_inherit = False ,
189- policy = RestrictingNodeTransformer ):
192+ source : str | ReadableBuffer | ast . Module | ast . Expression | ast . Interactive ,
193+ filename : str | ReadableBuffer | PathLike [ Any ] = '<unknown>' ,
194+ mode : str = 'exec' ,
195+ flags : int = 0 ,
196+ dont_inherit : bool = False ,
197+ policy : ast . NodeTransformer = RestrictingNodeTransformer ) -> CompileResult :
190198 """Replacement for the built-in compile() function.
191199
192200 policy ... `ast.NodeTransformer` class defining the restrictions.
0 commit comments