@@ -1988,7 +1988,7 @@ def parse_file(
1988
1988
libclinic .write_file (output , cooked )
1989
1989
1990
1990
1991
- def create_parser_namespace () -> dict [str , Any ]:
1991
+ def _create_parser_namespace () -> dict [str , Any ]:
1992
1992
ns = dict (
1993
1993
CConverter = CConverter ,
1994
1994
CReturnConverter = CReturnConverter ,
@@ -2002,16 +2002,20 @@ def create_parser_namespace() -> dict[str, Any]:
2002
2002
for name , return_converter in return_converters .items ():
2003
2003
ns [f'{ name } _return_converter' ] = return_converter
2004
2004
return ns
2005
+ _BASE_PARSER_NAMESPACE = _create_parser_namespace ()
2006
+
2007
+
2008
+ def create_parser_namespace () -> dict [str , Any ]:
2009
+ return _BASE_PARSER_NAMESPACE .copy ()
2005
2010
2006
2011
2007
2012
class PythonParser :
2008
2013
def __init__ (self , clinic : Clinic ) -> None :
2009
- self .namespace = create_parser_namespace ()
2010
2014
2011
2015
def parse (self , block : Block ) -> None :
2012
- ns = dict ( self . namespace )
2016
+ namespace = create_parser_namespace ( )
2013
2017
with contextlib .redirect_stdout (io .StringIO ()) as s :
2014
- exec (block .input , ns )
2018
+ exec (block .input , namespace )
2015
2019
block .output = s .getvalue ()
2016
2020
2017
2021
@@ -3477,8 +3481,9 @@ def eval_ast_expr(
3477
3481
node = node .value
3478
3482
3479
3483
expr = ast .Expression (node )
3484
+ namespace = create_parser_namespace ()
3480
3485
co = compile (expr , filename , 'eval' )
3481
- fn = FunctionType (co , globals )
3486
+ fn = FunctionType (co , namespace )
3482
3487
return fn ()
3483
3488
3484
3489
@@ -5006,13 +5011,11 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
5006
5011
5007
5012
for name , converter in converters .items ():
5008
5013
converter_list .append ((
5009
- f'{ name } _converter' ,
5010
5014
name ,
5011
5015
converter ,
5012
5016
))
5013
5017
for name , return_converter in return_converters .items ():
5014
5018
return_converter_list .append ((
5015
- f'{ name } _return_converter' ,
5016
5019
name ,
5017
5020
return_converter
5018
5021
))
@@ -5031,9 +5034,9 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
5031
5034
):
5032
5035
print (title + ":" )
5033
5036
longest = - 1
5034
- for name , short_name , converter in ids :
5035
- longest = max (longest , len (short_name ))
5036
- for name , short_name , cls in sorted (ids , key = lambda x : x [1 ].lower ()):
5037
+ for name , converter in ids :
5038
+ longest = max (longest , len (name ))
5039
+ for name , cls in sorted (ids , key = lambda x : x [1 ].lower ()):
5037
5040
callable = getattr (cls , attribute , None )
5038
5041
if not callable :
5039
5042
continue
@@ -5046,7 +5049,7 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
5046
5049
else :
5047
5050
s = parameter_name
5048
5051
parameters .append (s )
5049
- print (' {}({})' .format (short_name , ', ' .join (parameters )))
5052
+ print (' {}({})' .format (name , ', ' .join (parameters )))
5050
5053
print ()
5051
5054
print ("All converters also accept (c_default=None, py_default=None, annotation=None)." )
5052
5055
print ("All return converters also accept (py_default=None)." )
0 commit comments