7373)
7474
7575if get_robot_version () >= (7 , 0 ):
76- from robot .running .invalidkeyword import (
77- InvalidKeywordRunner as UserKeywordHandler ,
78- )
76+ from robot .running import UserKeyword as UserKeywordHandler
7977else :
8078 from robot .running .userkeyword import UserKeywordHandler
8179
@@ -166,7 +164,7 @@ def __init__(
166164 source : Optional [str ],
167165 line : Optional [int ],
168166 column : Optional [int ] = None ,
169- handler : Any = None ,
167+ handler : Optional [ UserKeywordHandler ] = None ,
170168 is_file : bool = True ,
171169 libname : Optional [str ] = None ,
172170 kwname : Optional [str ] = None ,
@@ -248,6 +246,12 @@ class DebugLogger(LoggerApi): # type: ignore[no-redef]
248246 def __init__ (self ) -> None :
249247 self .steps : List [Any ] = []
250248
249+ def start_try (self , data : "running.Try" , result : "result.Try" ) -> None :
250+ self .steps .append (data )
251+
252+ def end_try (self , data : "running.Try" , result : "result.Try" ) -> None :
253+ self .steps .pop ()
254+
251255 def start_keyword (self , data : running .Keyword , result : result .Keyword ) -> None :
252256 self .steps .append (data )
253257
@@ -967,6 +971,16 @@ def end_test(self, name: str, attributes: Dict[str, Any]) -> None:
967971
968972 self .remove_stackframe_entry (longname , type , source , line_no )
969973
974+ if get_robot_version () >= (7 , 0 ):
975+
976+ def get_current_keyword_handler (self , name : str ) -> UserKeywordHandler :
977+ return EXECUTION_CONTEXTS .current .namespace .get_runner (name ).keyword
978+
979+ else :
980+
981+ def get_current_keyword_handler (self , name : str ) -> UserKeywordHandler :
982+ return EXECUTION_CONTEXTS .current .namespace .get_runner (name )._handler
983+
970984 def start_keyword (self , name : str , attributes : Dict [str , Any ]) -> None :
971985 status = attributes .get ("status" , "" )
972986 source = attributes .get ("source" )
@@ -978,7 +992,7 @@ def start_keyword(self, name: str, attributes: Dict[str, Any]) -> None:
978992 handler : Any = None
979993 if type in ["KEYWORD" , "SETUP" , "TEARDOWN" ]:
980994 try :
981- handler = EXECUTION_CONTEXTS . current . namespace . get_runner (name ). _handler
995+ handler = self . get_current_keyword_handler (name )
982996 except (SystemExit , KeyboardInterrupt ):
983997 raise
984998 except BaseException :
@@ -1060,18 +1074,33 @@ def _should_run_except(self, branch: Any, error: str) -> bool:
10601074
10611075 return False
10621076
1077+ if get_robot_version () >= (7 , 0 ):
1078+
1079+ def _get_step_data (self , step : Any ) -> Any :
1080+ return step
1081+
1082+ else :
1083+
1084+ def _get_step_data (self , step : Any ) -> Any :
1085+ return step .data
1086+
10631087 def is_not_caugthed_by_except (self , message : Optional [str ]) -> bool :
10641088 if not message :
10651089 return True
10661090
1067- if get_robot_version () >= (5 , 0 ) and self .debug_logger :
1068- from robot .running .model import Try
1069-
1070- if self .debug_logger .steps :
1071- for branch in [f .data for f in reversed (self .debug_logger .steps ) if isinstance (f .data , Try )]:
1072- for except_branch in branch .except_branches :
1073- if self ._should_run_except (except_branch , message ):
1074- return False
1091+ if self .debug_logger :
1092+ if get_robot_version () >= (5 , 0 ):
1093+ from robot .running .model import Try
1094+
1095+ if self .debug_logger .steps :
1096+ for branch in [
1097+ self ._get_step_data (f )
1098+ for f in reversed (self .debug_logger .steps )
1099+ if isinstance (self ._get_step_data (f ), Try )
1100+ ]:
1101+ for except_branch in branch .except_branches :
1102+ if self ._should_run_except (except_branch , message ):
1103+ return False
10751104 return True
10761105
10771106 def end_keyword (self , name : str , attributes : Dict [str , Any ]) -> None :
@@ -1105,7 +1134,7 @@ def end_keyword(self, name: str, attributes: Dict[str, Any]) -> None:
11051134 handler : Any = None
11061135 if type in ["KEYWORD" , "SETUP" , "TEARDOWN" ]:
11071136 try :
1108- handler = EXECUTION_CONTEXTS . current . namespace . get_runner (name ). _handler
1137+ handler = self . get_current_keyword_handler (name )
11091138 except (SystemExit , KeyboardInterrupt ):
11101139 raise
11111140 except BaseException :
@@ -1369,6 +1398,16 @@ def _create_variable(self, name: str, value: Any) -> Variable:
13691398
13701399 return Variable (name = name , value = repr (value ), type = repr (type (value )))
13711400
1401+ if get_robot_version () >= (7 , 0 ):
1402+
1403+ def get_handler_args (self , handler : UserKeywordHandler ) -> Any :
1404+ return handler .args
1405+
1406+ else :
1407+
1408+ def get_handler_args (self , handler : UserKeywordHandler ) -> Any :
1409+ return handler .arguments
1410+
13721411 def get_variables (
13731412 self ,
13741413 variables_reference : int ,
@@ -1436,8 +1475,8 @@ def get_variables(
14361475 }
14371476 )
14381477
1439- if entry .handler is not None and entry .handler . arguments :
1440- for argument in entry .handler . arguments .argument_names :
1478+ if entry .handler is not None and self . get_handler_args ( entry .handler ) :
1479+ for argument in self . get_handler_args ( entry .handler ) .argument_names :
14411480 name = f"${{{ argument } }}"
14421481 try :
14431482 value = vars [name ]
@@ -1494,6 +1533,16 @@ def get_variables(
14941533 SPLIT_LINE : ClassVar = re .compile (r"(?= {2,}| ?\t)\s*" )
14951534 CURRDIR : ClassVar = re .compile (r"(?i)\$\{CURDIR\}" )
14961535
1536+ if get_robot_version () >= (7 , 0 ):
1537+
1538+ def _run_keyword (self , kw : Keyword , context : Any ) -> Any :
1539+ return kw .run (context .steps [- 1 ][1 ], context )
1540+
1541+ else :
1542+
1543+ def _run_keyword (self , kw : Keyword , context : Any ) -> Any :
1544+ return kw .run (context )
1545+
14971546 def evaluate (
14981547 self ,
14991548 expression : str ,
@@ -1557,7 +1606,7 @@ def run_kw() -> Any:
15571606 args = tuple (splitted [1 :]),
15581607 assign = tuple (variables ),
15591608 )
1560- return kw . run ( evaluate_context )
1609+ return self . _run_keyword ( kw , evaluate_context )
15611610
15621611 result = self .run_in_robot_thread (run_kw )
15631612
@@ -1611,7 +1660,7 @@ def run_kw() -> Any:
16111660 for kw in test .body :
16121661 with LOGGER .delayed_logging :
16131662 try :
1614- result = kw . run ( evaluate_context )
1663+ result = self . _run_keyword ( kw , evaluate_context )
16151664 except (SystemExit , KeyboardInterrupt ):
16161665 raise
16171666 except BaseException as e :
@@ -1793,6 +1842,22 @@ def set_exception_breakpoints(
17931842
17941843 return result or None
17951844
1845+ if get_robot_version () >= (7 , 0 ):
1846+
1847+ def _get_keywords_from_lib (self , lib : Any ) -> Any :
1848+ return lib .keywords
1849+
1850+ def _get_short_doc_from_kw (self , kw : Any ) -> Any :
1851+ return kw .short_doc
1852+
1853+ else :
1854+
1855+ def _get_keywords_from_lib (self , lib : Any ) -> Any :
1856+ return lib .handlers
1857+
1858+ def _get_short_doc_from_kw (self , kw : Any ) -> Any :
1859+ return kw .shortdoc
1860+
17961861 def completions (
17971862 self ,
17981863 text : str ,
@@ -1824,14 +1889,14 @@ def completions(
18241889 type = CompletionItemType .MODULE ,
18251890 )
18261891 )
1827- for kw in library . handlers :
1892+ for kw in self . _get_keywords_from_lib ( library ) :
18281893 result .append (
18291894 CompletionItem (
18301895 label = kw .name ,
18311896 text = kw .name ,
18321897 sort_text = f"001_{ kw .name } " ,
18331898 type = CompletionItemType .FUNCTION ,
1834- detail = kw . shortdoc ,
1899+ detail = self . _get_short_doc_from_kw ( kw ) ,
18351900 )
18361901 )
18371902
@@ -1844,14 +1909,14 @@ def completions(
18441909 type = CompletionItemType .MODULE ,
18451910 )
18461911 )
1847- for kw in resource . handlers :
1912+ for kw in self . _get_keywords_from_lib ( resource ) :
18481913 result .append (
18491914 CompletionItem (
18501915 label = kw .name ,
18511916 text = kw .name ,
18521917 sort_text = f"001_{ kw .name } " ,
18531918 type = CompletionItemType .FUNCTION ,
1854- detail = kw . shortdoc ,
1919+ detail = self . _get_short_doc_from_kw ( kw ) ,
18551920 )
18561921 )
18571922
0 commit comments