@@ -561,49 +561,42 @@ async def eval_decorators(self, ast_ctx):
561
561
562
562
actual_call = self .real_call
563
563
564
- for dec in reversed (decorator_chain_funcs ):
565
- if isinstance (dec , ast .Call ) and isinstance (dec .func , ast .Name ):
566
- args = []
567
- kwargs = {}
568
- for arg in dec .args :
569
- args .append (await ast_ctx .aeval (arg ))
570
- for keyw in dec .keywords :
571
- kwargs [keyw .arg ] = await ast_ctx .aeval (keyw .value )
572
- if len (kwargs ) == 0 :
564
+ try :
565
+ for dec in reversed (decorator_chain_funcs ):
566
+ if isinstance (dec , ast .Call ) and isinstance (dec .func , ast .Name ):
567
+ args = []
573
568
kwargs = {}
569
+ for arg in dec .args :
570
+ args .append (await ast_ctx .aeval (arg ))
571
+ for keyw in dec .keywords :
572
+ kwargs [keyw .arg ] = await ast_ctx .aeval (keyw .value )
573
+ if len (kwargs ) == 0 :
574
+ kwargs = {}
575
+ func_def = ast_ctx .global_sym_table [dec .func .id ]
574
576
575
- func_def = ast_ctx .global_sym_table [dec .func .id ]
576
- _LOGGER .info (
577
- "got Call calling %s with call %s %s" ,
578
- func_def ,
579
- args ,
580
- kwargs
581
- )
582
- if isinstance (func_def , EvalFuncVar ):
583
- _LOGGER .info (
584
- "%s is EvalFuncVar" ,
585
- self .name
586
- )
587
577
wrapper = await func_def .call (ast_ctx , * args , ** kwargs )
588
- actual_call = await wrapper (actual_call )
589
- else :
590
- _LOGGER .info (
591
- "%s is NOT EvalFuncVar" ,
592
- self .name
593
- )
594
- wrapper = await func_def .call (* args , ** kwargs )
595
- actual_call = await wrapper (actual_call )
596
-
597
- elif isinstance (dec , ast .Name ):
598
- func_def = ast_ctx .global_sym_table [dec .id ]
599
- _LOGGER .info (
600
- "got Name calling %s with call" ,
601
- func_def
602
- )
603
- actual_call = await func_def .call (ast_ctx , actual_call )
578
+ def make_actual_call_inner (actual_call ):
579
+ async def actual_call_inner (* args_tuple , ** kwargs ):
580
+ args = list (args_tuple )
581
+ if len (args ) > 0 and isinstance (args [0 ], AstEval ):
582
+ _LOGGER .info ('AstEval seen' )
583
+ args .pop (0 )
584
+ _LOGGER .info (actual_call )
585
+ return await actual_call (ast_ctx , * args , ** kwargs )
586
+ return actual_call_inner
587
+ actual_call = await wrapper (make_actual_call_inner (actual_call ))
588
+
589
+ elif isinstance (dec , ast .Name ):
590
+ func_def = ast_ctx .global_sym_table [dec .id ]
591
+ actual_call = await func_def .call (ast_ctx , actual_call )
604
592
605
- else :
606
- _LOGGER .error ("function %s has unexpected global_sym_table decorator type %s" , self .name , dec )
593
+ else :
594
+ _LOGGER .error ("function %s has unexpected global_sym_table decorator type %s" , self .name , dec )
595
+ except Exception as e :
596
+ _LOGGER .error (
597
+ "Something went wrong %s" ,
598
+ e
599
+ )
607
600
608
601
self .perform_call = actual_call
609
602
0 commit comments