@@ -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,21 @@ 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 ()
2014
+ pass
2010
2015
2011
2016
def parse (self , block : Block ) -> None :
2012
- ns = dict ( self . namespace )
2017
+ namespace = create_parser_namespace ( )
2013
2018
with contextlib .redirect_stdout (io .StringIO ()) as s :
2014
- exec (block .input , ns )
2019
+ exec (block .input , namespace )
2015
2020
block .output = s .getvalue ()
2016
2021
2017
2022
@@ -3477,8 +3482,9 @@ def eval_ast_expr(
3477
3482
node = node .value
3478
3483
3479
3484
expr = ast .Expression (node )
3485
+ namespace = create_parser_namespace ()
3480
3486
co = compile (expr , filename , 'eval' )
3481
- fn = FunctionType (co , globals )
3487
+ fn = FunctionType (co , namespace )
3482
3488
return fn ()
3483
3489
3484
3490
@@ -5001,18 +5007,16 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
5001
5007
parser .error (
5002
5008
"can't specify --converters and a filename at the same time"
5003
5009
)
5004
- converter_list : list [tuple [str , str , ConverterType ]] = []
5005
- return_converter_list : list [tuple [str , str , ReturnConverterType ]] = []
5010
+ converter_list : list [tuple [str , Any ]] = []
5011
+ return_converter_list : list [tuple [str , Any ]] = []
5006
5012
5007
5013
for name , converter in converters .items ():
5008
5014
converter_list .append ((
5009
- f'{ name } _converter' ,
5010
5015
name ,
5011
5016
converter ,
5012
5017
))
5013
5018
for name , return_converter in return_converters .items ():
5014
5019
return_converter_list .append ((
5015
- f'{ name } _return_converter' ,
5016
5020
name ,
5017
5021
return_converter
5018
5022
))
@@ -5031,9 +5035,9 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
5031
5035
):
5032
5036
print (title + ":" )
5033
5037
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 ()):
5038
+ for name , converter in ids :
5039
+ longest = max (longest , len (name ))
5040
+ for name , cls in sorted (ids , key = lambda x : x [1 ].lower ()):
5037
5041
callable = getattr (cls , attribute , None )
5038
5042
if not callable :
5039
5043
continue
@@ -5046,7 +5050,7 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
5046
5050
else :
5047
5051
s = parameter_name
5048
5052
parameters .append (s )
5049
- print (' {}({})' .format (short_name , ', ' .join (parameters )))
5053
+ print (' {}({})' .format (name , ', ' .join (parameters )))
5050
5054
print ()
5051
5055
print ("All converters also accept (c_default=None, py_default=None, annotation=None)." )
5052
5056
print ("All return converters also accept (py_default=None)." )
0 commit comments