@@ -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 )
10000
div>
3487
+ fn = FunctionType (co , namespace )
3482
3488
return fn ()
3483
3489
3484
3490
@@ -5001,18 +5007,17 @@ 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
+ any_converter_type = ConverterType | ReturnConverterType
5011
+ converter_list : list [tuple [str , any_converter_type ]] = []
5012
+ return_converter_list : list [tuple [str , any_converter_type ]] = []
5006
5013
5007
5014
for name , converter in converters .items ():
5008
5015
converter_list .append ((
5009
- f'{ name } _converter' ,
5010
5016
name ,
5011
5017
converter ,
5012
5018
))
5013
5019
for name , return_converter in return_converters .items ():
5014
5020
return_converter_list .append ((
5015
- f'{ name } _return_converter' ,
5016
5021
name ,
5017
5022
return_converter
5018
5023
))
@@ -5030,10 +5035,13 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
5030
5035
("Return converters" , 'return_converter_init' , return_converter_list ),
5031
5036
):
5032
5037
print (title + ":" )
5038
+
5039
+ ids .sort (key = lambda item : item [0 ].lower ())
5033
5040
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 ()):
5041
+ for name , _ in ids :
5042
+ longest = max (longest , len (name ))
5043
+
5044
+ for name , cls in ids :
5037
5045
callable = getattr (cls , attribute , None )
5038
5046
if not callable :
5039
5047
continue
@@ -5046,7 +5054,7 @@ def run_clinic(parser: argparse.ArgumentParser, ns: argparse.Namespace) -> None:
5046
5054
else :
5047
5055
s = parameter_name
5048
5056
parameters .append (s )
5049
- print (' {}({})' .format (short_name , ', ' .join (parameters )))
5057
+ print (' {}({})' .format (name , ', ' .join (parameters )))
5050
5058
print ()
5051
5059
print ("All converters also accept (c_default=None, py_default=None, annotation=None)." )
5052
5060
print ("All return converters also accept (py_default=None)." )
0 commit comments