@@ -631,26 +631,28 @@ async def ast_raise(self, arg):
631631 raise exc from cause
632632 raise exc
633633
634- async def ast_with (self , arg ):
634+ async def ast_with (self , arg , async_attr = "" ):
635635 """Execute with statement."""
636636 hit_except = False
637637 ctx_list = []
638638 val = None
639+ enter_attr = f"__{ async_attr } enter__"
640+ exit_attr = f"__{ async_attr } exit__"
639641 try :
640642 for item in arg .items :
641643 manager = await self .aeval (item .context_expr )
642644 ctx_list .append (
643645 {
644646 "manager" : manager ,
645- "enter" : type (manager ). __enter__ ,
646- "exit" : type (manager ). __exit__ ,
647+ "enter" : getattr ( type (manager ), enter_attr ) ,
648+ "exit" : getattr ( type (manager ), exit_attr ) ,
647649 "target" : item .optional_vars ,
648650 }
649651 )
650652 for ctx in ctx_list :
651653 if ctx ["target" ]:
652654 value = await self .call_func (
653- ctx ["enter" ], "__enter__" , [ctx ["manager" ]], {}
655+ ctx ["enter" ], enter_attr , [ctx ["manager" ]], {}
654656 )
655657 await self .recurse_assign (ctx ["target" ], value )
656658 for arg1 in arg .body :
@@ -662,7 +664,7 @@ async def ast_with(self, arg):
662664 exit_ok = True
663665 for ctx in reversed (ctx_list ):
664666 ret = await self .call_func (
665- ctx ["exit" ], "__exit__" , [ctx ["manager" ], * sys .exc_info ()], {}
667+ ctx ["exit" ], exit_attr , [ctx ["manager" ], * sys .exc_info ()], {}
666668 )
667669 exit_ok = exit_ok and ret
668670 if not exit_ok :
@@ -671,13 +673,13 @@ async def ast_with(self, arg):
671673 if not hit_except :
672674 for ctx in reversed (ctx_list ):
673675 await self .call_func (
674- ctx ["exit" ], "__exit__" , [ctx ["manager" ], None , None , None ], {}
676+ ctx ["exit" ], exit_attr , [ctx ["manager" ], None , None , None ], {}
675677 )
676678 return val
677679
678680 async def ast_asyncwith (self , arg ):
679681 """Execute async with statement."""
680- return await self .ast_with (arg )
682+ return await self .ast_with (arg , async_attr = "a" )
681683
682684 async def ast_pass (self , arg ):
683685 """Execute pass statement."""
0 commit comments