@@ -500,18 +500,26 @@ def resolve(
500
500
self .var_positional ,
501
501
self .named_only ,
502
502
self .var_named ,
503
- self .embedded ,
504
503
self .defaults ,
504
+ self .embedded ,
505
505
None ,
506
506
)
507
507
self .__robot_arguments .name = self .name
508
508
if validate :
509
- resolver = ArgumentResolver (
510
- self .__robot_arguments ,
511
- resolve_named = resolve_named ,
512
- resolve_variables_until = resolve_variables_until ,
513
- dict_to_kwargs = dict_to_kwargs ,
514
- )
509
+ if get_robot_version () < (7 , 0 ):
510
+ resolver = ArgumentResolver (
511
+ self .__robot_arguments ,
512
+ resolve_named = resolve_named ,
513
+ resolve_variables_until = resolve_variables_until ,
514
+ dict_to_kwargs = dict_to_kwargs ,
515
+ )
516
+ else :
517
+ resolver = ArgumentResolver (
518
+ self .__robot_arguments ,
519
+ resolve_named = resolve_named ,
520
+ resolve_args_until = resolve_variables_until ,
521
+ dict_to_kwargs = dict_to_kwargs ,
522
+ )
515
523
return cast (Tuple [List [Any ], List [Tuple [str , Any ]]], resolver .resolve (arguments , variables ))
516
524
517
525
class MyNamedArgumentResolver (NamedArgumentResolver ):
@@ -1300,18 +1308,35 @@ def longname(self) -> Any:
1300
1308
1301
1309
@property
1302
1310
def is_error_handler (self ) -> bool :
1303
- from robot .running .usererrorhandler import UserErrorHandler
1311
+ if get_robot_version () < (7 , 0 ):
1312
+ from robot .running .usererrorhandler import UserErrorHandler
1313
+
1314
+ return isinstance (self .kw , UserErrorHandler )
1304
1315
1305
- return isinstance (self .kw , UserErrorHandler )
1316
+ from robot .running .invalidkeyword import InvalidKeyword
1317
+
1318
+ return isinstance (self .kw , InvalidKeyword )
1306
1319
1307
1320
@property
1308
1321
def error_handler_message (self ) -> Optional [str ]:
1309
- from robot .running .usererrorhandler import UserErrorHandler
1310
-
1311
1322
if self .is_error_handler :
1312
- return str (cast (UserErrorHandler , self .kw ).error )
1323
+ return str (self .kw .error )
1324
+
1313
1325
return None
1314
1326
1327
+ @property
1328
+ def error (self ) -> Any :
1329
+ return self .kw .error
1330
+
1331
+ @property
1332
+ def args (self ) -> Any :
1333
+ try :
1334
+ return self .kw .args
1335
+ except (SystemExit , KeyboardInterrupt ):
1336
+ raise
1337
+ except BaseException :
1338
+ return None
1339
+
1315
1340
1316
1341
class MessageAndTraceback (NamedTuple ):
1317
1342
message : str
@@ -1580,7 +1605,6 @@ def get_library_doc(
1580
1605
from robot .output .loggerhelper import AbstractLogger
1581
1606
from robot .running .outputcapture import OutputCapturer
1582
1607
from robot .running .runkwregister import RUN_KW_REGISTER
1583
- from robot .running .testlibraries import _get_lib_class
1584
1608
from robot .utils import Importer
1585
1609
1586
1610
class Logger (AbstractLogger ):
@@ -1607,10 +1631,21 @@ def get_test_library(
1607
1631
create_handlers : bool = True ,
1608
1632
logger : Any = LOGGER ,
1609
1633
) -> Any :
1610
- libclass = _get_lib_class (libcode )
1611
- lib = libclass (libcode , name , args or [], source , logger , variables )
1612
- if create_handlers :
1613
- lib .create_handlers ()
1634
+ if get_robot_version () < (7 , 0 ):
1635
+ libclass = robot .running .testlibraries ._get_lib_class (libcode )
1636
+ lib = libclass (libcode , name , args or [], source , logger , variables )
1637
+ if create_handlers :
1638
+ lib .create_handlers ()
1639
+ else :
1640
+ lib = robot .running .testlibraries .TestLibrary .from_code (
1641
+ libcode ,
1642
+ name ,
1643
+ source = Path (source ),
1644
+ args = args or [],
1645
+ variables = variables ,
1646
+ create_keywords = create_handlers ,
1647
+ logger = logger ,
1648
+ )
1614
1649
1615
1650
return lib
1616
1651
@@ -1684,7 +1719,10 @@ def get_test_library(
1684
1719
create_handlers = False ,
1685
1720
variables = robot_variables ,
1686
1721
)
1687
- lib .get_instance ()
1722
+ if get_robot_version () < (7 , 0 ):
1723
+ _ = lib .get_instance ()
1724
+ else :
1725
+ _ = lib .instance
1688
1726
except (SystemExit , KeyboardInterrupt ):
1689
1727
raise
1690
1728
except BaseException as e :
@@ -1700,13 +1738,16 @@ def get_test_library(
1700
1738
if args :
1701
1739
try :
1702
1740
lib = get_test_library (libcode , source , library_name , (), create_handlers = False )
1703
- lib .get_instance ()
1741
+ if get_robot_version () < (7 , 0 ):
1742
+ _ = lib .get_instance ()
1743
+ else :
1744
+ _ = lib .instance
1704
1745
except (SystemExit , KeyboardInterrupt ):
1705
1746
raise
1706
1747
except BaseException :
1707
1748
lib = None
1708
1749
1709
- real_source = lib .source if lib is not None else source
1750
+ real_source = str ( lib .source ) if lib is not None else source
1710
1751
1711
1752
libdoc = LibraryDoc (
1712
1753
name = library_name ,
@@ -1727,16 +1768,28 @@ def get_test_library(
1727
1768
1728
1769
if lib is not None :
1729
1770
try :
1730
- libdoc .has_listener = lib .has_listener
1771
+ if get_robot_version () < (7 , 0 ):
1772
+ libdoc .has_listener = lib .has_listener
1773
+
1774
+ if isinstance (lib , robot .running .testlibraries ._ModuleLibrary ):
1775
+ libdoc .library_type = LibraryType .MODULE
1776
+ elif isinstance (lib , robot .running .testlibraries ._ClassLibrary ):
1777
+ libdoc .library_type = LibraryType .CLASS
1778
+ elif isinstance (lib , robot .running .testlibraries ._DynamicLibrary ):
1779
+ libdoc .library_type = LibraryType .DYNAMIC
1780
+ elif isinstance (lib , robot .running .testlibraries ._HybridLibrary ):
1781
+ libdoc .library_type = LibraryType .HYBRID
1782
+ else :
1783
+ libdoc .has_listener = bool (lib .listeners )
1731
1784
1732
- if isinstance (lib , robot .running .testlibraries ._ModuleLibrary ):
1733
- libdoc .library_type = LibraryType .MODULE
1734
- elif isinstance (lib , robot .running .testlibraries ._ClassLibrary ):
1735
- libdoc .library_type = LibraryType .CLASS
1736
- elif isinstance (lib , robot .running .testlibraries ._DynamicLibrary ):
1737
- libdoc .library_type = LibraryType .DYNAMIC
1738
- elif isinstance (lib , robot .running .testlibraries ._HybridLibrary ):
1739
- libdoc .library_type = LibraryType .HYBRID
1785
+ if isinstance (lib , robot .running .testlibraries .ModuleLibrary ):
1786
+ libdoc .library_type = LibraryType .MODULE
1787
+ elif isinstance (lib , robot .running .testlibraries .ClassLibrary ):
1788
+ libdoc .library_type = LibraryType .CLASS
1789
+ elif isinstance (lib , robot .running .testlibraries .DynamicLibrary ):
1790
+ libdoc .library_type = LibraryType .DYNAMIC
1791
+ elif isinstance (lib , robot .running .testlibraries .HybridLibrary ):
1792
+ libdoc .library_type = LibraryType .HYBRID
1740
1793
1741
1794
init_wrappers = [KeywordWrapper (lib .init , source )]
1742
1795
init_keywords = [(KeywordDocBuilder ().build_keyword (k ), k ) for k in init_wrappers ]
@@ -1758,15 +1811,22 @@ def get_test_library(
1758
1811
longname = f"{ libdoc .name } .{ kw [0 ].name } " ,
1759
1812
doc_format = str (lib .doc_format ) or ROBOT_DOC_FORMAT ,
1760
1813
is_initializer = True ,
1761
- arguments_spec = ArgumentSpec .from_robot_argument_spec (kw [1 ].arguments ),
1814
+ arguments_spec = ArgumentSpec .from_robot_argument_spec (
1815
+ kw [1 ].arguments if get_robot_version () < (7 , 0 ) else kw [1 ].args
1816
+ ),
1762
1817
)
1763
1818
for kw in init_keywords
1764
1819
]
1765
1820
)
1766
1821
1767
1822
logger = Logger ()
1768
1823
lib .logger = logger
1769
- lib .create_handlers ()
1824
+
1825
+ if get_robot_version () < (7 , 0 ):
1826
+ lib .create_handlers ()
1827
+ else :
1828
+ lib .create_keywords ()
1829
+
1770
1830
for m in logger .messages :
1771
1831
if m [1 ] == "ERROR" :
1772
1832
errors .append (
@@ -1778,7 +1838,18 @@ def get_test_library(
1778
1838
)
1779
1839
)
1780
1840
1781
- keyword_wrappers = [KeywordWrapper (k , source ) for k in lib .handlers ]
1841
+ if get_robot_version () < (7 , 0 ):
1842
+ keyword_wrappers = [KeywordWrapper (k , source ) for k in lib .handlers ]
1843
+ else :
1844
+ keyword_wrappers = [KeywordWrapper (k , source ) for k in lib .keywords ]
1845
+
1846
+ def get_args_to_process (libdoc_name : str , kw_name : str ) -> Any :
1847
+ result = RUN_KW_REGISTER .get_args_to_process (libdoc_name , kw_name )
1848
+ if result == - 1 :
1849
+ return None
1850
+
1851
+ return result
1852
+
1782
1853
keyword_docs = [(KeywordDocBuilder ().build_keyword (k ), k ) for k in keyword_wrappers ]
1783
1854
libdoc .keywords = KeywordStore (
1784
1855
source = libdoc .name ,
@@ -1802,12 +1873,14 @@ def get_test_library(
1802
1873
is_error_handler = kw [1 ].is_error_handler ,
1803
1874
error_handler_message = kw [1 ].error_handler_message ,
1804
1875
is_registered_run_keyword = RUN_KW_REGISTER .is_run_keyword (libdoc .name , kw [0 ].name ),
1805
- args_to_process = RUN_KW_REGISTER . get_args_to_process (libdoc .name , kw [0 ].name ),
1876
+ args_to_process = get_args_to_process (libdoc .name , kw [0 ].name ),
1806
1877
deprecated = kw [0 ].deprecated ,
1807
- arguments_spec = ArgumentSpec .from_robot_argument_spec (kw [1 ].arguments )
1878
+ arguments_spec = ArgumentSpec .from_robot_argument_spec (
1879
+ kw [1 ].arguments if get_robot_version () < (7 , 0 ) else kw [1 ].args
1880
+ )
1808
1881
if not kw [1 ].is_error_handler
1809
1882
else None ,
1810
- return_type = str (kw [1 ].arguments .return_type ) if get_robot_version () >= (7 , 0 ) else None ,
1883
+ return_type = str (kw [1 ].args .return_type ) if get_robot_version () >= (7 , 0 ) else None ,
1811
1884
)
1812
1885
for kw in keyword_docs
1813
1886
],
@@ -2436,9 +2509,14 @@ def get_model_doc(
2436
2509
from robot .parsing .model .blocks import Keyword
2437
2510
from robot .parsing .model .statements import Arguments , KeywordName
2438
2511
from robot .running .builder .transformers import ResourceBuilder
2439
- from robot .running .model import ResourceFile
2440
- from robot .running .usererrorhandler import UserErrorHandler
2441
- from robot .running .userkeyword import UserLibrary
2512
+
2513
+ if get_robot_version () < (7 , 0 ):
2514
+ from robot .running .model import ResourceFile
2515
+ from robot .running .usererrorhandler import UserErrorHandler
2516
+ from robot .running .userkeyword import UserLibrary
2517
+ else :
2518
+ from robot .running .invalidkeyword import InvalidKeyword as UserErrorHandler
2519
+ from robot .running .resourcemodel import ResourceFile
2442
2520
2443
2521
errors : List [Error ] = []
2444
2522
keyword_name_nodes : List [KeywordName ] = []
@@ -2506,41 +2584,45 @@ def get_argument_definitions_from_line(line: int) -> List[ArgumentDefinition]:
2506
2584
with LOGGER .cache_only :
2507
2585
ResourceBuilder (res ).visit (model )
2508
2586
2509
- class MyUserLibrary (UserLibrary ):
2510
- current_kw : Any = None
2587
+ if get_robot_version () < (7 , 0 ):
2511
2588
2512
- def _log_creating_failed (self , handler : UserErrorHandler , error : BaseException ) -> None :
2513
- err = Error (
2514
- message = f"Creating keyword '{ handler .name } ' failed: { error !s} " ,
2515
- type_name = type (error ).__qualname__ ,
2516
- source = self .current_kw .source if self .current_kw is not None else None ,
2517
- line_no = self .current_kw .lineno if self .current_kw is not None else None ,
2518
- )
2519
- errors .append (err )
2589
+ class MyUserLibrary (UserLibrary ):
2590
+ current_kw : Any = None
2520
2591
2521
- def _create_handler (self , kw : Any ) -> Any :
2522
- self .current_kw = kw
2523
- try :
2524
- handler = super ()._create_handler (kw )
2525
- setattr (handler , "errors" , None )
2526
- except DataError as e :
2592
+ def _log_creating_failed (self , handler : UserErrorHandler , error : BaseException ) -> None :
2527
2593
err = Error (
2528
- message = str ( e ) ,
2529
- type_name = type (e ).__qualname__ ,
2530
- source = kw . source ,
2531
- line_no = kw . lineno ,
2594
+ message = f"Creating keyword ' { handler . name } ' failed: { error !s } " ,
2595
+ type_name = type (error ).__qualname__ ,
2596
+ source = self . current_kw . source if self . current_kw is not None else None ,
2597
+ line_no = self . current_kw . lineno if self . current_kw is not None else None ,
2532
2598
)
2533
2599
errors .append (err )
2534
2600
2535
- handler = UserErrorHandler (e , kw .name , self .name )
2536
- handler .source = kw .source
2537
- handler .lineno = kw .lineno
2601
+ def _create_handler (self , kw : Any ) -> Any :
2602
+ self .current_kw = kw
2603
+ try :
2604
+ handler = super ()._create_handler (kw )
2605
+ setattr (handler , "errors" , None )
2606
+ except DataError as e :
2607
+ err = Error (
2608
+ message = str (e ),
2609
+ type_name = type (e ).__qualname__ ,
2610
+ source = kw .source ,
2611
+ line_no = kw .lineno ,
2612
+ )
2613
+ errors .append (err )
2614
+
2615
+ handler = UserErrorHandler (e , kw .name , self .name )
2616
+ handler .source = kw .source
2617
+ handler .lineno = kw .lineno
2538
2618
2539
- setattr (handler , "errors" , [err ])
2619
+ setattr (handler , "errors" , [err ])
2540
2620
2541
- return handler
2621
+ return handler
2542
2622
2543
- lib = MyUserLibrary (res )
2623
+ lib = MyUserLibrary (res )
2624
+ else :
2625
+ lib = res
2544
2626
2545
2627
libdoc = LibraryDoc (
2546
2628
name = lib .name or "" ,
@@ -2552,6 +2634,21 @@ def _create_handler(self, kw: Any) -> Any:
2552
2634
errors = errors ,
2553
2635
)
2554
2636
2637
+ def get_kw_errors (kw : Any ) -> Any :
2638
+ r = getattr (kw , "errors" ) if hasattr (kw , "errors" ) else None
2639
+ if get_robot_version () >= (7 , 0 ) and kw .error :
2640
+ if not r :
2641
+ r = []
2642
+ r .append (
2643
+ Error (
2644
+ message = str (kw .error ),
2645
+ type_name = "KeywordError" ,
2646
+ source = kw .source ,
2647
+ line_no = kw .lineno ,
2648
+ )
2649
+ )
2650
+ return r
2651
+
2555
2652
libdoc .keywords = KeywordStore (
2556
2653
source = libdoc .name ,
2557
2654
source_type = libdoc .type ,
@@ -2571,15 +2668,20 @@ def _create_handler(self, kw: Any) -> Any:
2571
2668
libtype = libdoc .type ,
2572
2669
longname = f"{ libdoc .name } .{ kw [0 ].name } " ,
2573
2670
is_embedded = is_embedded_keyword (kw [0 ].name ),
2574
- errors = getattr (kw [1 ], "errors" ) if hasattr ( kw [ 1 ], "errors" ) else None ,
2671
+ errors = get_kw_errors (kw [1 ]) ,
2575
2672
is_error_handler = isinstance (kw [1 ], UserErrorHandler ),
2576
2673
error_handler_message = str (cast (UserErrorHandler , kw [1 ]).error )
2577
2674
if isinstance (kw [1 ], UserErrorHandler )
2578
2675
else None ,
2579
- arguments_spec = ArgumentSpec .from_robot_argument_spec (kw [1 ].arguments ),
2676
+ arguments_spec = ArgumentSpec .from_robot_argument_spec (
2677
+ kw [1 ].arguments if get_robot_version () < (7 , 0 ) else kw [1 ].args
2678
+ ),
2580
2679
argument_definitions = get_argument_definitions_from_line (kw [0 ].lineno ),
2581
2680
)
2582
- for kw in [(KeywordDocBuilder (resource = True ).build_keyword (lw ), lw ) for lw in lib .handlers ]
2681
+ for kw in [
2682
+ (KeywordDocBuilder (resource = True ).build_keyword (lw ), lw )
2683
+ for lw in (lib .handlers if get_robot_version () < (7 , 0 ) else lib .keywords )
2684
+ ]
2583
2685
],
2584
2686
)
2585
2687
0 commit comments