2727from reportportal_client .helpers import LifoQueue , guess_content_type_from_bytes , is_binary
2828
2929from robotframework_reportportal .helpers import _unescape , match_pattern , translate_glob_to_regex
30- from robotframework_reportportal .model import Keyword , Launch , LogMessage , Suite , Test
30+ from robotframework_reportportal .model import Keyword , Launch , LogMessage , Suite , Test , Entity
3131from robotframework_reportportal .service import RobotService
3232from robotframework_reportportal .static import MAIN_SUITE_ID , PABOT_WITHOUT_LAUNCH_ID_MSG
3333from robotframework_reportportal .variables import Variables
@@ -150,8 +150,7 @@ def _build_msg_struct(self, message: Dict[str, Any]) -> LogMessage:
150150 else :
151151 msg = LogMessage (message ["message" ])
152152 msg .level = message ["level" ]
153- if not msg .launch_log :
154- msg .item_id = getattr (self .current_item , "rp_item_id" , None )
153+ msg .item_id = self .current_item .rp_item_id
155154
156155 message_str = msg .message
157156 if is_binary (message_str ):
@@ -218,42 +217,52 @@ def __post_log_message(self, message: LogMessage) -> None:
218217 logger .debug (f"ReportPortal - Log Message: { message } " )
219218 self .service .log (message = message )
220219
221- def __post_skipped_keyword (self , kwd : Keyword ) -> None :
220+ def __post_skipped_keyword (self , kwd : Keyword , clean_data_remove : bool ) -> None :
222221 self ._do_start_keyword (kwd )
222+ if clean_data_remove :
223+ kwd .remove_data = False
223224 for log_message in kwd .skipped_logs :
224225 self .__post_log_message (log_message )
225- skipped_kwds = kwd .skipped_keywords
226+ skipped_keywords = kwd .skipped_keywords
226227 kwd .skipped_keywords = []
227- for skipped_kwd in skipped_kwds :
228- self .__post_skipped_keyword (skipped_kwd )
229- self ._do_end_keyword (kwd )
228+ for skipped_kwd in skipped_keywords :
229+ self .__post_skipped_keyword (skipped_kwd , clean_data_remove )
230+ if kwd .status != "NOT SET" :
231+ self ._do_end_keyword (kwd )
230232
231- def _post_skipped_keywords (self , to_post : Optional [Any ]) -> None :
233+ def _post_skipped_keywords (self , to_post : Optional [Any ], clean_data_remove : bool = False ) -> None :
232234 if not to_post :
233235 return
234236 if isinstance (to_post , Keyword ):
235237 if not to_post .posted :
236238 self ._do_start_keyword (to_post )
239+ if clean_data_remove :
240+ to_post .remove_data = False
237241 log_messages = to_post .skipped_logs
238242 to_post .skipped_logs = []
239243 for log_message in log_messages :
240244 self .__post_log_message (log_message )
241- skipped_kwds = to_post .skipped_keywords
242- if skipped_kwds :
245+ skipped_keywords = to_post .skipped_keywords
246+ if skipped_keywords :
243247 to_post .skipped_keywords = []
244- for skipped_kwd in skipped_kwds :
248+ for skipped_kwd in skipped_keywords :
245249 if skipped_kwd .posted :
246250 log_messages = skipped_kwd .skipped_logs
247251 skipped_kwd .skipped_logs = []
248252 for log_message in log_messages :
249253 self .__post_log_message (log_message )
250- skipped_child_kwds = skipped_kwd .skipped_keywords
251- for skipped_child_kwd in skipped_child_kwds :
254+ skipped_child_keywords = skipped_kwd .skipped_keywords
255+ for skipped_child_kwd in skipped_child_keywords :
252256 if skipped_child_kwd .posted :
253257 continue
254- self .__post_skipped_keyword (skipped_child_kwd )
258+ self .__post_skipped_keyword (skipped_child_kwd , clean_data_remove )
255259 continue
256- self .__post_skipped_keyword (skipped_kwd )
260+ self .__post_skipped_keyword (skipped_kwd , clean_data_remove )
261+
262+ def __find_root_keyword_with_removed_data (self , keyword : Entity ) -> Entity :
263+ if keyword .parent .remove_data and keyword .parent .type == "KEYWORD" :
264+ return self .__find_root_keyword_with_removed_data (keyword .parent )
265+ return keyword
257266
258267 def _log_message (self , message : LogMessage ) -> None :
259268 """Send log message to the Report Portal.
@@ -274,10 +283,8 @@ def _log_message(self, message: LogMessage) -> None:
274283 else :
275284 if not self ._remove_all_keyword_content :
276285 # Post everything skipped by '--removekeywords' option
277- self ._post_skipped_keywords (current_item )
286+ self ._post_skipped_keywords (self . __find_root_keyword_with_removed_data ( current_item ), True )
278287 self .__post_log_message (message )
279- else :
280- self .current_item .skipped_logs .append (message )
281288
282289 @check_rp_enabled
283290 def log_message (self , message : Dict ) -> None :
@@ -304,11 +311,6 @@ def log_message_with_image(self, msg: Dict, image: str):
304311 }
305312 self ._log_message (mes )
306313
307- @property
308- def parent_id (self ) -> Optional [str ]:
309- """Get rp_item_id attribute of the current item."""
310- return getattr (self .current_item , "rp_item_id" , None )
311-
312314 @property
313315 def service (self ) -> RobotService :
314316 """Initialize instance of the RobotService."""
@@ -409,8 +411,7 @@ def start_suite(self, name: str, attributes: Dict, ts: Optional[Any] = None) ->
409411 logger .debug (f"ReportPortal - Create global Suite: { attributes } " )
410412 else :
411413 logger .debug (f"ReportPortal - Start Suite: { attributes } " )
412- suite = Suite (name , attributes )
413- suite .rp_parent_item_id = self .parent_id
414+ suite = Suite (name , attributes , self .current_item )
414415 suite .rp_item_id = self .service .start_suite (suite = suite , ts = ts )
415416 self ._add_current_item (suite )
416417
@@ -440,9 +441,8 @@ def start_test(self, name: str, attributes: Dict, ts: Optional[Any] = None) -> N
440441 # no 'source' parameter at this level for Robot versions < 4
441442 attributes = attributes .copy ()
442443 attributes ["source" ] = getattr (self .current_item , "source" , None )
443- test = Test (name = name , robot_attributes = attributes , test_attributes = self .variables .test_attributes )
444+ test = Test (name , attributes , self .variables .test_attributes , self . current_item )
444445 logger .debug (f"ReportPortal - Start Test: { attributes } " )
445- test .rp_parent_item_id = self .parent_id
446446 test .rp_item_id = self .service .start_test (test = test , ts = ts )
447447 self ._add_current_item (test )
448448
@@ -489,9 +489,8 @@ def start_keyword(self, name: str, attributes: Dict, ts: Optional[Any] = None) -
489489 :param attributes: Dictionary passed by the Robot Framework
490490 :param ts: Timestamp(used by the ResultVisitor)
491491 """
492- kwd = Keyword (name = name , parent_type = self .current_item . type , robot_attributes = attributes )
492+ kwd = Keyword (name , attributes , self .current_item )
493493 parent = self .current_item
494- kwd .rp_parent_item_id = parent .rp_item_id
495494 skip_kwd = parent .remove_data
496495 skip_data = self ._remove_all_keyword_content or self ._remove_data_passed_tests
497496 kwd .remove_data = skip_kwd or skip_data
@@ -535,31 +534,33 @@ def end_keyword(self, _: Optional[str], attributes: Dict, ts: Optional[Any] = No
535534 kwd = self .current_item .update (attributes )
536535
537536 if kwd .matched_filter is WUKS_KEYWORD_MATCH and kwd .skip_origin is kwd :
538- skipped_kwds = kwd .skipped_keywords
539- skipped_kwds_num = len (skipped_kwds )
540- if skipped_kwds_num > 2 :
537+ skipped_keywords = kwd .skipped_keywords
538+ skipped_keywords_num = len (skipped_keywords )
539+ if skipped_keywords_num > 2 :
541540 if kwd .status == "FAIL" :
542541 message = REMOVED_WUKS_KEYWORD_LOG .format (number = len (kwd .skipped_keywords ) - 1 )
543542 else :
544543 message = REMOVED_WUKS_KEYWORD_LOG .format (number = len (kwd .skipped_keywords ) - 2 )
545544 self ._log_data_removed (kwd .rp_item_id , kwd .start_time , message )
546- if skipped_kwds_num > 1 and kwd .status != "FAIL" :
545+ if skipped_keywords_num > 1 and kwd .status != "FAIL" :
547546 first_iteration = kwd .skipped_keywords [0 ]
548547 self ._post_skipped_keywords (first_iteration )
549548 self ._do_end_keyword (first_iteration )
550- if skipped_kwds_num > 0 :
549+ if skipped_keywords_num > 0 :
551550 last_iteration = kwd .skipped_keywords [- 1 ]
552551 self ._post_skipped_keywords (last_iteration )
553552 self ._do_end_keyword (last_iteration , ts )
554553
555554 elif (
556555 (kwd .matched_filter is FOR_KEYWORD_MATCH ) or (kwd .matched_filter is WHILE_KEYWORD_NAME )
557556 ) and kwd .skip_origin is kwd :
558- skipped_kwds = kwd .skipped_keywords
559- skipped_kwds_num = len (skipped_kwds )
560- if skipped_kwds_num > 1 :
557+ skipped_keywords = kwd .skipped_keywords
558+ skipped_keywords_num = len (skipped_keywords )
559+ if skipped_keywords_num > 1 :
561560 self ._log_data_removed (
562- kwd .rp_item_id , kwd .start_time , REMOVED_FOR_WHILE_KEYWORD_LOG .format (number = skipped_kwds_num - 1 )
561+ kwd .rp_item_id ,
562+ kwd .start_time ,
563+ REMOVED_FOR_WHILE_KEYWORD_LOG .format (number = skipped_keywords_num - 1 ),
563564 )
564565 last_iteration = kwd .skipped_keywords [- 1 ]
565566 self ._post_skipped_keywords (last_iteration )
0 commit comments